diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 088090bee..6c3bcdc09 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -598,7 +598,7 @@ void GetMousePos(uint32_t lParam) MousePosition = { (std::int16_t)(lParam & 0xffff), (std::int16_t)((lParam >> 16) & 0xffff) }; } -void GameEventHandler(uint32_t uMsg, uint32_t wParam, uint32_t lParam) +void GameEventHandler(uint32_t uMsg, uint32_t wParam, uint16_t lParam) { switch (uMsg) { case DVL_WM_KEYDOWN: @@ -608,29 +608,29 @@ void GameEventHandler(uint32_t uMsg, uint32_t wParam, uint32_t lParam) ReleaseKey(static_cast(wParam)); return; case DVL_WM_MOUSEMOVE: - GetMousePos(lParam); + GetMousePos(wParam); gmenu_on_mouse_move(); return; case DVL_WM_LBUTTONDOWN: - GetMousePos(lParam); + GetMousePos(wParam); if (sgbMouseDown == CLICK_NONE) { sgbMouseDown = CLICK_LEFT; - LeftMouseDown(wParam); + LeftMouseDown(lParam); } return; case DVL_WM_LBUTTONUP: - GetMousePos(lParam); + GetMousePos(wParam); if (sgbMouseDown == CLICK_LEFT) { LastMouseButtonAction = MouseActionType::None; sgbMouseDown = CLICK_NONE; - LeftMouseUp(wParam); + LeftMouseUp(lParam); } return; case DVL_WM_RBUTTONDOWN: - GetMousePos(lParam); + GetMousePos(wParam); if (sgbMouseDown == CLICK_NONE) { sgbMouseDown = CLICK_RIGHT; - RightMouseDown((wParam & KMOD_SHIFT) != 0); + RightMouseDown((lParam & KMOD_SHIFT) != 0); } return; case DVL_WM_RBUTTONUP: @@ -2014,14 +2014,14 @@ bool PressEscKey() return rv; } -void DisableInputEventHandler(uint32_t uMsg, uint32_t /*wParam*/, uint32_t lParam) +void DisableInputEventHandler(uint32_t uMsg, uint32_t wParam, uint16_t /*lParam*/) { switch (uMsg) { case DVL_WM_KEYDOWN: case DVL_WM_KEYUP: return; case DVL_WM_MOUSEMOVE: - GetMousePos(lParam); + GetMousePos(wParam); return; case DVL_WM_LBUTTONDOWN: if (sgbMouseDown != CLICK_NONE) diff --git a/Source/diablo.h b/Source/diablo.h index 6d73beec2..b494298c1 100644 --- a/Source/diablo.h +++ b/Source/diablo.h @@ -93,7 +93,7 @@ bool diablo_is_focused(); void diablo_focus_pause(); void diablo_focus_unpause(); bool PressEscKey(); -void DisableInputEventHandler(uint32_t uMsg, uint32_t wParam, uint32_t lParam); +void DisableInputEventHandler(uint32_t uMsg, uint32_t wParam, uint16_t lParam); void LoadGameLevel(bool firstflag, lvl_entry lvldir); /** diff --git a/Source/engine/demomode.cpp b/Source/engine/demomode.cpp index 59fbb2649..fa29da061 100644 --- a/Source/engine/demomode.cpp +++ b/Source/engine/demomode.cpp @@ -29,7 +29,7 @@ struct DemoMsg { DemoMsgType type; uint32_t message; uint32_t wParam; - uint32_t lParam; + uint16_t lParam; float progressToNextGameTick; }; @@ -48,7 +48,7 @@ int StartTime = 0; uint16_t DemoGraphicsWidth = 640; uint16_t DemoGraphicsHeight = 480; -void PumpDemoMessage(DemoMsgType demoMsgType, uint32_t message, uint32_t wParam, uint32_t lParam, float progressToNextGameTick) +void PumpDemoMessage(DemoMsgType demoMsgType, uint32_t message, uint32_t wParam, uint16_t lParam, float progressToNextGameTick) { Demo_Message_Queue.push_back(DemoMsg { demoMsgType, message, wParam, lParam, progressToNextGameTick }); } @@ -80,7 +80,7 @@ bool LoadDemoMessages(int i) case DemoMsgType::Message: { const uint32_t message = ReadLE32(demofile); const uint32_t wParam = ReadLE32(demofile); - const uint32_t lParam = ReadLE32(demofile); + const uint16_t lParam = ReadLE16(demofile); PumpDemoMessage(type, message, wParam, lParam, progressToNextGameTick); break; } @@ -186,8 +186,8 @@ bool FetchMessage(tagMSG *lpMsg) if (SDL_PollEvent(&e) != 0) { if (e.type == SDL_QUIT) { lpMsg->message = DVL_WM_QUIT; - lpMsg->lParam = 0; lpMsg->wParam = 0; + lpMsg->lParam = 0; return true; } if (e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE) { @@ -213,8 +213,8 @@ bool FetchMessage(tagMSG *lpMsg) const DemoMsg dmsg = Demo_Message_Queue.front(); if (dmsg.type == DemoMsgType::Message) { lpMsg->message = dmsg.message; - lpMsg->lParam = dmsg.lParam; lpMsg->wParam = dmsg.wParam; + lpMsg->lParam = dmsg.lParam; gfProgressToNextGameTick = dmsg.progressToNextGameTick; Demo_Message_Queue.pop_front(); return true; @@ -222,8 +222,8 @@ bool FetchMessage(tagMSG *lpMsg) } lpMsg->message = 0; - lpMsg->lParam = 0; lpMsg->wParam = 0; + lpMsg->lParam = 0; return false; } @@ -242,7 +242,7 @@ void RecordMessage(tagMSG *lpMsg) WriteLEFloat(DemoRecording, gfProgressToNextGameTick); WriteLE32(DemoRecording, lpMsg->message); WriteLE32(DemoRecording, lpMsg->wParam); - WriteLE32(DemoRecording, lpMsg->lParam); + WriteLE16(DemoRecording, lpMsg->lParam); } void NotifyGameLoopStart() diff --git a/Source/miniwin/misc_msg.cpp b/Source/miniwin/misc_msg.cpp index af33e6f7f..933882978 100644 --- a/Source/miniwin/misc_msg.cpp +++ b/Source/miniwin/misc_msg.cpp @@ -97,9 +97,9 @@ void FocusOnCharInfo() namespace { -int32_t PositionForMouse(int16_t x, int16_t y) +uint32_t PositionForMouse(int16_t x, int16_t y) { - return (((uint16_t)(y & 0xFFFF)) << 16) | (uint16_t)(x & 0xFFFF); + return (static_cast(y) << 16) | static_cast(x); } bool FalseAvail(const char *name, int value) @@ -235,8 +235,8 @@ bool FetchMessage_Real(tagMSG *lpMsg) } lpMsg->message = 0; - lpMsg->lParam = 0; lpMsg->wParam = 0; + lpMsg->lParam = 0; #ifdef __vita__ HandleTouchEvent(&e, MousePosition); @@ -302,8 +302,8 @@ bool FetchMessage_Real(tagMSG *lpMsg) lpMsg->message = action.send_key.up ? (button == SDL_BUTTON_LEFT ? DVL_WM_LBUTTONUP : DVL_WM_RBUTTONUP) : (button == SDL_BUTTON_RIGHT ? DVL_WM_LBUTTONDOWN : DVL_WM_RBUTTONDOWN); - lpMsg->wParam = 0; - lpMsg->lParam = (static_cast(MousePosition.y) << 16) | static_cast(MousePosition.x); + lpMsg->wParam = (static_cast(MousePosition.y) << 16) | static_cast(MousePosition.x); + lpMsg->lParam = 0; } else { lpMsg->message = action.send_key.up ? DVL_WM_KEYUP : DVL_WM_KEYDOWN; lpMsg->wParam = action.send_key.vk_code; @@ -346,14 +346,14 @@ bool FetchMessage_Real(tagMSG *lpMsg) } break; case SDL_MOUSEMOTION: lpMsg->message = DVL_WM_MOUSEMOVE; - lpMsg->lParam = PositionForMouse(e.motion.x, e.motion.y); - lpMsg->wParam = SDL_GetModState(); + lpMsg->wParam = PositionForMouse(e.motion.x, e.motion.y); + lpMsg->lParam = SDL_GetModState(); if (ControlMode == ControlTypes::KeyboardAndMouse && invflag) InvalidateInventorySlot(); break; case SDL_MOUSEBUTTONDOWN: { - lpMsg->lParam = PositionForMouse(e.button.x, e.button.y); - lpMsg->wParam = SDL_GetModState(); + lpMsg->wParam = PositionForMouse(e.button.x, e.button.y); + lpMsg->lParam = SDL_GetModState(); const int button = e.button.button; switch (button) { case SDL_BUTTON_LEFT: @@ -374,8 +374,8 @@ bool FetchMessage_Real(tagMSG *lpMsg) } } break; case SDL_MOUSEBUTTONUP: { - lpMsg->lParam = PositionForMouse(e.button.x, e.button.y); - lpMsg->wParam = SDL_GetModState(); + lpMsg->wParam = PositionForMouse(e.button.x, e.button.y); + lpMsg->lParam = SDL_GetModState(); const int button = e.button.button; switch (button) { case SDL_BUTTON_LEFT: @@ -510,7 +510,7 @@ void PushMessage(const tagMSG *lpMsg) CurrentEventHandler(lpMsg->message, lpMsg->wParam, lpMsg->lParam); } -void PostMessage(uint32_t type, uint32_t wParam, uint32_t lParam) +void PostMessage(uint32_t type, uint32_t wParam, uint16_t lParam) { message_queue.push_back({ type, wParam, lParam }); } diff --git a/Source/miniwin/misc_msg.h b/Source/miniwin/misc_msg.h index 9f211f9ee..9d7e07d8b 100644 --- a/Source/miniwin/misc_msg.h +++ b/Source/miniwin/misc_msg.h @@ -19,10 +19,10 @@ namespace devilution { struct tagMSG { uint32_t message; uint32_t wParam; - uint32_t lParam; + uint16_t lParam; }; -typedef void (*EventHandler)(uint32_t, uint32_t, uint32_t); +typedef void (*EventHandler)(uint32_t, uint32_t, uint16_t); void SetCursorPos(Point position); void FocusOnCharInfo(); @@ -31,7 +31,7 @@ void SetMouseButtonEvent(SDL_Event &event, uint32_t type, uint8_t button, Point bool FetchMessage(tagMSG *lpMsg); void PushMessage(const tagMSG *lpMsg); -void PostMessage(uint32_t type, uint32_t wParam, uint32_t lParam); +void PostMessage(uint32_t type, uint32_t wParam, uint16_t lParam); void ClearMessageQueue(); // diff --git a/test/fixtures/timedemo/WarriorLevel1to2/demo_0.dmo b/test/fixtures/timedemo/WarriorLevel1to2/demo_0.dmo index 70f31f645..7dd62739d 100644 Binary files a/test/fixtures/timedemo/WarriorLevel1to2/demo_0.dmo and b/test/fixtures/timedemo/WarriorLevel1to2/demo_0.dmo differ