From 660405505ff0e57cf9d8024f9260a1eafa40d31b Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sat, 4 Apr 2020 20:52:33 +0200 Subject: [PATCH 01/20] Remove C compat It's unmaintained and clear that we won't be going back since some functions can only be solved with C++ --- Source/capture.cpp | 12 ------- Source/dthread.cpp | 14 -------- Source/dx.cpp | 78 ------------------------------------------- Source/engine.cpp | 10 ------ Source/logging.cpp | 10 ------ Source/nthread.cpp | 14 -------- Source/palette.cpp | 17 ---------- Source/scrollrt.cpp | 7 ---- Source/sound.cpp | 80 --------------------------------------------- 9 files changed, 242 deletions(-) diff --git a/Source/capture.cpp b/Source/capture.cpp index 552b43e26..ba660f7a1 100644 --- a/Source/capture.cpp +++ b/Source/capture.cpp @@ -141,11 +141,7 @@ static void RedPalette(PALETTEENTRY *pal) red[i].peFlags = 0; } -#ifdef __cplusplus lpDDPalette->SetEntries(0, 0, 256, red); -#else - lpDDPalette->lpVtbl->SetEntries(lpDDPalette, 0, 0, 256, red); -#endif } void CaptureScreen() @@ -158,11 +154,7 @@ void CaptureScreen() hObject = CaptureFile(FileName); if (hObject != INVALID_HANDLE_VALUE) { DrawAndBlit(); -#ifdef __cplusplus lpDDPalette->GetEntries(0, 0, 256, palette); -#else - lpDDPalette->lpVtbl->GetEntries(lpDDPalette, 0, 0, 256, palette); -#endif RedPalette(palette); lock_buf(2); @@ -180,10 +172,6 @@ void CaptureScreen() DeleteFile(FileName); Sleep(300); -#ifdef __cplusplus lpDDPalette->SetEntries(0, 0, 256, palette); -#else - lpDDPalette->lpVtbl->SetEntries(lpDDPalette, 0, 0, 256, palette); -#endif } } diff --git a/Source/dthread.cpp b/Source/dthread.cpp index d6f5ea271..deeb473e6 100644 --- a/Source/dthread.cpp +++ b/Source/dthread.cpp @@ -6,9 +6,7 @@ #include "all.h" #include "../3rdParty/Storm/Source/storm.h" -#ifdef __cplusplus static CCritSect sgMemCrit; -#endif unsigned int glpDThreadId; TMegaPkt *sgpInfoHead; /* may not be right struct */ BOOLEAN dthread_running; @@ -21,16 +19,12 @@ void dthread_remove_player(int pnum) { TMegaPkt *pkt; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif for (pkt = sgpInfoHead; pkt; pkt = pkt->pNext) { if (pkt->dwSpaceLeft == pnum) pkt->dwSpaceLeft = MAX_PLRS; } -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } void dthread_send_delta(int pnum, char cmd, void *pbSrc, int dwLen) @@ -48,9 +42,7 @@ void dthread_send_delta(int pnum, char cmd, void *pbSrc, int dwLen) pkt->data[0] = cmd; *(DWORD *)&pkt->data[4] = dwLen; memcpy(&pkt->data[8], pbSrc, dwLen); -#ifdef __cplusplus sgMemCrit.Enter(); -#endif p = (TMegaPkt *)&sgpInfoHead; while (p->pNext) { p = p->pNext; @@ -58,9 +50,7 @@ void dthread_send_delta(int pnum, char cmd, void *pbSrc, int dwLen) p->pNext = pkt; SetEvent(sghWorkToDoEvent); -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } void dthread_start() @@ -98,17 +88,13 @@ unsigned int __stdcall dthread_handler(void *data) app_fatal("dthread4:\n%s", error_buf); } -#ifdef __cplusplus sgMemCrit.Enter(); -#endif pkt = sgpInfoHead; if (sgpInfoHead) sgpInfoHead = sgpInfoHead->pNext; else ResetEvent(sghWorkToDoEvent); -#ifdef __cplusplus sgMemCrit.Leave(); -#endif if (pkt) { if (pkt->dwSpaceLeft != MAX_PLRS) diff --git a/Source/dx.cpp b/Source/dx.cpp index 2ead8b687..ce9c25d90 100644 --- a/Source/dx.cpp +++ b/Source/dx.cpp @@ -16,9 +16,7 @@ IDirectDrawSurface *lpDDSPrimary; #ifdef _DEBUG int locktbl[256]; #endif -#ifdef __cplusplus static CCritSect sgMemCrit; -#endif char gbBackBuf; char gbEmulate; HMODULE ghDiabMod; @@ -29,27 +27,15 @@ static void dx_create_back_buffer() HRESULT error_code; DDSURFACEDESC ddsd; -#ifdef __cplusplus error_code = lpDDSPrimary->GetCaps(&caps); -#else - error_code = lpDDSPrimary->lpVtbl->GetCaps(lpDDSPrimary, &caps); -#endif if (error_code != DD_OK) DDErrMsg(error_code, 59, "C:\\Src\\Diablo\\Source\\dx.cpp"); if (!gbBackBuf) { ddsd.dwSize = sizeof(ddsd); -#ifdef __cplusplus error_code = lpDDSPrimary->Lock(NULL, &ddsd, DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL); -#else - error_code = lpDDSPrimary->lpVtbl->Lock(lpDDSPrimary, NULL, &ddsd, DDLOCK_WRITEONLY | DDLOCK_WAIT, NULL); -#endif if (error_code == DD_OK) { -#ifdef __cplusplus lpDDSPrimary->Unlock(NULL); -#else - lpDDSPrimary->lpVtbl->Unlock(lpDDSPrimary, NULL); -#endif sgpBackBuf = (BYTE *)DiabloAllocPtr(BUFFER_HEIGHT * BUFFER_WIDTH); return; } @@ -65,18 +51,10 @@ static void dx_create_back_buffer() ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN; ddsd.dwHeight = BUFFER_HEIGHT; ddsd.ddpfPixelFormat.dwSize = sizeof(ddsd.ddpfPixelFormat); -#ifdef __cplusplus error_code = lpDDSPrimary->GetPixelFormat(&ddsd.ddpfPixelFormat); -#else - error_code = lpDDSPrimary->lpVtbl->GetPixelFormat(lpDDSPrimary, &ddsd.ddpfPixelFormat); -#endif if (error_code != DD_OK) ErrDlg(IDD_DIALOG1, error_code, "C:\\Src\\Diablo\\Source\\dx.cpp", 94); -#ifdef __cplusplus error_code = lpDDInterface->CreateSurface(&ddsd, &lpDDSBackBuf, NULL); -#else - error_code = lpDDInterface->lpVtbl->CreateSurface(lpDDInterface, &ddsd, &lpDDSBackBuf, NULL); -#endif if (error_code != DD_OK) ErrDlg(IDD_DIALOG1, error_code, "C:\\Src\\Diablo\\Source\\dx.cpp", 96); } @@ -90,11 +68,7 @@ static void dx_create_primary_surface() ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; -#ifdef __cplusplus error_code = lpDDInterface->CreateSurface(&ddsd, &lpDDSPrimary, NULL); -#else - error_code = lpDDInterface->lpVtbl->CreateSurface(lpDDInterface, &ddsd, &lpDDSPrimary, NULL); -#endif if (error_code != DD_OK) ErrDlg(IDD_DIALOG1, error_code, "C:\\Src\\Diablo\\Source\\dx.cpp", 109); } @@ -153,11 +127,7 @@ void dx_init(HWND hWnd) fullscreen = TRUE; #endif if (!fullscreen) { -#ifdef __cplusplus hDDVal = lpDDInterface->SetCooperativeLevel(hWnd, DDSCL_NORMAL | DDSCL_ALLOWREBOOT); -#else - hDDVal = lpDDInterface->lpVtbl->SetCooperativeLevel(lpDDInterface, hWnd, DDSCL_NORMAL | DDSCL_ALLOWREBOOT); -#endif if (hDDVal == DDERR_EXCLUSIVEMODEALREADYSET) { TriggerBreak(); } else if (hDDVal != DD_OK) { @@ -165,29 +135,17 @@ void dx_init(HWND hWnd) } SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); } else { -#ifdef __cplusplus hDDVal = lpDDInterface->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT | DDSCL_FULLSCREEN); -#else - hDDVal = lpDDInterface->lpVtbl->SetCooperativeLevel(lpDDInterface, hWnd, DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT | DDSCL_FULLSCREEN); -#endif if (hDDVal == DDERR_EXCLUSIVEMODEALREADYSET) { TriggerBreak(); } else if (hDDVal != DD_OK) { ErrDlg(IDD_DIALOG1, hDDVal, "C:\\Src\\Diablo\\Source\\dx.cpp", 170); } -#ifdef __cplusplus hDDVal = lpDDInterface->SetDisplayMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP); -#else - hDDVal = lpDDInterface->lpVtbl->SetDisplayMode(lpDDInterface, SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP); -#endif if (hDDVal != DD_OK) { winw = GetSystemMetrics(SM_CXSCREEN); winh = GetSystemMetrics(SM_CYSCREEN); -#ifdef __cplusplus hDDVal = lpDDInterface->SetDisplayMode(winw, winh, SCREEN_BPP); -#else - hDDVal = lpDDInterface->lpVtbl->SetDisplayMode(lpDDInterface, winw, winh, SCREEN_BPP); -#endif } if (hDDVal != DD_OK) { ErrDlg(IDD_DIALOG1, hDDVal, "C:\\Src\\Diablo\\Source\\dx.cpp", 183); @@ -207,9 +165,7 @@ static void lock_buf_priv() DDSURFACEDESC ddsd; HRESULT error_code; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif if (sgpBackBuf != NULL) { gpBuffer = sgpBackBuf; sgdwLockCount++; @@ -228,11 +184,7 @@ static void lock_buf_priv() return; } ddsd.dwSize = sizeof(ddsd); -#ifdef __cplusplus error_code = lpDDSBackBuf->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL); -#else - error_code = lpDDSBackBuf->lpVtbl->Lock(lpDDSBackBuf, NULL, &ddsd, DDLOCK_WAIT, NULL); -#endif if (error_code != DD_OK) DDErrMsg(error_code, 235, "C:\\Src\\Diablo\\Source\\dx.cpp"); @@ -263,18 +215,12 @@ static void unlock_buf_priv() gpBufEnd -= (size_t)gpBuffer; gpBuffer = NULL; if (sgpBackBuf == NULL) { -#ifdef __cplusplus error_code = lpDDSBackBuf->Unlock(NULL); -#else - error_code = lpDDSBackBuf->lpVtbl->Unlock(lpDDSBackBuf, NULL); -#endif if (error_code != DD_OK) DDErrMsg(error_code, 273, "C:\\Src\\Diablo\\Source\\dx.cpp"); } } -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } void unlock_buf(BYTE idx) @@ -292,46 +238,26 @@ void dx_cleanup() if (ghMainWnd) ShowWindow(ghMainWnd, SW_HIDE); SDrawDestroy(); -#ifdef __cplusplus sgMemCrit.Enter(); -#endif if (sgpBackBuf != NULL) { MemFreeDbg(sgpBackBuf); } else if (lpDDSBackBuf != NULL) { -#ifdef __cplusplus lpDDSBackBuf->Release(); -#else - lpDDSBackBuf->lpVtbl->Release(lpDDSBackBuf); -#endif lpDDSBackBuf = NULL; } sgdwLockCount = 0; gpBuffer = NULL; -#ifdef __cplusplus sgMemCrit.Leave(); -#endif if (lpDDSPrimary) { -#ifdef __cplusplus lpDDSPrimary->Release(); -#else - lpDDSPrimary->lpVtbl->Release(lpDDSPrimary); -#endif lpDDSPrimary = NULL; } if (lpDDPalette) { -#ifdef __cplusplus lpDDPalette->Release(); -#else - lpDDPalette->lpVtbl->Release(lpDDPalette); -#endif lpDDPalette = NULL; } if (lpDDInterface) { -#ifdef __cplusplus lpDDInterface->Release(); -#else - lpDDInterface->lpVtbl->Release(lpDDInterface); -#endif lpDDInterface = NULL; } } @@ -340,9 +266,7 @@ void dx_reinit() { int lockCount; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif ClearCursor(); lockCount = sgdwLockCount; @@ -360,9 +284,7 @@ void dx_reinit() lockCount--; } -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } /* check extern remove stub */ diff --git a/Source/engine.cpp b/Source/engine.cpp index fb4608269..2107a8333 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -24,9 +24,7 @@ int orgseed; int sgnWidth; /** Current game seed */ int sglGameSeed; -#ifdef __cplusplus static CCritSect sgMemCrit; -#endif int SeedCount; BOOL gbNotInView; // valid - if x/y are in bounds @@ -2599,13 +2597,9 @@ BYTE *DiabloAllocPtr(DWORD dwBytes) { BYTE *buf; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif buf = (BYTE *)SMemAlloc(dwBytes, "C:\\Src\\Diablo\\Source\\ENGINE.CPP", 2236, 0); -#ifdef __cplusplus sgMemCrit.Leave(); -#endif if (buf == NULL) { ErrDlg(IDD_DIALOG2, GetLastError(), "C:\\Src\\Diablo\\Source\\ENGINE.CPP", 2269); @@ -2621,13 +2615,9 @@ BYTE *DiabloAllocPtr(DWORD dwBytes) void mem_free_dbg(void *p) { if (p) { -#ifdef __cplusplus sgMemCrit.Enter(); -#endif SMemFree(p, "C:\\Src\\Diablo\\Source\\ENGINE.CPP", 2317, 0); -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } } diff --git a/Source/logging.cpp b/Source/logging.cpp index a3fb3043b..f834e9b24 100644 --- a/Source/logging.cpp +++ b/Source/logging.cpp @@ -6,9 +6,7 @@ #include "all.h" #include "../3rdParty/Storm/Source/storm.h" -#ifdef __cplusplus static CCritSect sgMemCrit; -#endif CHAR FileName[MAX_PATH]; char log_buffer[388]; LPCVOID lpAddress; @@ -25,9 +23,7 @@ void __cdecl log_flush(BOOL force_close) { DWORD NumberOfBytesWritten; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif if (nNumberOfBytesToWrite) { if (log_file == INVALID_HANDLE_VALUE) { log_file = log_create(); @@ -44,9 +40,7 @@ void __cdecl log_flush(BOOL force_close) CloseHandle(log_file); log_file = INVALID_HANDLE_VALUE; } -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } HANDLE log_create() @@ -132,9 +126,7 @@ void __cdecl log_printf(const char *pszFmt, ...) char msg[512]; va_list va; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif va_start(va, pszFmt); _vsnprintf(msg, 0x200, pszFmt, va); va_end(va); @@ -154,9 +146,7 @@ void __cdecl log_printf(const char *pszFmt, ...) memcpy(&pBuffer[nNumberOfBytesToWrite], msg, size); nNumberOfBytesToWrite += size; } -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } void log_dump_computer_info() diff --git a/Source/nthread.cpp b/Source/nthread.cpp index 43aa04c56..a8673103a 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -8,9 +8,7 @@ BYTE sgbNetUpdateRate; DWORD gdwMsgLenTbl[MAX_PLRS]; -#ifdef __cplusplus static CCritSect sgMemCrit; -#endif DWORD gdwDeltaBytesSec; BOOLEAN nthread_should_run; DWORD gdwTurnsInTransit; @@ -160,9 +158,7 @@ void nthread_start(BOOL set_turn_upper_bit) gdwNormalMsgSize = largestMsgSize; if (gbMaxPlayers > 1) { sgbThreadIsRunning = FALSE; -#ifdef __cplusplus sgMemCrit.Enter(); -#endif nthread_should_run = TRUE; sghThread = (HANDLE)_beginthreadex(NULL, 0, nthread_handler, NULL, 0, &glpNThreadId); if (sghThread == INVALID_HANDLE_VALUE) { @@ -180,9 +176,7 @@ unsigned int __stdcall nthread_handler(void *data) if (nthread_should_run) { while (1) { -#ifdef __cplusplus sgMemCrit.Enter(); -#endif if (!nthread_should_run) break; nthread_send_and_recv_turn(0, 0); @@ -190,17 +184,13 @@ unsigned int __stdcall nthread_handler(void *data) delta = last_tick - GetTickCount(); else delta = 50; -#ifdef __cplusplus sgMemCrit.Leave(); -#endif if (delta > 0) Sleep(delta); if (!nthread_should_run) return 0; } -#ifdef __cplusplus sgMemCrit.Leave(); -#endif } return 0; } @@ -212,10 +202,8 @@ void nthread_cleanup() gdwNormalMsgSize = 0; gdwLargestMsgSize = 0; if (sghThread != INVALID_HANDLE_VALUE && glpNThreadId != GetCurrentThreadId()) { -#ifdef __cplusplus if (!sgbThreadIsRunning) sgMemCrit.Leave(); -#endif if (WaitForSingleObject(sghThread, INFINITE) == -1) { app_fatal("nthread3:\n(%s)", TraceLastError()); } @@ -227,12 +215,10 @@ void nthread_cleanup() void nthread_ignore_mutex(BOOL bStart) { if (sghThread != INVALID_HANDLE_VALUE) { -#ifdef __cplusplus if (bStart) sgMemCrit.Leave(); else sgMemCrit.Enter(); -#endif sgbThreadIsRunning = bStart; } } diff --git a/Source/palette.cpp b/Source/palette.cpp index 65d356650..83fc04f19 100644 --- a/Source/palette.cpp +++ b/Source/palette.cpp @@ -104,18 +104,10 @@ void palette_init() LoadGamma(); memcpy(system_palette, orig_palette, sizeof(orig_palette)); LoadSysPal(); -#ifdef __cplusplus error_code = lpDDInterface->CreatePalette(DDPCAPS_ALLOW256 | DDPCAPS_8BIT, system_palette, &lpDDPalette, NULL); -#else - error_code = lpDDInterface->lpVtbl->CreatePalette(lpDDInterface, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, system_palette, &lpDDPalette, NULL); -#endif if (error_code) ErrDlg(IDD_DIALOG8, error_code, "C:\\Src\\Diablo\\Source\\PALETTE.CPP", 143); -#ifdef __cplusplus error_code = lpDDSPrimary->SetPalette(lpDDPalette); -#else - error_code = lpDDSPrimary->lpVtbl->SetPalette(lpDDSPrimary, lpDDPalette); -#endif #ifndef RGBMODE if (error_code) ErrDlg(IDD_DIALOG8, error_code, "C:\\Src\\Diablo\\Source\\PALETTE.CPP", 146); @@ -159,13 +151,8 @@ void LoadRndLvlPal(int l) void ResetPal() { if (!lpDDSPrimary -#ifdef __cplusplus || lpDDSPrimary->IsLost() != DDERR_SURFACELOST || !lpDDSPrimary->Restore()) { -#else - || lpDDSPrimary->lpVtbl->IsLost(lpDDSPrimary) != DDERR_SURFACELOST - || !lpDDSPrimary->lpVtbl->Restore(lpDDSPrimary)) { -#endif SDrawRealizePalette(); } } @@ -213,11 +200,7 @@ static void SetFadeLevel(DWORD fadeval) system_palette[i].peBlue = (fadeval * logical_palette[i].peBlue) >> 8; } Sleep(3); -#ifdef __cplusplus lpDDInterface->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL); -#else - lpDDInterface->lpVtbl->WaitForVerticalBlank(lpDDInterface, DDWAITVB_BLOCKBEGIN, NULL); -#endif palette_update(); } } diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index d56272dd8..22efa0056 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -2584,17 +2584,10 @@ static void DrawFPS() if (framerate > 99) framerate = 99; wsprintf(String, "%2d", framerate); -#ifdef __cplusplus if (!lpDDSPrimary->GetDC(&hdc)) { TextOut(hdc, 0, 400, String, strlen(String)); lpDDSPrimary->ReleaseDC(hdc); } -#else - if (!lpDDSPrimary->lpVtbl->GetDC(lpDDSPrimary, &hdc)) { - TextOut(hdc, 0, 400, String, strlen(String)); - lpDDSPrimary->lpVtbl->ReleaseDC(lpDDSPrimary, hdc); - } -#endif } } #endif diff --git a/Source/sound.cpp b/Source/sound.cpp index 3f8fb33fe..d54e6eb5b 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -45,19 +45,11 @@ void snd_update(BOOL bStopAll) if (!DSBs[i]) continue; -#ifdef __cplusplus if (!bStopAll && DSBs[i]->GetStatus(&dwStatus) == DS_OK && dwStatus == DSBSTATUS_PLAYING) continue; DSBs[i]->Stop(); DSBs[i]->Release(); -#else - if (!bStopAll && DSBs[i]->lpVtbl->GetStatus(DSBs[i], &dwStatus) == DS_OK && dwStatus == DSBSTATUS_PLAYING) - continue; - - DSBs[i]->lpVtbl->Stop(DSBs[i]); - DSBs[i]->lpVtbl->Release(DSBs[i]); -#endif DSBs[i] = NULL; } @@ -66,11 +58,7 @@ void snd_update(BOOL bStopAll) void snd_stop_snd(TSnd *pSnd) { if (pSnd && pSnd->DSB) -#ifdef __cplusplus pSnd->DSB->Stop(); -#else - pSnd->DSB->lpVtbl->Stop(pSnd->DSB); -#endif } BOOL snd_playing(TSnd *pSnd) @@ -83,11 +71,7 @@ BOOL snd_playing(TSnd *pSnd) if (pSnd->DSB == NULL) return FALSE; -#ifdef __cplusplus if (pSnd->DSB->GetStatus(&dwStatus) != DS_OK) -#else - if (pSnd->DSB->lpVtbl->GetStatus(pSnd->DSB, &dwStatus) != DS_OK) -#endif return FALSE; return dwStatus == DSBSTATUS_PLAYING; @@ -127,28 +111,17 @@ void snd_play_snd(TSnd *pSnd, int lVolume, int lPan) } else if (lVolume > VOLUME_MAX) { lVolume = VOLUME_MAX; } -#ifdef __cplusplus DSB->SetVolume(lVolume); DSB->SetPan(lPan); error_code = DSB->Play(0, 0, 0); -#else - DSB->lpVtbl->SetVolume(DSB, lVolume); - DSB->lpVtbl->SetPan(DSB, lPan); - - error_code = DSB->lpVtbl->Play(DSB, 0, 0, 0); -#endif if (error_code != DSERR_BUFFERLOST) { if (error_code != DS_OK) { DSErrMsg(error_code, 261, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); } } else if (sound_file_reload(pSnd, DSB)) { -#ifdef __cplusplus DSB->Play(0, 0, 0); -#else - DSB->lpVtbl->Play(DSB, 0, 0, 0); -#endif } pSnd->start_tc = tc; @@ -164,11 +137,7 @@ LPDIRECTSOUNDBUFFER sound_dup_channel(LPDIRECTSOUNDBUFFER DSB) for (i = 0; i < 8; i++) { if (!DSBs[i]) { -#ifdef __cplusplus if (sglpDS->DuplicateSoundBuffer(DSB, &DSBs[i]) != DS_OK) { -#else - if (sglpDS->lpVtbl->DuplicateSoundBuffer(sglpDS, DSB, &DSBs[i]) != DS_OK) { -#endif return NULL; } @@ -186,11 +155,7 @@ BOOL sound_file_reload(TSnd *sound_file, LPDIRECTSOUNDBUFFER DSB) DWORD size1, size2; BOOL rv; -#ifdef __cplusplus if (DSB->Restore() != DS_OK) -#else - if (DSB->lpVtbl->Restore(DSB) != DS_OK) -#endif return FALSE; rv = FALSE; @@ -198,19 +163,11 @@ BOOL sound_file_reload(TSnd *sound_file, LPDIRECTSOUNDBUFFER DSB) WOpenFile(sound_file->sound_path, &file, FALSE); WSetFilePointer(file, sound_file->chunk.dwOffset, NULL, 0); -#ifdef __cplusplus if (DSB->Lock(0, sound_file->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0) == DS_OK) { WReadFile(file, buf1, size1); if (DSB->Unlock(buf1, size1, buf2, size2) == DS_OK) rv = TRUE; } -#else - if (DSB->lpVtbl->Lock(DSB, 0, sound_file->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0) == DS_OK) { - WReadFile(file, buf1, size1); - if (DSB->lpVtbl->Unlock(DSB, buf1, size1, buf2, size2) == DS_OK) - rv = TRUE; - } -#endif WCloseFile(file); @@ -241,21 +198,13 @@ TSnd *sound_file_load(char *path) sound_CreateSoundBuffer(pSnd); -#ifdef __cplusplus error_code = pSnd->DSB->Lock(0, pSnd->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0); -#else - error_code = pSnd->DSB->lpVtbl->Lock(pSnd->DSB, 0, pSnd->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0); -#endif if (error_code != DS_OK) DSErrMsg(error_code, 318, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); memcpy(buf1, wave_file + pSnd->chunk.dwOffset, size1); -#ifdef __cplusplus error_code = pSnd->DSB->Unlock(buf1, size1, buf2, size2); -#else - error_code = pSnd->DSB->lpVtbl->Unlock(pSnd->DSB, buf1, size1, buf2, size2); -#endif if (error_code != DS_OK) DSErrMsg(error_code, 325, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); @@ -276,11 +225,7 @@ void sound_CreateSoundBuffer(TSnd *sound_file) DSB.dwSize = sizeof(DSBUFFERDESC); DSB.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_STATIC; -#ifdef __cplusplus error_code = sglpDS->CreateSoundBuffer(&DSB, &sound_file->DSB, NULL); -#else - error_code = sglpDS->lpVtbl->CreateSoundBuffer(sglpDS, &DSB, &sound_file->DSB, NULL); -#endif if (error_code != ERROR_SUCCESS) DSErrMsg(error_code, 282, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); } @@ -289,13 +234,8 @@ void sound_file_cleanup(TSnd *sound_file) { if (sound_file) { if (sound_file->DSB) { -#ifdef __cplusplus sound_file->DSB->Stop(); sound_file->DSB->Release(); -#else - sound_file->DSB->lpVtbl->Stop(sound_file->DSB); - sound_file->DSB->lpVtbl->Release(sound_file->DSB); -#endif sound_file->DSB = NULL; } @@ -316,11 +256,7 @@ void snd_init(HWND hWnd) if (error_code != DS_OK) sglpDS = NULL; -#ifdef __cplusplus if (sglpDS && sglpDS->SetCooperativeLevel(hWnd, DSSCL_EXCLUSIVE) == DS_OK) -#else - if (sglpDS && sglpDS->lpVtbl->SetCooperativeLevel(sglpDS, hWnd, DSSCL_EXCLUSIVE) == DS_OK) -#endif sound_create_primary_buffer(NULL); SVidInitialize(sglpDS); @@ -356,11 +292,7 @@ void sound_create_primary_buffer(HANDLE music_track) dsbuf.dwSize = sizeof(DSBUFFERDESC); dsbuf.dwFlags = DSBCAPS_PRIMARYBUFFER; -#ifdef __cplusplus error_code = sglpDS->CreateSoundBuffer(&dsbuf, &sglpDSB, NULL); -#else - error_code = sglpDS->lpVtbl->CreateSoundBuffer(sglpDS, &dsbuf, &sglpDSB, NULL); -#endif if (error_code != DS_OK) DSErrMsg(error_code, 375, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); } @@ -369,11 +301,7 @@ void sound_create_primary_buffer(HANDLE music_track) DSCAPS dsbcaps; dsbcaps.dwSize = sizeof(DSCAPS); -#ifdef __cplusplus error_code = sglpDS->GetCaps(&dsbcaps); -#else - error_code = sglpDS->lpVtbl->GetCaps(sglpDS, &dsbcaps); -#endif if (error_code != DS_OK) DSErrMsg(error_code, 383, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); @@ -389,11 +317,7 @@ void sound_create_primary_buffer(HANDLE music_track) format.nBlockAlign = format.nChannels * format.wBitsPerSample / 8; format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign; -#ifdef __cplusplus sglpDSB->SetFormat(&format); -#else - sglpDSB->lpVtbl->SetFormat(sglpDSB, &format); -#endif } } @@ -423,11 +347,7 @@ void sound_cleanup() SFileDdaDestroy(); if (sglpDS) { -#ifdef __cplusplus sglpDS->Release(); -#else - sglpDS->lpVtbl->Release(sglpDS); -#endif sglpDS = NULL; } From c39f668deb349e4927a300f5e0b047d8583332b0 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:27:41 +0200 Subject: [PATCH 02/20] Enable some asserts that are helpful for testing --- Source/appfat.cpp | 4 ++-- Source/control.cpp | 10 +++++----- Source/dead.cpp | 2 +- Source/diablo.cpp | 6 +++--- Source/sound.cpp | 2 +- Source/tmsg.cpp | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Source/appfat.cpp b/Source/appfat.cpp index 69222e70c..8e84c71c7 100644 --- a/Source/appfat.cpp +++ b/Source/appfat.cpp @@ -394,7 +394,7 @@ void TraceErrorDD(HRESULT hError, char *pszBuffer, DWORD dwMaxChars) break; default: { const char szUnknown[] = "DDERR unknown 0x%x"; - /// ASSERT: assert(dwMaxChars >= sizeof(szUnknown) + 10); + assert(dwMaxChars >= sizeof(szUnknown) + 10); sprintf(pszBuffer, szUnknown, hError); return; } @@ -455,7 +455,7 @@ void TraceErrorDS(HRESULT hError, char *pszBuffer, DWORD dwMaxChars) break; default: { const char szUnknown[] = "DSERR unknown 0x%x"; - /// ASSERT: assert(dwMaxChars >= sizeof(szUnknown) + 10); + assert(dwMaxChars >= sizeof(szUnknown) + 10); sprintf(pszBuffer, szUnknown, hError); return; } diff --git a/Source/control.cpp b/Source/control.cpp index 176bf0da2..c9af0eb29 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -254,7 +254,7 @@ void DrawSpellCel(int xp, int yp, BYTE *Trans, int nCel, int w) { BYTE *dst, *tbl, *end; - /// ASSERT: assert(gpBuffer); + assert(gpBuffer); dst = &gpBuffer[xp + PitchTbl[yp]]; tbl = SplTransTbl; @@ -649,7 +649,7 @@ void ToggleSpell(int slot) */ void PrintChar(int nOffset, int nCel, char col) { - /// ASSERT: assert(gpBuffer); + assert(gpBuffer); #ifdef USE_ASM __asm { @@ -956,7 +956,7 @@ void DrawPanelBox(int x, int y, int w, int h, int sx, int sy) { int nSrcOff, nDstOff; - /// ASSERT: assert(gpBuffer); + assert(gpBuffer); nSrcOff = x + PANEL_WIDTH * y; nDstOff = sx + BUFFER_WIDTH * sy; @@ -1041,7 +1041,7 @@ void SetFlaskHeight(BYTE *pCelBuff, int min, int max, int sx, int sy) { int nSrcOff, nDstOff, w; - /// ASSERT: assert(gpBuffer); + assert(gpBuffer); nSrcOff = 88 * min; nDstOff = sx + BUFFER_WIDTH * sy; @@ -2234,7 +2234,7 @@ void RedBack() idx = light4flag ? 1536 : 4608; - /// ASSERT: assert(gpBuffer); + assert(gpBuffer); #ifdef USE_ASM if (leveltype != DTYPE_HELL) { diff --git a/Source/dead.cpp b/Source/dead.cpp index ba72cd0a7..d458f9a64 100644 --- a/Source/dead.cpp +++ b/Source/dead.cpp @@ -69,7 +69,7 @@ void InitDead() } } - /// ASSERT: assert(nd <= MAXDEAD); + assert(nd <= MAXDEAD); } void AddDead(int dx, int dy, char dv, int ddir) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index df156c0a7..8f5ffb019 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -141,7 +141,7 @@ void run_game_loop(unsigned int uMsg) nthread_ignore_mutex(TRUE); start_game(uMsg); - /// ASSERT: assert(ghMainWnd); + assert(ghMainWnd); saveProc = SetWindowProc(GM_Game); control_update_life_mana(); run_delta_info(); @@ -197,7 +197,7 @@ void run_game_loop(unsigned int uMsg) force_redraw = 255; scrollrt_draw_game_screen(TRUE); saveProc = SetWindowProc(saveProc); - /// ASSERT: assert(saveProc == GM_Game); + assert(saveProc == GM_Game); free_game(); if (cineflag) { @@ -213,7 +213,7 @@ void start_game(unsigned int uMsg) InitCursor(); InitLightTable(); LoadDebugGFX(); - /// ASSERT: assert(ghMainWnd); + assert(ghMainWnd); music_stop(); ShowProgress(uMsg); gmenu_init_menu(); diff --git a/Source/sound.cpp b/Source/sound.cpp index d54e6eb5b..afdf309d7 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -377,7 +377,7 @@ void music_start(int nTrack) { BOOL success; - /// ASSERT: assert((DWORD) nTrack < NUM_MUSIC); + assert((DWORD) nTrack < NUM_MUSIC); music_stop(); if (sglpDS && gbMusicOn) { #ifdef _DEBUG diff --git a/Source/tmsg.cpp b/Source/tmsg.cpp index 27783f1e0..e8caf15f9 100644 --- a/Source/tmsg.cpp +++ b/Source/tmsg.cpp @@ -38,7 +38,7 @@ void tmsg_add(BYTE *pbMsg, BYTE bLen) void tmsg_start() { - /// ASSERT: assert(! sgpTimedMsgHead); + assert(! sgpTimedMsgHead); } void *tmsg_cleanup() From 0f514f25de7468b62197360f34aca51eab75f503 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:31:27 +0200 Subject: [PATCH 03/20] Apply WinAPI enums and macros --- Source/appfat.cpp | 32 +++++++++++++++----------------- Source/sound.cpp | 2 +- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Source/appfat.cpp b/Source/appfat.cpp index 8e84c71c7..fac368284 100644 --- a/Source/appfat.cpp +++ b/Source/appfat.cpp @@ -41,33 +41,31 @@ void TriggerBreak() LONG __stdcall BreakFilter(PEXCEPTION_POINTERS pExc) { if (pExc->ExceptionRecord == NULL) { - return 0; + return EXCEPTION_CONTINUE_SEARCH; } if (pExc->ExceptionRecord->ExceptionCode != EXCEPTION_BREAKPOINT) { - return 0; + return EXCEPTION_CONTINUE_SEARCH; } if (((BYTE *)pExc->ContextRecord->Eip)[0] == 0xCC) { // int 3 pExc->ContextRecord->Eip++; } - return -1; + return EXCEPTION_CONTINUE_EXECUTION; } #endif char *GetErrorStr(DWORD error_code) { - DWORD upper_code; int size; char *chr; - upper_code = (error_code >> 16) & 0x1FFF; - if (upper_code == 0x0878) { - TraceErrorDS(error_code, sz_error_buf, 256); - } else if (upper_code == 0x0876) { - TraceErrorDD(error_code, sz_error_buf, 256); - } else if (!SErrGetErrorStr(error_code, sz_error_buf, 256) - && !FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, 0x400, sz_error_buf, 0x100, NULL)) { + if (HRESULT_FACILITY(error_code) == _FACDS) { + TraceErrorDS(error_code, sz_error_buf, sizeof(sz_error_buf) / sizeof(sz_error_buf[0])); + } else if (HRESULT_FACILITY(error_code) == _FACDD) { + TraceErrorDD(error_code, sz_error_buf, sizeof(sz_error_buf) / sizeof(sz_error_buf[0])); + } else if (!SErrGetErrorStr(error_code, sz_error_buf, sizeof(sz_error_buf) / sizeof(sz_error_buf[0])) + && !FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), sz_error_buf, sizeof(sz_error_buf) / sizeof(sz_error_buf[0]), NULL)) { wsprintf(sz_error_buf, "unknown error 0x%08x", error_code); } @@ -559,7 +557,7 @@ void center_window(HWND hDlg) { LONG w, h; int screenW, screenH; - struct tagRECT Rect; + tagRECT Rect; HDC hdc; GetWindowRect(hDlg, &Rect); @@ -600,10 +598,10 @@ BOOL __stdcall FuncDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM text) TextDlg(hDlg, (char *)text); break; case WM_COMMAND: - if (wParam == 1) { - EndDialog(hDlg, 1); - } else if (wParam == 2) { - EndDialog(hDlg, 0); + if (wParam == IDOK) { + EndDialog(hDlg, TRUE); + } else if (wParam == IDCANCEL) { + EndDialog(hDlg, FALSE); } break; default: @@ -669,7 +667,7 @@ BOOL InsertCDDlg() ShowCursor(FALSE); - return nResult == 1; + return nResult == IDOK; } void DirErrorDlg(char *error) diff --git a/Source/sound.cpp b/Source/sound.cpp index afdf309d7..524e266d6 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -161,7 +161,7 @@ BOOL sound_file_reload(TSnd *sound_file, LPDIRECTSOUNDBUFFER DSB) rv = FALSE; WOpenFile(sound_file->sound_path, &file, FALSE); - WSetFilePointer(file, sound_file->chunk.dwOffset, NULL, 0); + WSetFilePointer(file, sound_file->chunk.dwOffset, NULL, FILE_BEGIN); if (DSB->Lock(0, sound_file->chunk.dwSize, &buf1, &size1, &buf2, &size2, 0) == DS_OK) { WReadFile(file, buf1, size1); From c540f7470985d6d75c27b6f6c26fbad70d848f89 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:34:02 +0200 Subject: [PATCH 04/20] Clean up calls to WriteFile --- Source/capture.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/capture.cpp b/Source/capture.cpp index ba660f7a1..d710ea0cc 100644 --- a/Source/capture.cpp +++ b/Source/capture.cpp @@ -45,7 +45,7 @@ static BOOL CapturePal(HANDLE hFile, PALETTEENTRY *palette) pcx_palette[1 + 3 * i + 2] = palette[i].peBlue; } - return WriteFile(hFile, pcx_palette, 769, &NumberOfBytesWritten, 0) && NumberOfBytesWritten == 769; + return WriteFile(hFile, pcx_palette, sizeof(pcx_palette), &NumberOfBytesWritten, NULL) && NumberOfBytesWritten == sizeof(pcx_palette); } static BYTE *CaptureEnc(BYTE *src, BYTE *dst, int width) @@ -93,7 +93,7 @@ static BOOL CapturePix(HANDLE hFile, WORD width, WORD height, WORD stride, BYTE pBufferEnd = CaptureEnc(pixels, pBuffer, width); pixels += stride; writeSize = pBufferEnd - pBuffer; - if (!(WriteFile(hFile, pBuffer, writeSize, &lpNumBytes, 0) && lpNumBytes == writeSize)) { + if (!(WriteFile(hFile, pBuffer, writeSize, &lpNumBytes, NULL) && lpNumBytes == writeSize)) { return FALSE; } } From 0a1b4d347c9e05a14fc9cbd196402cf2ff7a17f9 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:38:03 +0200 Subject: [PATCH 05/20] Create defines for spell icons This will avoids a lot of Hellfire ifdef and generally makes the caluclations cleaner --- Source/control.cpp | 78 ++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index c9af0eb29..d5c9f37d5 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -242,6 +242,10 @@ int SpellPages[6][7] = { { -1, -1, -1, -1, -1, -1, -1 } }; +#define SPLICONLENGTH 56 +#define SPLROWICONLS 10 +#define SPLICONLAST 43 + /** * Draw spell cell onto the back buffer. * @param xp Back buffer coordinate @@ -456,9 +460,9 @@ void DrawSpell() st = RSPLTYPE_INVALID; SetSpellTrans(st); if (spl != SPL_INVALID) - DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, SpellITbl[spl], 56); + DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, SpellITbl[spl], SPLICONLENGTH); else - DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, 27, 56); + DrawSpellCel(PANEL_X + 565, PANEL_Y + 119, pSpellCels, 27, SPLICONLENGTH); } void DrawSpellList() @@ -468,28 +472,28 @@ void DrawSpellList() pSpell = SPL_INVALID; infostr[0] = '\0'; - x = PANEL_X + 12 + 56 * 10; + x = PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS; y = PANEL_Y - 17; ClearPanel(); for (i = 0; i < 4; i++) { switch ((spell_type)i) { case RSPLTYPE_SKILL: SetSpellTrans(RSPLTYPE_SKILL); - c = 46; + c = SPLICONLAST + 3; mask = plr[myplr]._pAblSpells; break; case RSPLTYPE_SPELL: - c = 47; + c = SPLICONLAST + 4; mask = plr[myplr]._pMemSpells; break; case RSPLTYPE_SCROLL: SetSpellTrans(RSPLTYPE_SCROLL); - c = 44; + c = SPLICONLAST + 1; mask = plr[myplr]._pScrlSpells; break; case RSPLTYPE_CHARGES: SetSpellTrans(RSPLTYPE_CHARGES); - c = 45; + c = SPLICONLAST + 2; mask = plr[myplr]._pISpells; break; } @@ -508,13 +512,13 @@ void DrawSpellList() } if (currlevel == 0 && !spelldata[j].sTownSpell) SetSpellTrans(RSPLTYPE_INVALID); - DrawSpellCel(x, y, pSpellCels, SpellITbl[j], 56); + DrawSpellCel(x, y, pSpellCels, SpellITbl[j], SPLICONLENGTH); lx = x - BORDER_LEFT; - ly = y - BORDER_TOP - 56; - if (MouseX >= lx && MouseX < lx + 56 && MouseY >= ly && MouseY < ly + 56) { + ly = y - BORDER_TOP - SPLICONLENGTH; + if (MouseX >= lx && MouseX < lx + SPLICONLENGTH && MouseY >= ly && MouseY < ly + SPLICONLENGTH) { pSpell = j; pSplType = i; - DrawSpellCel(x, y, pSpellCels, c, 56); + DrawSpellCel(x, y, pSpellCels, c, SPLICONLENGTH); switch (i) { case RSPLTYPE_SKILL: sprintf(infostr, "%s Skill", spelldata[pSpell].sSkillText); @@ -565,23 +569,23 @@ void DrawSpellList() } for (t = 0; t < 4; t++) { if (plr[myplr]._pSplHotKey[t] == pSpell && plr[myplr]._pSplTHotKey[t] == pSplType) { - DrawSpellCel(x, y, pSpellCels, t + 48, 56); + DrawSpellCel(x, y, pSpellCels, t + SPLICONLAST + 5, SPLICONLENGTH); sprintf(tempstr, "Spell Hot Key #F%i", t + 5); AddPanelString(tempstr, TRUE); } } } - x -= 56; - if (x == PANEL_X + 12 - 56) { - y -= 56; - x = PANEL_X + 12 + 56 * 10; + x -= SPLICONLENGTH; + if (x == PANEL_X + 12 - SPLICONLENGTH) { + x = PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS; + y -= SPLICONLENGTH; } } - if (mask != 0 && x != PANEL_X + 12 + 56 * 10) - x -= 56; - if (x == PANEL_X + 12 - 56) { - y -= 56; - x = PANEL_X + 12 + 56 * 10; + if (mask != 0 && x != PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS) + x -= SPLICONLENGTH; + if (x == PANEL_X + 12 - SPLICONLENGTH) { + x = PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS; + y -= SPLICONLENGTH; } } } @@ -1353,10 +1357,10 @@ void DoSpeedBook() int xo, yo, X, Y, i, j; spselflag = TRUE; - xo = PANEL_X + 12 + 56 * 10; + xo = PANEL_X + 12 + SPLICONLENGTH * 10; yo = PANEL_Y - 17; - X = PANEL_LEFT + 12 + 56 * 10 + 56 / 2; - Y = PANEL_TOP - 17 - 56 / 2; + X = xo - (BORDER_LEFT - SPLICONLENGTH / 2); + Y = yo - (BORDER_TOP + SPLICONLENGTH / 2); if (plr[myplr]._pRSpell != SPL_INVALID) { for (i = 0; i < 4; i++) { switch (i) { @@ -1377,22 +1381,22 @@ void DoSpeedBook() for (j = 1; j < MAX_SPELLS; j++) { if (spell & spells) { if (j == plr[myplr]._pRSpell && i == plr[myplr]._pRSplType) { - X = xo - (BORDER_LEFT - 56 / 2); - Y = yo - (BORDER_TOP + 56 / 2); + X = xo - (BORDER_LEFT - SPLICONLENGTH / 2); + Y = yo - (BORDER_TOP + SPLICONLENGTH / 2); } - xo -= 56; - if (xo == PANEL_X + 12 - 56) { - xo = PANEL_X + 12 + 56 * 10; - yo -= 56; + xo -= SPLICONLENGTH; + if (xo == PANEL_X + 12 - SPLICONLENGTH) { + xo = PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS; + yo -= SPLICONLENGTH; } } spell <<= (__int64)1; } - if (spells && xo != PANEL_X + 12 + 56 * 10) - xo -= 56; - if (xo == PANEL_X + 12 - 56) { - xo = PANEL_X + 12 + 56 * 10; - yo -= 56; + if (spells && xo != PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS) + xo -= SPLICONLENGTH; + if (xo == PANEL_X + 12 - SPLICONLENGTH) { + xo = PANEL_X + 12 + SPLICONLENGTH * SPLROWICONLS; + yo -= SPLICONLENGTH; } } } @@ -1688,7 +1692,7 @@ void DrawInfoBox() } else if (pcurs >= CURSOR_FIRSTITEM) { if (plr[myplr].HoldItem._itype == ITYPE_GOLD) { nGold = plr[myplr].HoldItem._ivalue; - sprintf(infostr, "%i gold %s", nGold, get_pieces_str(plr[myplr].HoldItem._ivalue)); + sprintf(infostr, "%i gold %s", nGold, get_pieces_str(nGold)); } else if (!plr[myplr].HoldItem._iStatFlag) { ClearPanel(); AddPanelString("Requirements not met", TRUE); @@ -2350,7 +2354,7 @@ void DrawSpellBook() DrawSpellCel(RIGHT_PANEL + 75, yp, pSBkIconCels, SpellITbl[sn], 37); if (sn == plr[myplr]._pRSpell && st == plr[myplr]._pRSplType) { SetSpellTrans(RSPLTYPE_SKILL); - DrawSpellCel(RIGHT_PANEL + 75, yp, pSBkIconCels, 43, 37); + DrawSpellCel(RIGHT_PANEL + 75, yp, pSBkIconCels, SPLICONLAST, 37); } PrintSBookStr(10, yp - 23, FALSE, spelldata[sn].sNameText, COL_WHITE); switch (GetSBookTrans(sn, FALSE)) { From cab3ebddf5a9d4a5981eb0353377458adea2c4a0 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:39:48 +0200 Subject: [PATCH 06/20] Avoid some arrays being of predefined size This makes it easier to change the array size via content --- Source/control.cpp | 4 +- Source/spelldat.cpp | 2 +- Source/spelldat.h | 2 +- Source/trigs.cpp | 92 +++++++-------------------------------------- 4 files changed, 18 insertions(+), 82 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index d5c9f37d5..433c20014 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -35,7 +35,7 @@ BOOL talkbtndown[3]; int pSpell; BYTE *pManaBuff; char infoclr; -int sgbPlrTalkTbl; // should be char [4] +int sgbPlrTalkTbl; BYTE *pGBoxBuff; BYTE *pSBkBtnCel; char tempstr[256]; @@ -152,7 +152,7 @@ const BYTE gbFontTransTbl[256] = { 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'X', '0', 'U', 'U', 'U', 'U', 'Y', 'b', 'B', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', - 'o', 'n', 'o', 'o', 'o', 'o', 'o', '/', '0', 'u', 'u', 'u', 'u', 'y', 'b', 'y' + 'o', 'n', 'o', 'o', 'o', 'o', 'o', '/', '0', 'u', 'u', 'u', 'u', 'y', 'b', 'y', // clang-format on }; diff --git a/Source/spelldat.cpp b/Source/spelldat.cpp index ce198eaf6..c7bcd4415 100644 --- a/Source/spelldat.cpp +++ b/Source/spelldat.cpp @@ -1,7 +1,7 @@ #include "all.h" /** Data related to each spell ID. */ -SpellData spelldata[MAX_SPELLS] = { +SpellData spelldata[] = { // clang-format off // sName, sManaCost, sType, sNameText, sSkillText, sBookLvl, sStaffLvl, sTargeted, sTownSpell, sMinInt, sSFX, sMissiles[3], sManaAdj, sMinMana, sStaffMin, sStaffMax, sBookCost, sStaffCost { SPL_NULL, 0, 0, NULL, NULL, 0, 0, FALSE, FALSE, 0, 0, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, diff --git a/Source/spelldat.h b/Source/spelldat.h index adb185c72..2c894f3b9 100644 --- a/Source/spelldat.h +++ b/Source/spelldat.h @@ -2,6 +2,6 @@ #ifndef __SPELLDAT_H__ #define __SPELLDAT_H__ -extern SpellData spelldata[MAX_SPELLS]; +extern SpellData spelldata[]; #endif /* __SPELLDAT_H__ */ diff --git a/Source/trigs.cpp b/Source/trigs.cpp index c005a371d..240154b42 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -6,84 +6,20 @@ int numtrigs; TriggerStruct trigs[MAXTRIGGERS]; int TWarpFrom; -int TownDownList[11] = { 716, 715, 719, 720, 721, 723, 724, 725, 726, 727, -1 }; -int TownWarp1List[13] = { - 1171, - 1172, - 1173, - 1174, - 1175, - 1176, - 1177, - 1178, - 1179, - 1181, - 1183, - 1185, - -1 -}; -int L1UpList[12] = { 127, 129, 130, 131, 132, 133, 135, 137, 138, 139, 140, -1 }; -int L1DownList[10] = { 106, 107, 108, 109, 110, 112, 114, 115, 118, -1 }; -int L2UpList[3] = { 266, 267, -1 }; -int L2DownList[5] = { 269, 270, 271, 272, -1 }; -int L2TWarpUpList[3] = { 558, 559, -1 }; -int L3UpList[15] = { - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - -1 -}; -int L3DownList[9] = { 162, 163, 164, 165, 166, 167, 168, 169, -1 }; -int L3TWarpUpList[14] = { 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, -1 }; -int L4UpList[4] = { 82, 83, 90, -1 }; -int L4DownList[6] = { 120, 130, 131, 132, 133, -1 }; -int L4TWarpUpList[4] = { 421, 422, 429, -1 }; -int L4PentaList[33] = { - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - -1 -}; +int TownDownList[] = { 716, 715, 719, 720, 721, 723, 724, 725, 726, 727, -1 }; +int TownWarp1List[] = { 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1183, 1185, -1 }; +int L1UpList[] = { 127, 129, 130, 131, 132, 133, 135, 137, 138, 139, 140, -1 }; +int L1DownList[] = { 106, 107, 108, 109, 110, 112, 114, 115, 118, -1 }; +int L2UpList[] = { 266, 267, -1 }; +int L2DownList[] = { 269, 270, 271, 272, -1 }; +int L2TWarpUpList[] = { 558, 559, -1 }; +int L3UpList[] = { 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, -1 }; +int L3DownList[] = { 162, 163, 164, 165, 166, 167, 168, 169, -1 }; +int L3TWarpUpList[] = { 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, -1 }; +int L4UpList[] = { 82, 83, 90, -1 }; +int L4DownList[] = { 120, 130, 131, 132, 133, -1 }; +int L4TWarpUpList[] = { 421, 422, 429, -1 }; +int L4PentaList[] = { 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, -1 }; #ifndef SPAWN void InitNoTriggers() From 10febf7e158b9188f26634d5c06a97d9de193d54 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:41:09 +0200 Subject: [PATCH 07/20] Decompose a few numbers --- Source/capture.cpp | 2 +- Source/sound.cpp | 2 +- Source/trigs.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/capture.cpp b/Source/capture.cpp index d710ea0cc..44c4f4b00 100644 --- a/Source/capture.cpp +++ b/Source/capture.cpp @@ -35,7 +35,7 @@ static BOOL CaptureHdr(HANDLE hFile, short width, short height) static BOOL CapturePal(HANDLE hFile, PALETTEENTRY *palette) { DWORD NumberOfBytesWritten; - BYTE pcx_palette[769]; + BYTE pcx_palette[1 + 256 * 3]; int i; pcx_palette[0] = 12; diff --git a/Source/sound.cpp b/Source/sound.cpp index 524e266d6..8bff3a50c 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -190,7 +190,7 @@ TSnd *sound_file_load(char *path) pSnd = (TSnd *)DiabloAllocPtr(sizeof(TSnd)); memset(pSnd, 0, sizeof(TSnd)); pSnd->sound_path = path; - pSnd->start_tc = GetTickCount() - 81; + pSnd->start_tc = GetTickCount() - 80 - 1; wave_file = LoadWaveFile(file, &pSnd->fmt, &pSnd->chunk); if (!wave_file) diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 240154b42..846915201 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -59,7 +59,7 @@ void InitTownTriggers() numtrigs = 4; } else { #endif - for (i = 0; i < 3; i++) { + for (i = 0; i < MAX_PLRS - 1; i++) { townwarps[i] = FALSE; } #ifndef SPAWN From 711665ee9600d12893ed0d6000c1a91605f1faff Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:42:58 +0200 Subject: [PATCH 08/20] Assign correct data types --- Source/control.cpp | 28 ++++++++++++++-------------- Source/diablo.cpp | 2 +- Source/track.cpp | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 433c20014..ec6132683 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -201,14 +201,14 @@ char SpellITbl[MAX_SPELLS] = { /** Maps from panel_button_id to the position and dimensions of a panel button. */ int PanBtnPos[8][5] = { // clang-format off - { PANEL_LEFT + 9, PANEL_TOP + 9, 71, 19, 1 }, // char button - { PANEL_LEFT + 9, PANEL_TOP + 35, 71, 19, 0 }, // quests button - { PANEL_LEFT + 9, PANEL_TOP + 75, 71, 19, 1 }, // map button - { PANEL_LEFT + 9, PANEL_TOP + 101, 71, 19, 0 }, // menu button - { PANEL_LEFT + 560, PANEL_TOP + 9, 71, 19, 1 }, // inv button - { PANEL_LEFT + 560, PANEL_TOP + 35, 71, 19, 0 }, // spells button - { PANEL_LEFT + 87, PANEL_TOP + 91, 33, 32, 1 }, // chat button - { PANEL_LEFT + 527, PANEL_TOP + 91, 33, 32, 1 }, // friendly fire button + { PANEL_LEFT + 9, PANEL_TOP + 9, 71, 19, TRUE }, // char button + { PANEL_LEFT + 9, PANEL_TOP + 35, 71, 19, FALSE }, // quests button + { PANEL_LEFT + 9, PANEL_TOP + 75, 71, 19, TRUE }, // map button + { PANEL_LEFT + 9, PANEL_TOP + 101, 71, 19, FALSE }, // menu button + { PANEL_LEFT + 560, PANEL_TOP + 9, 71, 19, TRUE }, // inv button + { PANEL_LEFT + 560, PANEL_TOP + 35, 71, 19, FALSE }, // spells button + { PANEL_LEFT + 87, PANEL_TOP + 91, 33, 32, TRUE }, // chat button + { PANEL_LEFT + 527, PANEL_TOP + 91, 33, 32, TRUE }, // friendly fire button // clang-format on }; /** Maps from panel_button_id to hotkey name. */ @@ -1414,7 +1414,7 @@ void DoPanBtn() for (i = 0; i < numpanbtns; i++) { if (MouseX >= PanBtnPos[i][0] && MouseX <= PanBtnPos[i][0] + PanBtnPos[i][2]) { if (MouseY >= PanBtnPos[i][1] && MouseY <= PanBtnPos[i][1] + PanBtnPos[i][3]) { - panbtn[i] = 1; + panbtn[i] = TRUE; drawbtnflag = TRUE; panbtndown = TRUE; } @@ -1428,7 +1428,7 @@ void DoPanBtn() void control_set_button_down(int btn_id) { - panbtn[btn_id] = 1; + panbtn[btn_id] = TRUE; drawbtnflag = TRUE; panbtndown = TRUE; } @@ -1565,9 +1565,9 @@ void CheckPanelInfo() void CheckBtnUp() { int i; - char gamemenuOff; + BOOLEAN gamemenuOff; - gamemenuOff = 1; + gamemenuOff = TRUE; drawbtnflag = TRUE; panbtndown = FALSE; @@ -1576,7 +1576,7 @@ void CheckBtnUp() continue; } - panbtn[i] = 0; + panbtn[i] = FALSE; if (MouseX < PanBtnPos[i][0] || MouseX > PanBtnPos[i][0] + PanBtnPos[i][2] @@ -1603,7 +1603,7 @@ void CheckBtnUp() case PANBTN_MAINMENU: qtextflag = FALSE; gamemenu_handle_previous(); - gamemenuOff = 0; + gamemenuOff = FALSE; break; case PANBTN_INVENTORY: sbookflag = FALSE; diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 8f5ffb019..6558f8a86 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -218,7 +218,7 @@ void start_game(unsigned int uMsg) ShowProgress(uMsg); gmenu_init_menu(); InitLevelCursor(); - sgnTimeoutCurs = 0; + sgnTimeoutCurs = CURSOR_NONE; sgbMouseDown = 0; track_repeat_walk(FALSE); } diff --git a/Source/track.cpp b/Source/track.cpp index 11552f0df..c8cc8bbee 100644 --- a/Source/track.cpp +++ b/Source/track.cpp @@ -22,7 +22,7 @@ void track_process() sgdwLastWalk = tick; NetSendCmdLoc(TRUE, CMD_WALKXY, cursmx, cursmy); if (!sgbIsScrolling) - sgbIsScrolling = 1; + sgbIsScrolling = TRUE; } } } @@ -38,7 +38,7 @@ void track_repeat_walk(BOOL rep) sgdwLastWalk = GetTickCount() - 50; NetSendCmdLoc(TRUE, CMD_WALKXY, cursmx, cursmy); } else if (sgbIsScrolling) { - sgbIsScrolling = 0; + sgbIsScrolling = FALSE; } } From e8454376d31ea4498506e9c39aeb6729ef568b78 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:44:13 +0200 Subject: [PATCH 09/20] Semantically get the first item instead of the array --- Source/control.cpp | 2 +- Source/pack.cpp | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index ec6132683..4207c607e 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -261,7 +261,7 @@ void DrawSpellCel(int xp, int yp, BYTE *Trans, int nCel, int w) assert(gpBuffer); dst = &gpBuffer[xp + PitchTbl[yp]]; - tbl = SplTransTbl; + tbl = &SplTransTbl[0]; #ifdef USE_ASM __asm { diff --git a/Source/pack.cpp b/Source/pack.cpp index 931a1c0c6..f514d1314 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -67,8 +67,8 @@ void PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield) for (i = 0; i < MAX_SPELLS; i++) pPack->pSplLvl[i] = pPlayer->_pSplLvl[i]; - pki = pPack->InvBody; - pi = pPlayer->InvBody; + pki = &pPack->InvBody[0]; + pi = &pPlayer->InvBody[0]; for (i = 0; i < NUM_INVLOC; i++) { PackItem(pki, pi); @@ -76,8 +76,8 @@ void PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield) pi++; } - pki = pPack->InvList; - pi = pPlayer->InvList; + pki = &pPack->InvList[0]; + pi = &pPlayer->InvList[0]; for (i = 0; i < NUM_INV_GRID_ELEM; i++) { PackItem(pki, pi); @@ -89,8 +89,8 @@ void PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield) pPack->InvGrid[i] = pPlayer->InvGrid[i]; pPack->_pNumInv = pPlayer->_pNumInv; - pki = pPack->SpdList; - pi = pPlayer->SpdList; + pki = &pPack->SpdList[0]; + pi = &pPlayer->SpdList[0]; for (i = 0; i < MAXBELTITEMS; i++) { PackItem(pki, pi); @@ -208,8 +208,8 @@ void UnPackPlayer(PkPlayerStruct *pPack, int pnum, BOOL killok) for (i = 0; i < MAX_SPELLS; i++) pPlayer->_pSplLvl[i] = pPack->pSplLvl[i]; - pki = pPack->InvBody; - pi = pPlayer->InvBody; + pki = &pPack->InvBody[0]; + pi = &pPlayer->InvBody[0]; for (i = 0; i < NUM_INVLOC; i++) { UnPackItem(pki, pi); @@ -217,8 +217,8 @@ void UnPackPlayer(PkPlayerStruct *pPack, int pnum, BOOL killok) pi++; } - pki = pPack->InvList; - pi = pPlayer->InvList; + pki = &pPack->InvList[0]; + pi = &pPlayer->InvList[0]; for (i = 0; i < NUM_INV_GRID_ELEM; i++) { UnPackItem(pki, pi); @@ -232,8 +232,8 @@ void UnPackPlayer(PkPlayerStruct *pPack, int pnum, BOOL killok) pPlayer->_pNumInv = pPack->_pNumInv; VerifyGoldSeeds(pPlayer); - pki = pPack->SpdList; - pi = pPlayer->SpdList; + pki = &pPack->SpdList[0]; + pi = &pPlayer->SpdList[0]; for (i = 0; i < MAXBELTITEMS; i++) { UnPackItem(pki, pi); From 8f635b779c1767507432359547cfc4e6afab6b81 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:45:43 +0200 Subject: [PATCH 10/20] Correct style of checks --- Source/control.cpp | 18 +++++++++--------- Source/dead.cpp | 6 +++--- Source/debug.cpp | 9 +++++---- Source/sound.cpp | 4 ++-- Source/trigs.cpp | 2 +- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 4207c607e..60f6db97d 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -454,7 +454,7 @@ void DrawSpell() if (tlvl <= 0) st = RSPLTYPE_INVALID; } - if (!currlevel && st != RSPLTYPE_INVALID && !spelldata[spl].sTownSpell) + if (currlevel == 0 && st != RSPLTYPE_INVALID && !spelldata[spl].sTownSpell) st = RSPLTYPE_INVALID; if (plr[myplr]._pRSpell < 0) st = RSPLTYPE_INVALID; @@ -1167,7 +1167,7 @@ void UpdateLifeFlask() filled = 0; if (filled != 69) SetFlaskHeight(pLifeBuff, 16, 85 - filled, 96 + PANEL_X, PANEL_Y); - if (filled) + if (filled != 0) DrawPanelBox(96, 85 - filled, 88, filled, 96 + PANEL_X, PANEL_Y + 69 - filled); } @@ -1228,7 +1228,7 @@ void UpdateManaFlask() filled = 69; if (filled != 69) SetFlaskHeight(pManaBuff, 16, 85 - filled, 96 + PANEL_X + 368, PANEL_Y); - if (filled) + if (filled != 0) DrawPanelBox(96 + 368, 85 - filled, 88, filled, 96 + PANEL_X + 368, PANEL_Y + 69 - filled); DrawSpell(); @@ -1451,7 +1451,7 @@ void control_check_btn_press() void DoAutoMap() { - if (currlevel || gbMaxPlayers != 1) { + if (currlevel != 0 || gbMaxPlayers != 1) { if (!automapflag) StartAutomap(); else @@ -1483,7 +1483,7 @@ void CheckPanelInfo() else strcpy(infostr, "Player attack"); } - if (PanBtnHotKey[i]) { + if (PanBtnHotKey[i] != NULL) { sprintf(tempstr, "Hotkey : %s", PanBtnHotKey[i]); AddPanelString(tempstr, TRUE); } @@ -1512,7 +1512,7 @@ void CheckPanelInfo() c = plr[myplr]._pISplLvlAdd + plr[myplr]._pSplLvl[v]; if (c < 0) c = 0; - if (!c) + if (c == 0) sprintf(tempstr, "Spell Level 0 - Unusable"); else sprintf(tempstr, "Spell Level %i", c); @@ -1717,7 +1717,7 @@ void DrawInfoBox() infoclr = COL_WHITE; strcpy(infostr, monster[pcursmonst].mName); ClearPanel(); - if (monster[pcursmonst]._uniqtype) { + if (monster[pcursmonst]._uniqtype != 0) { infoclr = COL_GOLD; PrintUniqueHistory(); } else { @@ -1737,7 +1737,7 @@ void DrawInfoBox() AddPanelString(tempstr, TRUE); } } - if (infostr[0] || pnumlines) + if (infostr[0] != '\0' || pnumlines != 0) PrintInfo(); } @@ -1748,7 +1748,7 @@ void PrintInfo() if (!talkflag) { yo = 0; lo = 1; - if (infostr[0]) { + if (infostr[0] != '\0') { CPrintString(0, infostr, TRUE, pnumlines); yo = 1; lo = 0; diff --git a/Source/dead.cpp b/Source/dead.cpp index d458f9a64..3ce07496d 100644 --- a/Source/dead.cpp +++ b/Source/dead.cpp @@ -24,7 +24,7 @@ void InitDead() nd = 0; for (i = 0; i < nummtypes; i++) { - if (!mtypes[Monsters[i].mtype]) { + if (mtypes[Monsters[i].mtype] == 0) { for (d = 0; d < 8; d++) dead[nd]._deadData[d] = Monsters[i].Anims[MA_DEATH].Data[d]; dead[nd]._deadFrame = Monsters[i].Anims[MA_DEATH].Frames; @@ -57,7 +57,7 @@ void InitDead() for (i = 0; i < nummonsters; i++) { mi = monstactive[i]; - if (monster[mi]._uniqtype) { + if (monster[mi]._uniqtype != 0) { for (d = 0; d < 8; d++) dead[nd]._deadData[d] = monster[mi].MType->Anims[MA_DEATH].Data[d]; dead[nd]._deadFrame = monster[mi].MType->Anims[MA_DEATH].Frames; @@ -85,7 +85,7 @@ void SetDead() for (i = 0; i < nummonsters; i++) { mi = monstactive[i]; - if (monster[mi]._uniqtype) { + if (monster[mi]._uniqtype != 0) { for (dx = 0; dx < MAXDUNX; dx++) { for (dy = 0; dy < MAXDUNY; dy++) { if ((dDead[dx][dy] & 0x1F) == monster[mi]._udeadval) diff --git a/Source/debug.cpp b/Source/debug.cpp index 24d004d06..207589d08 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -86,9 +86,9 @@ void CheckDungeonClear() for (j = 0; j < MAXDUNY; j++) { for (i = 0; i < MAXDUNX; i++) { - if (dMonster[i][j]) + if (dMonster[i][j] != 0) app_fatal("Monsters not cleared"); - if (dPlayer[i][j]) + if (dPlayer[i][j] != 0) app_fatal("Players not cleared"); dMonsDbg[currlevel][i][j] = dFlags[i][j] & BFLAG_VISIBLE; @@ -264,7 +264,7 @@ void GetDebugMonster() mi1 = pcursmonst; if (mi1 == -1) { mi2 = dMonster[cursmx][cursmy]; - if (mi2) { + if (mi2 != 0) { mi1 = mi2 - 1; if (mi2 <= 0) mi1 = -1 - mi2; @@ -279,7 +279,8 @@ void NextDebugMonster() { char dstr[128]; - if (dbgmon++ == MAXMONSTERS) + dbgmon++; + if (dbgmon == MAXMONSTERS) dbgmon = 0; sprintf(dstr, "Current debug monster = %i", dbgmon); diff --git a/Source/sound.cpp b/Source/sound.cpp index 8bff3a50c..f0fb78853 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -88,7 +88,7 @@ void snd_play_snd(TSnd *pSnd, int lVolume, int lPan) } DSB = pSnd->DSB; - if (!DSB) { + if (DSB == NULL) { return; } @@ -287,7 +287,7 @@ void sound_create_primary_buffer(HANDLE music_track) DSBUFFERDESC dsbuf; WAVEFORMATEX format; - if (!music_track) { + if (music_track == NULL) { memset(&dsbuf, 0, sizeof(DSBUFFERDESC)); dsbuf.dwSize = sizeof(DSBUFFERDESC); dsbuf.dwFlags = DSBCAPS_PRIMARYBUFFER; diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 846915201..d3b4a7c50 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -647,7 +647,7 @@ void CheckTriggers() BOOL abort; char abortflag; - if (plr[myplr]._pmode) + if (plr[myplr]._pmode != PM_STAND) return; for (i = 0; i < numtrigs; i++) { From a02167a6484f330d10134d6116de059d1ba2217b Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:47:06 +0200 Subject: [PATCH 11/20] Use correct defines for variables This also defines MAXRESIST and DEBUGSEEDS --- Source/control.cpp | 10 +++++----- Source/debug.cpp | 9 +++++---- Source/missiles.cpp | 2 +- defs.h | 1 + 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 60f6db97d..5a196e927 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -1819,7 +1819,7 @@ void DrawChr() ADD_PlrStringXY(168, 32, 299, "Warrior", COL_WHITE); #ifndef SPAWN } else if (plr[myplr]._pClass == PC_ROGUE) { - ADD_PlrStringXY(168, 32, 299, "Rogue", COL_WHITE); /* should use ClassStrTbl ? */ + ADD_PlrStringXY(168, 32, 299, "Rogue", COL_WHITE); } else if (plr[myplr]._pClass == PC_SORCERER) { ADD_PlrStringXY(168, 32, 299, "Sorceror", COL_WHITE); #endif @@ -1893,7 +1893,7 @@ void DrawChr() MY_PlrStringXY(258, 239, 301, chrstr, col, 0); col = plr[myplr]._pMagResist == 0 ? COL_WHITE : COL_BLUE; - if (plr[myplr]._pMagResist < 75) { + if (plr[myplr]._pMagResist < MAXRESIST) { sprintf(chrstr, "%i%%", plr[myplr]._pMagResist); } else { col = COL_GOLD; @@ -1902,7 +1902,7 @@ void DrawChr() ADD_PlrStringXY(257, 276, 300, chrstr, col); col = plr[myplr]._pFireResist == 0 ? COL_WHITE : COL_BLUE; - if (plr[myplr]._pFireResist < 75) { + if (plr[myplr]._pFireResist < MAXRESIST) { sprintf(chrstr, "%i%%", plr[myplr]._pFireResist); } else { col = COL_GOLD; @@ -1911,7 +1911,7 @@ void DrawChr() ADD_PlrStringXY(257, 304, 300, chrstr, col); col = plr[myplr]._pLghtResist == 0 ? COL_WHITE : COL_BLUE; - if (plr[myplr]._pLghtResist < 75) { + if (plr[myplr]._pLghtResist < MAXRESIST) { sprintf(chrstr, "%i%%", plr[myplr]._pLghtResist); } else { col = COL_GOLD; @@ -2186,7 +2186,7 @@ void DrawDurIcon() int x1, x2, x3, x4; if (!chrflag && !questlog || !invflag && !sbookflag) { - x1 = 592 + PANEL_X; + x1 = 272 + RIGHT_PANEL_X; if (invflag || sbookflag) x1 = 272 + PANEL_X; p = &plr[myplr]; diff --git a/Source/debug.cpp b/Source/debug.cpp index 207589d08..243a763f1 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -9,9 +9,10 @@ BOOL update_seed_check = FALSE; #endif +#define DEBUGSEEDS 4096 int seed_index; -int level_seeds[NUMLEVELS]; -int seed_table[4096]; +int level_seeds[NUMLEVELS + 1]; +int seed_table[DEBUGSEEDS]; BYTE *pSquareCel; char dMonsDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; @@ -33,7 +34,7 @@ void init_seed_desync() { int i; - for (i = 0; i < 4096; i++) { + for (i = 0; i < DEBUGSEEDS; i++) { seed_table[i] = -1; } @@ -66,7 +67,7 @@ void seed_desync_index_set() void seed_desync_check(int seed) { - if (!update_seed_check || seed_index == 4096 || currlevel == 0) { + if (!update_seed_check || seed_index == DEBUGSEEDS || currlevel == 0) { return; } diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 410ca94c6..649ae6b9e 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2359,7 +2359,7 @@ void AddResurrectBeam(int mi, int sx, int sy, int dx, int dy, int midir, char mi missile[mi]._misy = missile[mi]._miy; missile[mi]._mixvel = 0; missile[mi]._miyvel = 0; - missile[mi]._mirange = misfiledata[36].mAnimLen[0]; + missile[mi]._mirange = misfiledata[MFILE_RESSUR1].mAnimLen[0]; } void AddTelekinesis(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) diff --git a/defs.h b/defs.h index 505eb4bf8..9385c921b 100644 --- a/defs.h +++ b/defs.h @@ -63,6 +63,7 @@ // from diablo 2 beta #define MAXEXP 2000000000 +#define MAXRESIST 75 #define GOLD_SMALL_LIMIT 1000 #define GOLD_MEDIUM_LIMIT 2500 From f217b14e3e40252894c36c43e9e9b284de722518 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:47:33 +0200 Subject: [PATCH 12/20] Order variables logically --- Source/dead.cpp | 8 ++------ Source/sound.cpp | 5 ++--- Source/trigs.cpp | 4 ++-- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/Source/dead.cpp b/Source/dead.cpp index 3ce07496d..f01e326dd 100644 --- a/Source/dead.cpp +++ b/Source/dead.cpp @@ -12,11 +12,8 @@ int stonendx; void InitDead() { + int i, d, nd, mi; int mtypes[MAXMONSTERS]; - int i; - int nd; - int mi; - int d; for (i = 0; i < MAXMONSTERS; i++) mtypes[i] = 0; @@ -79,8 +76,7 @@ void AddDead(int dx, int dy, char dv, int ddir) void SetDead() { - int mi; - int i; + int i, mi; int dx, dy; for (i = 0; i < nummonsters; i++) { diff --git a/Source/sound.cpp b/Source/sound.cpp index f0fb78853..00842bc9f 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -220,11 +220,10 @@ void sound_CreateSoundBuffer(TSnd *sound_file) HRESULT error_code; memset(&DSB, 0, sizeof(DSBUFFERDESC)); - DSB.dwBufferBytes = sound_file->chunk.dwSize; - DSB.lpwfxFormat = &sound_file->fmt; DSB.dwSize = sizeof(DSBUFFERDESC); DSB.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN | DSBCAPS_STATIC; - + DSB.dwBufferBytes = sound_file->chunk.dwSize; + DSB.lpwfxFormat = &sound_file->fmt; error_code = sglpDS->CreateSoundBuffer(&DSB, &sound_file->DSB, NULL); if (error_code != ERROR_SUCCESS) DSErrMsg(error_code, 282, "C:\\Src\\Diablo\\Source\\SOUND.CPP"); diff --git a/Source/trigs.cpp b/Source/trigs.cpp index d3b4a7c50..c8f30722b 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -95,7 +95,7 @@ void InitTownTriggers() void InitL1Triggers() { - int j, i; + int i, j; numtrigs = 0; for (j = 0; j < MAXDUNY; j++) { @@ -528,7 +528,7 @@ BOOL ForceL4Trig() void Freeupstairs() { - int i, tx, ty, yy, xx; + int i, tx, ty, xx, yy; for (i = 0; i < numtrigs; i++) { tx = trigs[i]._tx; From eaa24860ceaa103b846c3c25f0ba5ec4e8823d15 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:48:44 +0200 Subject: [PATCH 13/20] Correct return type of tmsg_cleanup --- Source/tmsg.cpp | 3 +-- Source/tmsg.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/tmsg.cpp b/Source/tmsg.cpp index e8caf15f9..e4f6a9637 100644 --- a/Source/tmsg.cpp +++ b/Source/tmsg.cpp @@ -41,7 +41,7 @@ void tmsg_start() assert(! sgpTimedMsgHead); } -void *tmsg_cleanup() +void tmsg_cleanup() { TMsg *next; @@ -50,5 +50,4 @@ void *tmsg_cleanup() MemFreeDbg(sgpTimedMsgHead); sgpTimedMsgHead = next; } - return sgpTimedMsgHead; } diff --git a/Source/tmsg.h b/Source/tmsg.h index 465181f72..7e23e31e5 100644 --- a/Source/tmsg.h +++ b/Source/tmsg.h @@ -5,6 +5,6 @@ int tmsg_get(BYTE *pbMsg, DWORD dwMaxLen); void tmsg_add(BYTE *pbMsg, BYTE bLen); void tmsg_start(); -void *tmsg_cleanup(); +void tmsg_cleanup(); #endif /* __TMSG_H__ */ From bb9315db928c76b83e6ef78879b75708b3b7aadb Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 02:49:27 +0200 Subject: [PATCH 14/20] Correct shareware data This fixes the intro music being played to frequently in the menu, and makes sure that some spells are not avalible. --- Source/sound.cpp | 7 +++- Source/spelldat.cpp | 97 +++++++++++++++++++++++++++------------------ enums.h | 2 - 3 files changed, 64 insertions(+), 42 deletions(-) diff --git a/Source/sound.cpp b/Source/sound.cpp index 00842bc9f..f06dcab56 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -20,14 +20,17 @@ char *sgszMusicTracks[NUM_MUSIC] = { #ifdef SPAWN "Music\\sTowne.wav", "Music\\sLvlA.wav", - "Music\\sintro.wav" + "Music\\sLvlA.wav", + "Music\\sLvlA.wav", + "Music\\sLvlA.wav", + "Music\\sintro.wav", #else "Music\\DTowne.wav", "Music\\DLvlA.wav", "Music\\DLvlB.wav", "Music\\DLvlC.wav", "Music\\DLvlD.wav", - "Music\\Dintro.wav" + "Music\\Dintro.wav", #endif }; char unk_volume[4][2] = { diff --git a/Source/spelldat.cpp b/Source/spelldat.cpp index c7bcd4415..95b074ade 100644 --- a/Source/spelldat.cpp +++ b/Source/spelldat.cpp @@ -3,43 +3,64 @@ /** Data related to each spell ID. */ SpellData spelldata[] = { // clang-format off - // sName, sManaCost, sType, sNameText, sSkillText, sBookLvl, sStaffLvl, sTargeted, sTownSpell, sMinInt, sSFX, sMissiles[3], sManaAdj, sMinMana, sStaffMin, sStaffMax, sBookCost, sStaffCost - { SPL_NULL, 0, 0, NULL, NULL, 0, 0, FALSE, FALSE, 0, 0, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_FIREBOLT, 6, STYPE_FIRE, "Firebolt", "Firebolt", 1, 1, TRUE, FALSE, 15, IS_CAST2, { MIS_FIREBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 }, - { SPL_HEAL, 5, STYPE_MAGIC, "Healing", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEAL, 0, 0 }, 3, 1, 20, 40, 1000, 50 }, - { SPL_LIGHTNING, 10, STYPE_LIGHTNING, "Lightning", NULL, 4, 3, TRUE, FALSE, 20, IS_CAST4, { MIS_LIGHTCTRL, 0, 0 }, 1, 6, 20, 60, 3000, 150 }, - { SPL_FLASH, 30, STYPE_LIGHTNING, "Flash", NULL, 5, 4, FALSE, FALSE, 33, IS_CAST4, { MIS_FLASH, MIS_FLASH2, 0 }, 2, 16, 20, 40, 7500, 500 }, - { SPL_IDENTIFY, 13, STYPE_MAGIC, "Identify", "Identify", -1, -1, FALSE, TRUE, 23, IS_CAST6, { MIS_IDENTIFY, 0, 0 }, 2, 1, 8, 12, 0, 100 }, - { SPL_FIREWALL, 28, STYPE_FIRE, "Fire Wall", NULL, 3, 2, TRUE, FALSE, 27, IS_CAST2, { MIS_FIREWALLC, 0, 0 }, 2, 16, 8, 16, 6000, 400 }, - { SPL_TOWN, 35, STYPE_MAGIC, "Town Portal", NULL, 3, 3, TRUE, FALSE, 20, IS_CAST6, { MIS_TOWN, 0, 0 }, 3, 18, 8, 12, 3000, 200 }, - { SPL_STONE, 60, STYPE_MAGIC, "Stone Curse", NULL, 6, 5, TRUE, FALSE, 51, IS_CAST2, { MIS_STONE, 0, 0 }, 3, 40, 8, 16, 12000, 800 }, - { SPL_INFRA, 40, STYPE_MAGIC, "Infravision", NULL, -1, -1, FALSE, FALSE, 36, IS_CAST8, { MIS_INFRA, 0, 0 }, 5, 20, 0, 0, 0, 600 }, - { SPL_RNDTELEPORT, 12, STYPE_MAGIC, "Phasing", NULL, 7, 6, FALSE, FALSE, 39, IS_CAST2, { MIS_RNDTELEPORT, 0, 0 }, 2, 4, 40, 80, 3500, 200 }, - { SPL_MANASHIELD, 33, STYPE_MAGIC, "Mana Shield", NULL, 6, 5, FALSE, FALSE, 25, IS_CAST2, { MIS_MANASHIELD, 0, 0 }, 0, 33, 4, 10, 16000, 1200 }, - { SPL_FIREBALL, 16, STYPE_FIRE, "Fireball", NULL, 8, 7, TRUE, FALSE, 48, IS_CAST2, { MIS_FIREBALL, 0, 0 }, 1, 10, 40, 80, 8000, 300 }, - { SPL_GUARDIAN, 50, STYPE_FIRE, "Guardian", NULL, 9, 8, TRUE, FALSE, 61, IS_CAST2, { MIS_GUARDIAN, 0, 0 }, 2, 30, 16, 32, 14000, 950 }, - { SPL_CHAIN, 30, STYPE_LIGHTNING, "Chain Lightning", NULL, 8, 7, FALSE, FALSE, 54, IS_CAST2, { MIS_CHAIN, 0, 0 }, 1, 18, 20, 60, 11000, 750 }, - { SPL_WAVE, 35, STYPE_FIRE, "Flame Wave", NULL, 9, 8, TRUE, FALSE, 54, IS_CAST2, { MIS_WAVE, 0, 0 }, 3, 20, 20, 40, 10000, 650 }, - { SPL_DOOMSERP, 0, STYPE_LIGHTNING, "Doom Serpents", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_BLODRIT, 0, STYPE_MAGIC, "Blood Ritual", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_NOVA, 60, STYPE_MAGIC, "Nova", NULL, -1, 10, FALSE, FALSE, 87, IS_CAST4, { MIS_NOVA, 0, 0 }, 3, 35, 16, 32, 21000, 1300 }, - { SPL_INVISIBIL, 0, STYPE_MAGIC, "Invisibility", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_FLAME, 11, STYPE_FIRE, "Inferno", NULL, 3, 2, TRUE, FALSE, 20, IS_CAST2, { MIS_FLAMEC, 0, 0 }, 1, 6, 20, 40, 2000, 100 }, - { SPL_GOLEM, 100, STYPE_FIRE, "Golem", NULL, 11, 9, FALSE, FALSE, 81, IS_CAST2, { MIS_GOLEM, 0, 0 }, 6, 60, 16, 32, 18000, 1100 }, - { SPL_BLODBOIL, 0, STYPE_LIGHTNING, "Blood Boil", NULL, -1, -1, TRUE, FALSE, 0, IS_CAST8, { 0, 0, 0 }, 0, 0, 0, 0, 0, 0 }, - { SPL_TELEPORT, 35, STYPE_MAGIC, "Teleport", NULL, 14, 12, TRUE, FALSE, 105, IS_CAST6, { MIS_TELEPORT, 0, 0 }, 3, 15, 16, 32, 20000, 1250 }, - { SPL_APOCA, 150, STYPE_FIRE, "Apocalypse", NULL, -1, 15, FALSE, FALSE, 149, IS_CAST2, { MIS_APOCA, 0, 0 }, 6, 90, 8, 12, 30000, 2000 }, - { SPL_ETHEREALIZE, 100, STYPE_MAGIC, "Etherealize", NULL, -1, -1, FALSE, FALSE, 93, IS_CAST2, { MIS_ETHEREALIZE, 0, 0 }, 0, 100, 2, 6, 26000, 1600 }, - { SPL_REPAIR, 0, STYPE_MAGIC, "Item Repair", "Item Repair", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_REPAIR, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_RECHARGE, 0, STYPE_MAGIC, "Staff Recharge", "Staff Recharge", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_RECHARGE, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_DISARM, 0, STYPE_MAGIC, "Trap Disarm", "Trap Disarm", -1, -1, FALSE, FALSE, -1, IS_CAST6, { MIS_DISARM, 0, 0 }, 0, 0, 40, 80, 0, 0 }, - { SPL_ELEMENT, 35, STYPE_FIRE, "Elemental", NULL, 8, 6, FALSE, FALSE, 68, IS_CAST2, { MIS_ELEMENT, 0, 0 }, 2, 20, 20, 60, 10500, 700 }, - { SPL_CBOLT, 6, STYPE_LIGHTNING, "Charged Bolt", NULL, 1, 1, TRUE, FALSE, 25, IS_CAST2, { MIS_CBOLT, 0, 0 }, 1, 6, 40, 80, 1000, 50 }, - { SPL_HBOLT, 7, STYPE_MAGIC, "Holy Bolt", NULL, 1, 1, TRUE, FALSE, 20, IS_CAST2, { MIS_HBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 }, - { SPL_RESURRECT, 20, STYPE_MAGIC, "Resurrect", NULL, -1, 5, FALSE, TRUE, 30, IS_CAST8, { MIS_RESURRECT, 0, 0 }, 0, 20, 4, 10, 4000, 250 }, - { SPL_TELEKINESIS, 15, STYPE_MAGIC, "Telekinesis", NULL, 2, 2, FALSE, FALSE, 33, IS_CAST2, { MIS_TELEKINESIS, 0, 0 }, 2, 8, 20, 40, 2500, 200 }, - { SPL_HEALOTHER, 5, STYPE_MAGIC, "Heal Other", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEALOTHER, 0, 0 }, 3, 1, 20, 40, 1000, 50 }, - { SPL_FLARE, 25, STYPE_MAGIC, "Blood Star", NULL, 14, 13, FALSE, FALSE, 70, IS_CAST2, { MIS_FLARE, 0, 0 }, 2, 14, 20, 60, 27500, 1800 }, - { SPL_BONESPIRIT, 24, STYPE_MAGIC, "Bone Spirit", NULL, 9, 7, FALSE, FALSE, 34, IS_CAST2, { MIS_BONESPIRIT, 0, 0 }, 1, 12, 20, 60, 11500, 800 }, + // sName, sManaCost, sType, sNameText, sSkillText, sBookLvl, sStaffLvl, sTargeted, sTownSpell, sMinInt, sSFX, sMissiles[3], sManaAdj, sMinMana, sStaffMin, sStaffMax, sBookCost, sStaffCost + { SPL_NULL, 0, 0, NULL, NULL, 0, 0, FALSE, FALSE, 0, 0, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_FIREBOLT, 6, STYPE_FIRE, "Firebolt", "Firebolt", 1, 1, TRUE, FALSE, 15, IS_CAST2, { MIS_FIREBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 }, + { SPL_HEAL, 5, STYPE_MAGIC, "Healing", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEAL, 0, 0 }, 3, 1, 20, 40, 1000, 50 }, + { SPL_LIGHTNING, 10, STYPE_LIGHTNING, "Lightning", NULL, 4, 3, TRUE, FALSE, 20, IS_CAST4, { MIS_LIGHTCTRL, 0, 0 }, 1, 6, 20, 60, 3000, 150 }, + { SPL_FLASH, 30, STYPE_LIGHTNING, "Flash", NULL, 5, 4, FALSE, FALSE, 33, IS_CAST4, { MIS_FLASH, MIS_FLASH2, 0 }, 2, 16, 20, 40, 7500, 500 }, + { SPL_IDENTIFY, 13, STYPE_MAGIC, "Identify", "Identify", -1, -1, FALSE, TRUE, 23, IS_CAST6, { MIS_IDENTIFY, 0, 0 }, 2, 1, 8, 12, 0, 100 }, + { SPL_FIREWALL, 28, STYPE_FIRE, "Fire Wall", NULL, 3, 2, TRUE, FALSE, 27, IS_CAST2, { MIS_FIREWALLC, 0, 0 }, 2, 16, 8, 16, 6000, 400 }, + { SPL_TOWN, 35, STYPE_MAGIC, "Town Portal", NULL, 3, 3, TRUE, FALSE, 20, IS_CAST6, { MIS_TOWN, 0, 0 }, 3, 18, 8, 12, 3000, 200 }, +#ifndef SPAWN + { SPL_STONE, 60, STYPE_MAGIC, "Stone Curse", NULL, 6, 5, TRUE, FALSE, 51, IS_CAST2, { MIS_STONE, 0, 0 }, 3, 40, 8, 16, 12000, 800 }, +#else + { SPL_STONE, 60, STYPE_MAGIC, "Stone Curse", NULL, -1, -1, TRUE, FALSE, 51, IS_CAST2, { MIS_STONE, 0, 0 }, 3, 40, 8, 16, 12000, 800 }, +#endif + { SPL_INFRA, 40, STYPE_MAGIC, "Infravision", NULL, -1, -1, FALSE, FALSE, 36, IS_CAST8, { MIS_INFRA, 0, 0 }, 5, 20, 0, 0, 0, 600 }, + { SPL_RNDTELEPORT, 12, STYPE_MAGIC, "Phasing", NULL, 7, 6, FALSE, FALSE, 39, IS_CAST2, { MIS_RNDTELEPORT, 0, 0 }, 2, 4, 40, 80, 3500, 200 }, + { SPL_MANASHIELD, 33, STYPE_MAGIC, "Mana Shield", NULL, 6, 5, FALSE, FALSE, 25, IS_CAST2, { MIS_MANASHIELD, 0, 0 }, 0, 33, 4, 10, 16000, 1200 }, + { SPL_FIREBALL, 16, STYPE_FIRE, "Fireball", NULL, 8, 7, TRUE, FALSE, 48, IS_CAST2, { MIS_FIREBALL, 0, 0 }, 1, 10, 40, 80, 8000, 300 }, +#ifndef SPAWN + { SPL_GUARDIAN, 50, STYPE_FIRE, "Guardian", NULL, 9, 8, TRUE, FALSE, 61, IS_CAST2, { MIS_GUARDIAN, 0, 0 }, 2, 30, 16, 32, 14000, 950 }, +#else + { SPL_GUARDIAN, 50, STYPE_FIRE, "Guardian", NULL, -1, -1, TRUE, FALSE, 61, IS_CAST2, { MIS_GUARDIAN, 0, 0 }, 2, 30, 16, 32, 14000, 950 }, +#endif + { SPL_CHAIN, 30, STYPE_LIGHTNING, "Chain Lightning", NULL, 8, 7, FALSE, FALSE, 54, IS_CAST2, { MIS_CHAIN, 0, 0 }, 1, 18, 20, 60, 11000, 750 }, + { SPL_WAVE, 35, STYPE_FIRE, "Flame Wave", NULL, 9, 8, TRUE, FALSE, 54, IS_CAST2, { MIS_WAVE, 0, 0 }, 3, 20, 20, 40, 10000, 650 }, + { SPL_DOOMSERP, 0, STYPE_LIGHTNING, "Doom Serpents", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_BLODRIT, 0, STYPE_MAGIC, "Blood Ritual", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_NOVA, 60, STYPE_MAGIC, "Nova", NULL, -1, 10, FALSE, FALSE, 87, IS_CAST4, { MIS_NOVA, 0, 0 }, 3, 35, 16, 32, 21000, 1300 }, + { SPL_INVISIBIL, 0, STYPE_MAGIC, "Invisibility", NULL, -1, -1, FALSE, FALSE, 0, IS_CAST2, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_FLAME, 11, STYPE_FIRE, "Inferno", NULL, 3, 2, TRUE, FALSE, 20, IS_CAST2, { MIS_FLAMEC, 0, 0 }, 1, 6, 20, 40, 2000, 100 }, +#ifndef SPAWN + { SPL_GOLEM, 100, STYPE_FIRE, "Golem", NULL, 11, 9, FALSE, FALSE, 81, IS_CAST2, { MIS_GOLEM, 0, 0 }, 6, 60, 16, 32, 18000, 1100 }, +#else + { SPL_GOLEM, 100, STYPE_FIRE, "Golem", NULL, -1, -1, FALSE, FALSE, 81, IS_CAST2, { MIS_GOLEM, 0, 0 }, 6, 60, 16, 32, 18000, 1100 }, +#endif + { SPL_BLODBOIL, 0, STYPE_LIGHTNING, "Blood Boil", NULL, -1, -1, TRUE, FALSE, 0, IS_CAST8, { 0, 0, 0 }, 0, 0, 0, 0, 0, 0 }, + { SPL_TELEPORT, 35, STYPE_MAGIC, "Teleport", NULL, 14, 12, TRUE, FALSE, 105, IS_CAST6, { MIS_TELEPORT, 0, 0 }, 3, 15, 16, 32, 20000, 1250 }, +#ifndef SPAWN + { SPL_APOCA, 150, STYPE_FIRE, "Apocalypse", NULL, -1, 15, FALSE, FALSE, 149, IS_CAST2, { MIS_APOCA, 0, 0 }, 6, 90, 8, 12, 30000, 2000 }, +#else + { SPL_APOCA, 150, STYPE_FIRE, "Apocalypse", NULL, -1, -1, FALSE, FALSE, 149, IS_CAST2, { MIS_APOCA, 0, 0 }, 6, 90, 8, 12, 30000, 2000 }, +#endif + { SPL_ETHEREALIZE, 100, STYPE_MAGIC, "Etherealize", NULL, -1, -1, FALSE, FALSE, 93, IS_CAST2, { MIS_ETHEREALIZE, 0, 0 }, 0, 100, 2, 6, 26000, 1600 }, + { SPL_REPAIR, 0, STYPE_MAGIC, "Item Repair", "Item Repair", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_REPAIR, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_RECHARGE, 0, STYPE_MAGIC, "Staff Recharge", "Staff Recharge", -1, -1, FALSE, TRUE, -1, IS_CAST6, { MIS_RECHARGE, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_DISARM, 0, STYPE_MAGIC, "Trap Disarm", "Trap Disarm", -1, -1, FALSE, FALSE, -1, IS_CAST6, { MIS_DISARM, 0, 0 }, 0, 0, 40, 80, 0, 0 }, + { SPL_ELEMENT, 35, STYPE_FIRE, "Elemental", NULL, 8, 6, FALSE, FALSE, 68, IS_CAST2, { MIS_ELEMENT, 0, 0 }, 2, 20, 20, 60, 10500, 700 }, + { SPL_CBOLT, 6, STYPE_LIGHTNING, "Charged Bolt", NULL, 1, 1, TRUE, FALSE, 25, IS_CAST2, { MIS_CBOLT, 0, 0 }, 1, 6, 40, 80, 1000, 50 }, + { SPL_HBOLT, 7, STYPE_MAGIC, "Holy Bolt", NULL, 1, 1, TRUE, FALSE, 20, IS_CAST2, { MIS_HBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 }, + { SPL_RESURRECT, 20, STYPE_MAGIC, "Resurrect", NULL, -1, 5, FALSE, TRUE, 30, IS_CAST8, { MIS_RESURRECT, 0, 0 }, 0, 20, 4, 10, 4000, 250 }, + { SPL_TELEKINESIS, 15, STYPE_MAGIC, "Telekinesis", NULL, 2, 2, FALSE, FALSE, 33, IS_CAST2, { MIS_TELEKINESIS, 0, 0 }, 2, 8, 20, 40, 2500, 200 }, + { SPL_HEALOTHER, 5, STYPE_MAGIC, "Heal Other", NULL, 1, 1, FALSE, TRUE, 17, IS_CAST8, { MIS_HEALOTHER, 0, 0 }, 3, 1, 20, 40, 1000, 50 }, +#ifndef SPAWN + { SPL_FLARE, 25, STYPE_MAGIC, "Blood Star", NULL, 14, 13, FALSE, FALSE, 70, IS_CAST2, { MIS_FLARE, 0, 0 }, 2, 14, 20, 60, 27500, 1800 }, + { SPL_BONESPIRIT, 24, STYPE_MAGIC, "Bone Spirit", NULL, 9, 7, FALSE, FALSE, 34, IS_CAST2, { MIS_BONESPIRIT, 0, 0 }, 1, 12, 20, 60, 11500, 800 }, +#else + { SPL_FLARE, 25, STYPE_MAGIC, "Blood Star", NULL, -1, -1, FALSE, FALSE, 70, IS_CAST2, { MIS_FLARE, 0, 0 }, 2, 14, 20, 60, 27500, 1800 }, + { SPL_BONESPIRIT, 24, STYPE_MAGIC, "Bone Spirit", NULL, -1, -1, FALSE, FALSE, 34, IS_CAST2, { MIS_BONESPIRIT, 0, 0 }, 1, 12, 20, 60, 11500, 800 }, +#endif // clang-format on }; diff --git a/enums.h b/enums.h index 0ecfd684b..cf9712c95 100644 --- a/enums.h +++ b/enums.h @@ -2284,11 +2284,9 @@ typedef enum _talker_id { typedef enum _music_id { TMUSIC_TOWN, TMUSIC_L1, -#ifndef SPAWN TMUSIC_L2, TMUSIC_L3, TMUSIC_L4, -#endif TMUSIC_INTRO, NUM_MUSIC, } _music_id; From 5cb8312e92104e5bb2700210688c365764744663 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 04:01:47 +0200 Subject: [PATCH 15/20] Correct name of random_ --- comparer-config/diablo.toml | 2 +- comparer-config/spawn.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/comparer-config/diablo.toml b/comparer-config/diablo.toml index 41c12fd32..d021375de 100644 --- a/comparer-config/diablo.toml +++ b/comparer-config/diablo.toml @@ -1903,7 +1903,7 @@ addr = 0x41752C size = 0x1F [[func]] -name = "random" +name = "random_" addr = 0x41754B size = 0x22 diff --git a/comparer-config/spawn.toml b/comparer-config/spawn.toml index 5a6fd8cbe..a2e7fbe43 100644 --- a/comparer-config/spawn.toml +++ b/comparer-config/spawn.toml @@ -1373,7 +1373,7 @@ addr = 0x40F39C size = 0x1F [[func]] -name = "random" +name = "random_" addr = 0x40F3BB size = 0x22 From 2cdb83c8ffafa11eff202efa66dd7c3c03ead003 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 6 Apr 2020 04:39:23 +0200 Subject: [PATCH 16/20] Fix signature of FuncDlg properly Previous fix caused a small diff, see: https://docs.microsoft.com/en-us/previous-versions/ms960202%28v%3dmsdn.10%29 --- Source/appfat.cpp | 42 +++++++++++++++++++++--------------------- Source/appfat.h | 1 - 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Source/appfat.cpp b/Source/appfat.cpp index fac368284..d6ccf73d7 100644 --- a/Source/appfat.cpp +++ b/Source/appfat.cpp @@ -573,6 +573,26 @@ void center_window(HWND hDlg) } } +static BOOL CALLBACK FuncDlg(HWND hDlg, UINT uMsg,WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) { + case WM_INITDIALOG: + TextDlg(hDlg, (char *)lParam); + break; + case WM_COMMAND: + if (LOWORD(wParam) == IDOK) { + EndDialog(hDlg, TRUE); + } else if (LOWORD(wParam) == IDCANCEL) { + EndDialog(hDlg, FALSE); + } + break; + default: + return FALSE; + } + + return TRUE; +} + void ErrDlg(int template_id, DWORD error_code, char *log_file_path, int log_line_nr) { char *size; @@ -591,27 +611,7 @@ void ErrDlg(int template_id, DWORD error_code, char *log_file_path, int log_line app_fatal(NULL); } -BOOL __stdcall FuncDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM text) -{ - switch (uMsg) { - case WM_INITDIALOG: - TextDlg(hDlg, (char *)text); - break; - case WM_COMMAND: - if (wParam == IDOK) { - EndDialog(hDlg, TRUE); - } else if (wParam == IDCANCEL) { - EndDialog(hDlg, FALSE); - } - break; - default: - return FALSE; - } - - return TRUE; -} - -void TextDlg(HWND hDlg, char *text) +static void TextDlg(HWND hDlg, char *text) { center_window(hDlg); diff --git a/Source/appfat.h b/Source/appfat.h index ea335f09a..ab2154f09 100644 --- a/Source/appfat.h +++ b/Source/appfat.h @@ -29,7 +29,6 @@ void DDErrMsg(DWORD error_code, int log_line_nr, char *log_file_path); void DSErrMsg(DWORD error_code, int log_line_nr, char *log_file_path); void center_window(HWND hDlg); void ErrDlg(int template_id, DWORD error_code, char *log_file_path, int log_line_nr); -BOOL __stdcall FuncDlg(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM text); void TextDlg(HWND hDlg, char *text); void ErrOkDlg(int template_id, DWORD error_code, char *log_file_path, int log_line_nr); void FileErrDlg(const char *error); From 31181b77c44cff2b15ee815a4f60bca5161405f8 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 22 Dec 2019 23:57:51 +0100 Subject: [PATCH 17/20] Bool comparisons --- Source/control.cpp | 4 ++-- Source/diablo.cpp | 2 +- Source/objects.cpp | 2 +- Source/player.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index 5a196e927..c89e3fc4c 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -1607,7 +1607,7 @@ void CheckBtnUp() break; case PANBTN_INVENTORY: sbookflag = FALSE; - invflag = invflag == 0; + invflag = !invflag; if (dropGoldFlag) { dropGoldFlag = FALSE; dropGoldValue = 0; @@ -1628,7 +1628,7 @@ void CheckBtnUp() control_type_message(); break; case PANBTN_FRIENDLY: - FriendlyMode = FriendlyMode == 0; + FriendlyMode = !FriendlyMode; break; } } diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 6558f8a86..7a2c8a4b4 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1280,7 +1280,7 @@ void PressChar(int vkey) case 'i': if (!stextflag) { sbookflag = FALSE; - invflag = invflag == 0; + invflag = !invflag; if (!invflag || chrflag) { if (MouseX < 480 && MouseY < PANEL_TOP) { SetCursorPos(MouseX + 160, MouseY); diff --git a/Source/objects.cpp b/Source/objects.cpp index 2e9f3e461..840d041bf 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -4104,7 +4104,7 @@ void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, int sendmsg) object[i]._oMissFlag = TRUE; object[i]._oSelFlag = 0; object[i]._oPreFlag = TRUE; - if (deltaload != 0) { + if (deltaload) { object[i]._oAnimCnt = 0; object[i]._oAnimFrame = object[i]._oAnimLen; object[i]._oAnimDelay = 1000; diff --git a/Source/player.cpp b/Source/player.cpp index c89c5f19c..b5615e406 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -1400,7 +1400,7 @@ void StartWalk3(int pnum, int xvel, int yvel, int xoff, int yoff, int xadd, int plr[pnum]._pxoff = xoff; plr[pnum]._pyoff = yoff; - if (leveltype) { + if (leveltype != DTYPE_TOWN) { ChangeLightXY(plr[pnum]._plid, x, y); PM_ChangeLightOff(pnum); } From 53ccf38a8c111719f0ddfddd9a21e307baa0ede8 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 22 Dec 2019 23:58:21 +0100 Subject: [PATCH 18/20] Bool types --- Source/control.cpp | 2 +- Source/objects.cpp | 2 +- Source/objects.h | 2 +- structs.h | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index c89e3fc4c..5896cb92c 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -28,7 +28,7 @@ int nGoldFrame; BYTE *pLifeBuff; BYTE *pBtmBuff; BYTE *pTalkBtns; -int pstrjust[4]; +BOOL pstrjust[4]; int pnumlines; BOOL pinfoflag; BOOL talkbtndown[3]; diff --git a/Source/objects.cpp b/Source/objects.cpp index 840d041bf..0c5612ade 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -4073,7 +4073,7 @@ void BreakCrux(int i) ObjChangeMap(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); } -void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, int sendmsg) +void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, BOOL sendmsg) { int oi; int xp, yp; diff --git a/Source/objects.h b/Source/objects.h index 0281f1251..10d916648 100644 --- a/Source/objects.h +++ b/Source/objects.h @@ -139,7 +139,7 @@ void SyncOpL2Door(int pnum, int cmd, int i); void SyncOpL3Door(int pnum, int cmd, int i); void SyncOpObject(int pnum, int cmd, int i); void BreakCrux(int i); -void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, int sendmsg); +void BreakBarrel(int pnum, int i, int dam, BOOL forcebreak, BOOL sendmsg); void BreakObject(int pnum, int oi); void SyncBreakObj(int pnum, int oi); void SyncL1Doors(int i); diff --git a/structs.h b/structs.h index e80eccfd2..6b0f9a874 100644 --- a/structs.h +++ b/structs.h @@ -825,7 +825,7 @@ typedef struct TCmdChItem { WORD wIndx; WORD wCI; int dwSeed; - BYTE bId; + BOOLEAN bId; } TCmdChItem; typedef struct TCmdDelItem { @@ -1523,7 +1523,7 @@ typedef struct STextStruct { int _sx; int _syoff; char _sstr[128]; - int _sjust; + BOOL _sjust; char _sclr; int _sline; int _ssel; From a291939a7de3f6b96b45890c62a12bcfb1153273 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 22 Dec 2019 23:59:30 +0100 Subject: [PATCH 19/20] Value types --- Source/drlg_l3.cpp | 2 +- Source/gmenu.cpp | 4 +- Source/msg.cpp | 2 +- Source/objdat.cpp | 200 ++++++++++++++++++++++----------------------- Source/objects.cpp | 2 +- Source/quests.cpp | 2 +- 6 files changed, 106 insertions(+), 106 deletions(-) diff --git a/Source/drlg_l3.cpp b/Source/drlg_l3.cpp index d5049f5e4..d45c66e50 100644 --- a/Source/drlg_l3.cpp +++ b/Source/drlg_l3.cpp @@ -1788,7 +1788,7 @@ void LoadL3Dungeon(char *sFileName, int vx, int vy) } } - abyssx = 112; + abyssx = MAXDUNX; // Unused DRLG_L3Pass3(); DRLG_Init_Globals(); ViewX = 31; diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index 778fa1209..c28a65476 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -80,7 +80,7 @@ void FreeGMenu() void gmenu_init_menu() { PentSpin_frame = 1; - sgpCurrentMenu = 0; + sgpCurrentMenu = NULL; sgpCurrItem = 0; dword_63447C = 0; sgCurrentMenuIdx = 0; @@ -94,7 +94,7 @@ void gmenu_init_menu() BOOL gmenu_is_active() { - return sgpCurrentMenu != 0; + return sgpCurrentMenu != NULL; } void gmenu_set_items(TMenuItem *pItem, void (*gmFunc)(TMenuItem *)) diff --git a/Source/msg.cpp b/Source/msg.cpp index 77c1e4ab4..c8f825f7c 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1260,7 +1260,7 @@ void DeltaImportJunk(BYTE *src) if (*src == 0xFF) { memset(&sgJunk.portal[i], 0xFF, sizeof(DPortal)); src++; - SetPortalStats(i, FALSE, 0, 0, 0, 0); + SetPortalStats(i, FALSE, 0, 0, 0, DTYPE_TOWN); } else { memcpy(&sgJunk.portal[i], src, sizeof(DPortal)); src += sizeof(DPortal); diff --git a/Source/objdat.cpp b/Source/objdat.cpp index a835be14a..d2d8b7ed3 100644 --- a/Source/objdat.cpp +++ b/Source/objdat.cpp @@ -120,106 +120,106 @@ int ObjTypeConv[113] = { /** Contains the data related to each object ID. */ ObjDataStruct AllObjects[99] = { // clang-format off - // oload, ofindex, ominlvl, omaxlvl, olvltype, otheme, oquest, oAnimFlag, oAnimDelay, oAnimLen, oAnimWidth, oSolidFlag, oMissFlag, oLightFlag, oBreak, oSelFlag, oTrapFlag - { 1, OFILE_L1BRAZ, 1, 4, 1, THEME_NONE, -1, 1, 1, 26, 64, TRUE, TRUE, FALSE, 0, 0, FALSE }, - { 1, OFILE_L1DOORS, 1, 4, 1, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, - { 1, OFILE_L1DOORS, 1, 4, 1, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, - { 3, OFILE_SKULFIRE, 0, 0, 0, THEME_SKELROOM, -1, 1, 2, 11, 96, TRUE, TRUE, FALSE, 0, 0, FALSE }, - { 1, OFILE_LEVER, 1, 4, 1, THEME_NONE, -1, 0, 1, 1, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_CHEST1, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_CHEST2, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_CHEST3, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 3, OFILE_CANDLE2, 0, 0, 0, THEME_SHRINE, -1, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 3, OFILE_BANNER, 0, 0, 0, THEME_SKELROOM, -1, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 3, OFILE_BANNER, 0, 0, 0, THEME_SKELROOM, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 3, OFILE_BANNER, 0, 0, 0, THEME_SKELROOM, -1, 0, 3, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 2, OFILE_SKULPILE, 1, 4, 0, THEME_NONE, -1, 0, 0, 1, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_L1BRAZ, 0, 0, 0, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_CRUXSK1, 0, 0, 0, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE }, - { 2, OFILE_CRUXSK2, 0, 0, 0, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE }, - { 2, OFILE_CRUXSK3, 0, 0, 0, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE }, - { 1, OFILE_ROCKSTAN, 5, 5, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 2, OFILE_ANGEL, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 2, OFILE_BOOK2, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 2, OFILE_BURNCROS, 0, 0, 0, THEME_NONE, -1, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_NUDE2, 0, 0, 0, THEME_NONE, -1, 1, 3, 6, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_SWITCH4, 16, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_TNUDEM, 13, 16, 0, THEME_NONE, 6, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TNUDEM, 13, 16, 0, THEME_TORTURE, 6, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TNUDEM, 13, 16, 0, THEME_TORTURE, 6, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TNUDEM, 13, 16, 0, THEME_TORTURE, 6, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TNUDEW, 13, 16, 0, THEME_TORTURE, 6, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TNUDEW, 13, 16, 0, THEME_TORTURE, 6, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TNUDEW, 13, 16, 0, THEME_TORTURE, 6, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, 6, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, 6, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, 6, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, 6, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TSOUL, 13, 16, 0, THEME_NONE, 6, 0, 5, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_BOOK2, 6, 6, 0, THEME_NONE, -1, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_L2DOORS, 5, 8, 2, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, - { 1, OFILE_L2DOORS, 5, 8, 2, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, FALSE }, - { 1, OFILE_WTORCH4, 5, 8, 2, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, - { 1, OFILE_WTORCH3, 5, 8, 2, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, - { 1, OFILE_WTORCH1, 5, 8, 2, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, - { 1, OFILE_WTORCH2, 5, 8, 2, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, - { 1, OFILE_SARC, 1, 4, 1, THEME_NONE, -1, 0, 1, 5, 128, TRUE, TRUE, TRUE, 0, 3, TRUE }, - { 2, OFILE_FLAME1, 1, 4, 1, THEME_NONE, -1, 0, 1, 20, 96, FALSE, TRUE, TRUE, 0, 0, FALSE }, - { 2, OFILE_LEVER, 1, 4, 1, THEME_NONE, -1, 0, 1, 2, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 2, OFILE_MINIWATR, 1, 4, 1, THEME_NONE, -1, 1, 1, 10, 64, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_BOOK1, 3, 4, 1, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_TRAPHOLE, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE }, - { 1, OFILE_TRAPHOLE, 1, 16, 0, THEME_NONE, -1, 0, 2, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE }, - { 2, OFILE_BCASE, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 2, OFILE_WEAPSTND, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 1, OFILE_BARREL, 1, 16, 0, THEME_NONE, -1, 0, 1, 9, 96, TRUE, TRUE, TRUE, 1, 3, FALSE }, - { 1, OFILE_BARRELEX, 1, 16, 0, THEME_NONE, -1, 0, 1, 10, 96, TRUE, TRUE, TRUE, 1, 3, FALSE }, - { 3, OFILE_LSHRINEG, 0, 0, 0, THEME_SHRINE, -1, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE }, - { 3, OFILE_RSHRINEG, 0, 0, 0, THEME_SHRINE, -1, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE }, - { 3, OFILE_BOOK2, 0, 0, 0, THEME_SKELROOM, -1, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 3, OFILE_BCASE, 0, 0, 0, THEME_LIBRARY, -1, 0, 3, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE }, - { 3, OFILE_BCASE, 0, 0, 0, THEME_LIBRARY, -1, 0, 4, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE }, - { 3, OFILE_BOOK2, 0, 0, 0, THEME_LIBRARY, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 3, OFILE_CANDLE2, 0, 0, 0, THEME_LIBRARY, -1, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 3, OFILE_BLOODFNT, 0, 0, 0, THEME_BLOODFOUNTAIN, -1, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_DECAP, 13, 16, 0, THEME_DECAPITATED, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE }, - { 1, OFILE_CHEST1, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_CHEST2, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_CHEST3, 1, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { 1, OFILE_BOOK1, 7, 7, 2, THEME_NONE, 8, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_BOOK1, 5, 5, 2, THEME_NONE, 9, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_PEDISTL, 5, 5, 2, THEME_NONE, 9, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_L3DOORS, 9, 12, 3, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, - { 1, OFILE_L3DOORS, 9, 12, 3, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, - { 3, OFILE_PFOUNTN, 0, 0, 0, THEME_PURIFYINGFOUNTAIN, -1, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 3, OFILE_ARMSTAND, 0, 0, 0, THEME_ARMORSTAND, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, - { 3, OFILE_ARMSTAND, 0, 0, 0, THEME_ARMORSTAND, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 3, OFILE_GOATSHRN, 0, 0, 0, THEME_GOATSHRINE, -1, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_CAULDREN, 13, 16, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, - { 3, OFILE_MFOUNTN, 0, 0, 0, THEME_MURKYFOUNTAIN, -1, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 3, OFILE_TFOUNTN, 0, 0, 0, THEME_TEARFOUNTAIN, -1, 1, 2, 4, 128, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_ALTBOY, 0, 0, 1, THEME_NONE, 15, 0, 1, 0, 128, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 1, OFILE_MCIRL, 0, 0, 1, THEME_NONE, 15, 0, 1, 0, 96, FALSE, TRUE, TRUE, 0, 0, FALSE }, - { 1, OFILE_MCIRL, 0, 0, 1, THEME_NONE, 15, 0, 1, 0, 96, FALSE, TRUE, TRUE, 0, 0, FALSE }, - { 1, OFILE_BKSLBRNT, 4, 12, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_CANDLE2, 2, 12, 0, THEME_NONE, 15, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, - { 1, OFILE_BOOK1, 13, 13, 4, THEME_NONE, 11, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, - { 1, OFILE_ARMSTAND, 13, 13, 0, THEME_NONE, 11, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, - { 2, OFILE_WEAPSTND, 13, 13, 0, THEME_NONE, 11, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, - { 2, OFILE_BURNCROS, 0, 0, 0, THEME_BRNCROSS, -1, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE }, - { 2, OFILE_WEAPSTND, 0, 0, 0, THEME_WEAPONRACK, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, - { 2, OFILE_WEAPSTND, 0, 0, 0, THEME_WEAPONRACK, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, - { 2, OFILE_MUSHPTCH, 0, 0, 0, THEME_NONE, 1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, TRUE }, - { 2, OFILE_LZSTAND, 0, 0, 0, THEME_NONE, 15, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 3, FALSE }, - { 1, OFILE_DECAP, 9, 9, 3, THEME_NONE, -1, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE }, - { 2, OFILE_CHEST3, 0, 0, 0, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, - { -1, 0, 0, 0, -1, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE } + // oload, ofindex, ominlvl, omaxlvl, olvltype, otheme, oquest, oAnimFlag, oAnimDelay, oAnimLen, oAnimWidth, oSolidFlag, oMissFlag, oLightFlag, oBreak, oSelFlag, oTrapFlag + { 1, OFILE_L1BRAZ, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 1, 1, 26, 64, TRUE, TRUE, FALSE, 0, 0, FALSE }, + { 1, OFILE_L1DOORS, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, + { 1, OFILE_L1DOORS, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, + { 3, OFILE_SKULFIRE, 0, 0, DTYPE_TOWN, THEME_SKELROOM, -1, 1, 2, 11, 96, TRUE, TRUE, FALSE, 0, 0, FALSE }, + { 1, OFILE_LEVER, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 1, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_CHEST1, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_CHEST2, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_CHEST3, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 3, OFILE_CANDLE2, 0, 0, DTYPE_TOWN, THEME_SHRINE, -1, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 3, OFILE_BANNER, 0, 0, DTYPE_TOWN, THEME_SKELROOM, -1, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 3, OFILE_BANNER, 0, 0, DTYPE_TOWN, THEME_SKELROOM, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 3, OFILE_BANNER, 0, 0, DTYPE_TOWN, THEME_SKELROOM, -1, 0, 3, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 2, OFILE_SKULPILE, 1, 4, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 1, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_L1BRAZ, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_CRUXSK1, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE }, + { 2, OFILE_CRUXSK2, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE }, + { 2, OFILE_CRUXSK3, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 15, 96, TRUE, FALSE, TRUE, 1, 3, FALSE }, + { 1, OFILE_ROCKSTAN, 5, 5, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 2, OFILE_ANGEL, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 2, OFILE_BOOK2, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 2, OFILE_BURNCROS, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_NUDE2, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 1, 3, 6, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_SWITCH4, 16, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_TNUDEM, 13, 16, DTYPE_TOWN, THEME_NONE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TNUDEM, 13, 16, DTYPE_TOWN, THEME_TORTURE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TNUDEM, 13, 16, DTYPE_TOWN, THEME_TORTURE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TNUDEM, 13, 16, DTYPE_TOWN, THEME_TORTURE, Q_BUTCHER, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TNUDEW, 13, 16, DTYPE_TOWN, THEME_TORTURE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TNUDEW, 13, 16, DTYPE_TOWN, THEME_TORTURE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TNUDEW, 13, 16, DTYPE_TOWN, THEME_TORTURE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TSOUL, 13, 16, DTYPE_TOWN, THEME_NONE, Q_BUTCHER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TSOUL, 13, 16, DTYPE_TOWN, THEME_NONE, Q_BUTCHER, 0, 2, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TSOUL, 13, 16, DTYPE_TOWN, THEME_NONE, Q_BUTCHER, 0, 3, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TSOUL, 13, 16, DTYPE_TOWN, THEME_NONE, Q_BUTCHER, 0, 4, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TSOUL, 13, 16, DTYPE_TOWN, THEME_NONE, Q_BUTCHER, 0, 5, 0, 128, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_BOOK2, 6, 6, DTYPE_TOWN, THEME_NONE, -1, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_L2DOORS, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, + { 1, OFILE_L2DOORS, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, FALSE }, + { 1, OFILE_WTORCH4, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, + { 1, OFILE_WTORCH3, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, + { 1, OFILE_WTORCH1, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, + { 1, OFILE_WTORCH2, 5, 8, DTYPE_CATACOMBS, THEME_NONE, -1, 1, 1, 9, 96, FALSE, TRUE, FALSE, 0, 0, FALSE }, + { 1, OFILE_SARC, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 5, 128, TRUE, TRUE, TRUE, 0, 3, TRUE }, + { 2, OFILE_FLAME1, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 20, 96, FALSE, TRUE, TRUE, 0, 0, FALSE }, + { 2, OFILE_LEVER, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 2, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 2, OFILE_MINIWATR, 1, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 1, 1, 10, 64, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_BOOK1, 3, 4, DTYPE_CATHEDRAL, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_TRAPHOLE, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE }, + { 1, OFILE_TRAPHOLE, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 2, 0, 64, FALSE, TRUE, TRUE, 0, 0, FALSE }, + { 2, OFILE_BCASE, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 2, OFILE_WEAPSTND, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 1, OFILE_BARREL, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 9, 96, TRUE, TRUE, TRUE, 1, 3, FALSE }, + { 1, OFILE_BARRELEX, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 10, 96, TRUE, TRUE, TRUE, 1, 3, FALSE }, + { 3, OFILE_LSHRINEG, 0, 0, DTYPE_TOWN, THEME_SHRINE, -1, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE }, + { 3, OFILE_RSHRINEG, 0, 0, DTYPE_TOWN, THEME_SHRINE, -1, 0, 1, 11, 128, FALSE, FALSE, TRUE, 0, 3, FALSE }, + { 3, OFILE_BOOK2, 0, 0, DTYPE_TOWN, THEME_SKELROOM, -1, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 3, OFILE_BCASE, 0, 0, DTYPE_TOWN, THEME_LIBRARY, -1, 0, 3, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE }, + { 3, OFILE_BCASE, 0, 0, DTYPE_TOWN, THEME_LIBRARY, -1, 0, 4, 0, 96, FALSE, FALSE, TRUE, 0, 3, FALSE }, + { 3, OFILE_BOOK2, 0, 0, DTYPE_TOWN, THEME_LIBRARY, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 3, OFILE_CANDLE2, 0, 0, DTYPE_TOWN, THEME_LIBRARY, -1, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 3, OFILE_BLOODFNT, 0, 0, DTYPE_TOWN, THEME_BLOODFOUNTAIN, -1, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_DECAP, 13, 16, DTYPE_TOWN, THEME_DECAPITATED, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE }, + { 1, OFILE_CHEST1, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_CHEST2, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_CHEST3, 1, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { 1, OFILE_BOOK1, 7, 7, DTYPE_CATACOMBS, THEME_NONE, Q_BLIND, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_BOOK1, 5, 5, DTYPE_CATACOMBS, THEME_NONE, Q_BLOOD, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_PEDISTL, 5, 5, DTYPE_CATACOMBS, THEME_NONE, Q_BLOOD, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_L3DOORS, 9, 12, DTYPE_CAVES, THEME_NONE, -1, 0, 1, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, + { 1, OFILE_L3DOORS, 9, 12, DTYPE_CAVES, THEME_NONE, -1, 0, 2, 0, 64, FALSE, FALSE, TRUE, 0, 3, TRUE }, + { 3, OFILE_PFOUNTN, 0, 0, DTYPE_TOWN, THEME_PURIFYINGFOUNTAIN, -1, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 3, OFILE_ARMSTAND, 0, 0, DTYPE_TOWN, THEME_ARMORSTAND, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, + { 3, OFILE_ARMSTAND, 0, 0, DTYPE_TOWN, THEME_ARMORSTAND, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 3, OFILE_GOATSHRN, 0, 0, DTYPE_TOWN, THEME_GOATSHRINE, -1, 1, 2, 10, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_CAULDREN, 13, 16, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, + { 3, OFILE_MFOUNTN, 0, 0, DTYPE_TOWN, THEME_MURKYFOUNTAIN, -1, 1, 2, 10, 128, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 3, OFILE_TFOUNTN, 0, 0, DTYPE_TOWN, THEME_TEARFOUNTAIN, -1, 1, 2, 4, 128, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_ALTBOY, 0, 0, DTYPE_CATHEDRAL, THEME_NONE, Q_BETRAYER, 0, 1, 0, 128, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 1, OFILE_MCIRL, 0, 0, DTYPE_CATHEDRAL, THEME_NONE, Q_BETRAYER, 0, 1, 0, 96, FALSE, TRUE, TRUE, 0, 0, FALSE }, + { 1, OFILE_MCIRL, 0, 0, DTYPE_CATHEDRAL, THEME_NONE, Q_BETRAYER, 0, 1, 0, 96, FALSE, TRUE, TRUE, 0, 0, FALSE }, + { 1, OFILE_BKSLBRNT, 4, 12, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_CANDLE2, 2, 12, DTYPE_TOWN, THEME_NONE, Q_BETRAYER, 1, 2, 4, 96, TRUE, TRUE, TRUE, 0, 0, FALSE }, + { 1, OFILE_BOOK1, 13, 13, DTYPE_HELL, THEME_NONE, Q_WARLORD, 0, 4, 0, 96, TRUE, TRUE, TRUE, 0, 3, FALSE }, + { 1, OFILE_ARMSTAND, 13, 13, DTYPE_TOWN, THEME_NONE, Q_WARLORD, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, + { 2, OFILE_WEAPSTND, 13, 13, DTYPE_TOWN, THEME_NONE, Q_WARLORD, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, + { 2, OFILE_BURNCROS, 0, 0, DTYPE_TOWN, THEME_BRNCROSS, -1, 1, 0, 10, 160, TRUE, FALSE, FALSE, 0, 0, FALSE }, + { 2, OFILE_WEAPSTND, 0, 0, DTYPE_TOWN, THEME_WEAPONRACK, -1, 0, 1, 0, 96, TRUE, FALSE, TRUE, 0, 3, FALSE }, + { 2, OFILE_WEAPSTND, 0, 0, DTYPE_TOWN, THEME_WEAPONRACK, -1, 0, 2, 0, 96, TRUE, FALSE, TRUE, 0, 0, FALSE }, + { 2, OFILE_MUSHPTCH, 0, 0, DTYPE_TOWN, THEME_NONE, Q_MUSHROOM, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 3, TRUE }, + { 2, OFILE_LZSTAND, 0, 0, DTYPE_TOWN, THEME_NONE, Q_BETRAYER, 0, 1, 0, 128, TRUE, FALSE, TRUE, 0, 3, FALSE }, + { 1, OFILE_DECAP, 9, 9, DTYPE_CAVES, THEME_NONE, -1, 0, 2, 0, 96, TRUE, TRUE, TRUE, 0, 1, FALSE }, + { 2, OFILE_CHEST3, 0, 0, DTYPE_TOWN, THEME_NONE, -1, 0, 1, 0, 96, TRUE, TRUE, TRUE, 0, 1, TRUE }, + { -1, 0, 0, 0, DTYPE_NONE, THEME_NONE, -1, 0, 0, 0, 0, FALSE, FALSE, FALSE, 0, 0, FALSE } // clang-format on }; diff --git a/Source/objects.cpp b/Source/objects.cpp index 0c5612ade..696552697 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -834,7 +834,7 @@ void InitObjects() InitRndLocObj(1, 5, 7); if (leveltype != DTYPE_HELL) AddObjTraps(); - if (leveltype > 1) + if (leveltype > DTYPE_CATHEDRAL) AddChestTraps(); InitObjFlag = FALSE; } diff --git a/Source/quests.cpp b/Source/quests.cpp index c0fc49c08..a208a664e 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -194,7 +194,7 @@ void CheckQuests() && quests[i]._qactive != QUEST_NOTAVAIL && plr[myplr].WorldX == quests[i]._qtx && plr[myplr].WorldY == quests[i]._qty) { - if (quests[i]._qlvltype != 255) { + if (quests[i]._qlvltype != DTYPE_NONE) { setlvltype = quests[i]._qlvltype; } StartNewLvl(myplr, WM_DIABSETLVL, quests[i]._qslvl); From 7b70770c16b5e77d1255bb2ab86f2d057e3dfeea Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 22 Dec 2019 23:59:59 +0100 Subject: [PATCH 20/20] BUGFIX note for MouseX/Y --- Source/diablo.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 7a2c8a4b4..3ac13dc16 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -719,13 +719,13 @@ LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } break; case WM_MOUSEMOVE: - MouseX = LOWORD(lParam); - MouseY = HIWORD(lParam); + MouseX = LOWORD(lParam); // BUGFIX (short)LOWORD coords are signed + MouseY = HIWORD(lParam); // BUGFIX (short)HIWORD coords are signed gmenu_on_mouse_move(); return 0; case WM_LBUTTONDOWN: - MouseX = LOWORD(lParam); - MouseY = HIWORD(lParam); + MouseX = LOWORD(lParam); // BUGFIX (short)LOWORD coords are signed + MouseY = HIWORD(lParam); // BUGFIX (short)HIWORD coords are signed if (sgbMouseDown == 0) { sgbMouseDown = 1; SetCapture(hWnd); @@ -733,8 +733,8 @@ LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; case WM_LBUTTONUP: - MouseX = LOWORD(lParam); - MouseY = HIWORD(lParam); + MouseX = LOWORD(lParam); // BUGFIX (short)LOWORD coords are signed + MouseY = HIWORD(lParam); // BUGFIX (short)HIWORD coords are signed if (sgbMouseDown == 1) { sgbMouseDown = 0; LeftMouseUp(); @@ -743,8 +743,8 @@ LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; case WM_RBUTTONDOWN: - MouseX = LOWORD(lParam); - MouseY = HIWORD(lParam); + MouseX = LOWORD(lParam); // BUGFIX (short)LOWORD coords are signed + MouseY = HIWORD(lParam); // BUGFIX (short)HIWORD coords are signed if (sgbMouseDown == 0) { sgbMouseDown = 2; SetCapture(hWnd); @@ -752,8 +752,8 @@ LRESULT CALLBACK GM_Game(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; case WM_RBUTTONUP: - MouseX = LOWORD(lParam); - MouseY = HIWORD(lParam); + MouseX = LOWORD(lParam); // BUGFIX (short)LOWORD coords are signed + MouseY = HIWORD(lParam); // BUGFIX (short)HIWORD coords are signed if (sgbMouseDown == 2) { sgbMouseDown = 0; ReleaseCapture();