mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 15:37:55 -05:00
Increased ISLE
accuracy (#319)
* Improve WndProc accuracy * Another accuracy fix for `WndProc`
This commit is contained in:
parent
7a0558f99d
commit
02aaf1533f
1 changed files with 37 additions and 37 deletions
|
@ -24,6 +24,10 @@
|
|||
|
||||
#include <dsound.h>
|
||||
|
||||
// Might be static functions of IsleApp
|
||||
BOOL FindExistingInstance(void);
|
||||
BOOL StartDirectSound(void);
|
||||
|
||||
// FUNCTION: ISLE 0x401000
|
||||
IsleApp::IsleApp()
|
||||
{
|
||||
|
@ -169,9 +173,6 @@ void IsleApp::SetupVideoFlags(
|
|||
}
|
||||
}
|
||||
|
||||
BOOL FindExistingInstance(void);
|
||||
BOOL StartDirectSound(void);
|
||||
|
||||
// FUNCTION: ISLE 0x401610
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
||||
{
|
||||
|
@ -389,52 +390,46 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||
case WM_DISPLAYCHANGE:
|
||||
if (g_isle && VideoManager() && g_isle->m_fullScreen && VideoManager()->GetDirect3D() &&
|
||||
VideoManager()->GetDirect3D()->GetDeviceModeFinder()) {
|
||||
int targetWidth = LOWORD(lParam);
|
||||
int targetHeight = HIWORD(lParam);
|
||||
int targetDepth = wParam;
|
||||
if (g_isle && VideoManager() && g_isle->m_fullScreen && VideoManager()->GetDirect3D()) {
|
||||
if (VideoManager()->GetDirect3D()->GetDeviceModeFinder()) {
|
||||
int targetDepth = wParam;
|
||||
int targetWidth = LOWORD(lParam);
|
||||
int targetHeight = HIWORD(lParam);
|
||||
|
||||
if (g_waitingForTargetDepth) {
|
||||
g_waitingForTargetDepth = 0;
|
||||
g_targetDepth = targetDepth;
|
||||
}
|
||||
else {
|
||||
BOOL valid = FALSE;
|
||||
if (targetWidth == g_targetWidth && targetHeight == g_targetHeight && g_targetDepth == targetDepth) {
|
||||
valid = TRUE;
|
||||
if (g_waitingForTargetDepth) {
|
||||
g_waitingForTargetDepth = 0;
|
||||
g_targetDepth = targetDepth;
|
||||
}
|
||||
else {
|
||||
BOOL valid = FALSE;
|
||||
|
||||
if (g_rmDisabled) {
|
||||
if (valid) {
|
||||
g_reqEnableRMDevice = 1;
|
||||
if (g_targetWidth == targetWidth && g_targetHeight == targetHeight &&
|
||||
g_targetDepth == targetDepth) {
|
||||
valid = TRUE;
|
||||
}
|
||||
|
||||
if (g_rmDisabled) {
|
||||
if (valid) {
|
||||
g_reqEnableRMDevice = 1;
|
||||
}
|
||||
}
|
||||
else if (!valid) {
|
||||
g_rmDisabled = 1;
|
||||
Lego()->StartTimer();
|
||||
VideoManager()->DisableRMDevice();
|
||||
}
|
||||
}
|
||||
else if (!valid) {
|
||||
g_rmDisabled = 1;
|
||||
Lego()->StartTimer();
|
||||
VideoManager()->DisableRMDevice();
|
||||
}
|
||||
}
|
||||
}
|
||||
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||
case WM_SETCURSOR:
|
||||
if (g_isle) {
|
||||
HCURSOR hCursor = g_isle->m_cursorCurrent;
|
||||
if (hCursor == g_isle->m_cursorBusy || hCursor == g_isle->m_cursorNo || !hCursor) {
|
||||
SetCursor(hCursor);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_KEYDOWN:
|
||||
// While this probably should be (HIWORD(lParam) & KF_REPEAT), this seems
|
||||
// to be what the assembly is actually doing
|
||||
if (lParam & (KF_REPEAT << 16)) {
|
||||
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
keyCode = wParam;
|
||||
type = c_notificationKeyPress;
|
||||
keyCode = wParam;
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
g_mousemoved = 1;
|
||||
|
@ -457,6 +452,13 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_SETCURSOR:
|
||||
if (g_isle && (g_isle->m_cursorCurrent == g_isle->m_cursorBusy ||
|
||||
g_isle->m_cursorCurrent == g_isle->m_cursorNo || !g_isle->m_cursorCurrent)) {
|
||||
SetCursor(g_isle->m_cursorCurrent);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
@ -812,10 +814,8 @@ inline void IsleApp::Tick(BOOL sleepIfNotNextFrame)
|
|||
}
|
||||
this->m_gameStarted = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (sleepIfNotNextFrame != 0)
|
||||
else if (sleepIfNotNextFrame != 0)
|
||||
Sleep(0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue