If I use SDL renderer I get this. My display is 2560 pixels wide which is 640*4 and the image appears to be 1/4 of the window width. This combined with the ddraw surface pitch being 2560 pixels suggests to me that it expects the surface to wrap around as it pans left and right. To be clear the same thing happens with the primary surface render except it's not squished.
If I use SDL renderer I get this. My display is 2560 pixels wide which is 640*4 and the image appears to be 1/4 of the window width. This combined with the ddraw surface pitch being 2560 pixels suggests to me that it expects the surface to wrap around as it pans left and right. To clear the same thing happens with the primary surface render except it's not squished.
If I use SDL renderer I get this. My display is 2560 pixels wide which is 640*4 and the image appears to be 1/4 of the window width. This combined with the ddraw surface pitch being 2560 pixels suggests to me that it expects the surface to wrap around as it pans left and right.
SUnMapLS_IP_EBP_12 is a win95 only export. You can use the EXPAND command to extract the executable rather than using the installer but I've attached it for simplicity.
Well, if it's trying to draw to the front buffer then syncing to vblank makes sense but it doesn't work for me either, Possibly a version difference with the copy you have or maybe since I'm using a 144hz display it's syncing to the wrong frequency but setting "wait for frequency" to 60 also doesn't work. Logging shows it never sets the ddraw palette and sync with the gdi palette just has different wrong colors.
Well, if it's trying to draw to the front buffer then syncing to vblank makes sense but it doesn't work for me either, Possibly a version difference with the copy you have or maybe since I'm using a 144hz display it's syncing to the wrong frequency but setting "wait for frequency" to 60 also doesn't work. Logging shows it never sets the ddraw palette and sync gdi palette just has different wrong colors.
It does https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-disableprocesswindowsghosting as an alternative to pumping the message queue which doesn't always work.
Using https://archive.org/details/EccoTheDolphinSega1995 with the default dxwnd profile (except no ghosting otherwise the opening movie hangs) i get the above crash. With yours i still need no ghost but the game runs with a corrupt palette and very weird scrolling. It's version 1.1 according to the about box.
Using https://archive.org/details/EccoTheDolphinSega1995 with the default dxwnd profile (except no ghosting otherwise the opening movie hangs) i get the above crash. With yours i still need no ghost but the game runs with a corrupt palette.
As i said above it's waiting for vblank not setting the palette. Dxwnd does support this but it's checking for the wrong instruction sequence: // this pattern: // start: IN AL,DX ; I/O command // TEST AL,08 // JNZ SHORT start or JZ SHORT start // is often used to sample the video card status and wait for a vSync status. // since the JNZ block is followed by a JZ block removing the IN instruction is not // enough to avoid an endless loop. You have to clear all 3 instructions. but this uses AND AL,8...
As i said above it's waiting for vblank not setting the palette. Dxwnd does support this but it's checking for the wrong instruction sequence: // this pattern: // start: IN AL,DX ; I/O command // TEST AL,08 // JNZ SHORT start or JZ SHORT start // is often used to sample the video card status and wait for a vSync status. // since the JNZ block is followed by a JZ block removing the IN instruction is not // enough to avoid an endless loop. You have to clear all 3 instructions. but this uses AND AL,8...
As i said above it's waiting for vblank not setting the palette. Dxwnd does support this but it's checking for the wrong instruction sequence: // this pattern: // start: IN AL,DX ; I/O command // TEST AL,08 // JNZ SHORT start or JZ SHORT start // is often used to sample the video card status and wait for a vSync status. // since the JNZ block is followed by a JZ block removing the IN instruction is not // enough to avoid an endless loop. You have to clear all 3 instructions. but this uses AND AL,8...
There is a win16 and win32 version on the cdrom. The win16 version tries to start but has issues with window focus. The win32 one directly accesses vga ports. If run (on my computer) without dxwnd it dies with a directdraw error.
There is a win16 and win32 version on the cdrom. The win16 version tries to start but has issues with window focus. The win32 one directly accesses vga ports.
No, bad program (it's waiting for vblank). Edit: I haven't seen it documented anywhere but if you open about, move it so the edge is off the right-bottom corner of the screen, hold ctrl-shift while pressing ok, then hold ctrl-shift again while right clicking on the main window, a level select menu appears.
No, bad program (it's waiting for vblank).
I found the real default.gb3 in the cd image. Game starts properly with this. Annoyingly it's aggressive mouse capture tends to crash explorer. Center on exit seems to help by fooling the game into thinking the mouse is still in the window.
I found the real default.gb3 in the cd image. Game starts properly with this. Annoyingly it's aggressive mouse capture tends to crash explorer.
When I go to new game it just exits. It seems to grab the mouse so clicks are unresponsive everywhere but the computer otherwise seems to be fine. Pressing the windows key breaks it out. Debugging shows it's looking for save\default.gb3 to have ALOB at the start but it has ALAC instead.
It's just doing if(GetDriveTypeA("%cdrom%:/") == 5) if(CFileFind::FindFile("%cdrom%:/"+"B-17.EXE", 0)) goto success; goto fail; https://github.com/Zero-Fanker/MFC42/blob/master/src/FILEFIND.CPP#L60 MFC42 needs to be hooked for FindFirstFileA
It's just doing if(GetDriveTypeA("%cdrom%:/") == 5) if(CFileFind::FindFile("%cdrom%:/"+"B-17.EXE, 0)) goto success; goto fail; https://github.com/Zero-Fanker/MFC42/blob/master/src/FILEFIND.CPP#L60 MFC42 needs to be hooked for FindFirstFileA
Another Director game. Anyway, the problem here is that WM_ACTIVATE is being sent before CreateWindow returns and the program isn't ready for it.
Another Director game. Anyway, the problem here is that WM_ACTIVATE is being sent before CreateWindow return and the program isn't ready for it.
i386: qword ptr also needs the fix
i386: fix softfloat with gcc 15 optimizer
i386: include the 486
i386: adjust cs for ppro+
i386: use the correct bits for dpl
i386: fix smm
There's no other visible window for me.
Using the demo which has the same issue, I see a window called Innerloop. user32.CreateWindowExA: class="Innerloop" wname="Innerloop" pos=(80,60) size=(640,480) Style=0x96080000(WS_CLIPCHILDREN+CLIPSIBLINGS+POPUP+SYSMENU+VISIBLE) ExStyle=0(WS_EX_RIGHTSCROLLBAR) hWndParent=0 hMenu=0 depth=0 user32.CreateWindowExA: DEBUG fullscreen=0 mainwin=0 screen=(800,600) user32.CreateWindowExA: ActiveMovie=0 This seems a bit weird. IDirect3DDevice8::GetDisplayMode: size=(2560x1440) RefreshRate=60 Format=22 IDirect3DDevice8::GetDisplayMode:...
Using the demo which has the same issue, I see a window called Innerloop. user32.CreateWindowExA: class="Innerloop" wname="Innerloop" pos=(80,60) size=(640,480) Style=0x96080000(WS_CLIPCHILDREN+CLIPSIBLINGS+POPUP+SYSMENU+VISIBLE) ExStyle=0(WS_EX_RIGHTSCROLLBAR) hWndParent=0 hMenu=0 depth=0 user32.CreateWindowExA: DEBUG fullscreen=0 mainwin=0 screen=(800,600) user32.CreateWindowExA: ActiveMovie=0
Seems to work perfectly.
Have you looked into https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-disableprocesswindowsghosting ? Sounds maybe too good to be true? Does seem to work though with a small amount of experimentation.
Have you looked into https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-disableprocesswindowsghosting ? Sounds maybe too good to be true?
Have you looked into https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-disableprocesswindowsghosting ?
It still hangs at the course selection if you stop moving the mouse but it now starts working again after about 30 sec. The most looped action is ironically PeekMessageA but filter min and max are both WM_MOUSEMOVE.
It still hangs at the course selection if you stop moving the mouse but it now starts working again after about 30 sec.
The hang is weird and seems to be caused by the windows hang detection. Windows hides the real window when it detects a hang. If I move the ghost window, show the real window and give it focus then it responds correctly. The dxwnd message pump doesn't help because it is pumping messages but only checking for WM_MOUSEMOVE.
The hang is weird and seems to be caused by the windows hang detection. Windows hides the real window when it detects a hang. If move the ghost, show the real window and give it focus then it responds correctly. The dxwnd message pump doesn't help because it is pumping messages but only checking for WM_MOUSEMOVE.
So, the flag is now useless though I should try to understand why it causes this effect. # Time of Day Thread Module API Return Value Error Duration 41 6:50:21.427 PM 1 jgld.dll CreateScalableFontResourceA ( 0, "manu3_.fot", "Z:\:\Users\crazy\Downloads\Sid-Meiers-SimGolf_Win_EN_RIP-Version\Sid Meier's SimGolf\manu3_.ttf", NULL ) FALSE 87 = The parameter is incorrect. 0.0000486 42 6:50:21.427 PM 1 gdi32full.dll CreateScalableFontResourceW ( 0, "manu3_.fot", "Z:\:\Users\crazy\Downloads\Sid-Meiers-SimGolf_Win_EN_RIP-Version\Sid...
So, the flag is now useless though I should try to understand why it causes this effect. # Time of Day Thread Module API Return Value Error Duration 41 6:50:21.427 PM 1 jgld.dll CreateScalableFontResourceA ( 0, "manu3_.fot", "Z:\:\Users\crazy\Downloads\Sid-Meiers-SimGolf_Win_EN_RIP-Version\Sid Meier's SimGolf\manu3_.ttf", NULL ) FALSE 87 = The parameter is incorrect. 0.0000486 42 6:50:21.427 PM 1 gdi32full.dll CreateScalableFontResourceW ( 0, "manu3_.fot", "Z:\:\Users\crazy\Downloads\Sid-Meiers-SimGolf_Win_EN_RIP-Version\Sid...
2) Curiously, the text in the menu panels has a y offset about the size of a window titlebar. I initially thought that this was caused by the titlebar, but then I noted that the same offset is present also when running the game in fullscreen or modal style. The problem does not exist running the game alone, so it must depend on DxWnd. This problem is fixed for me by disabling Fake HD so the correct fonts get loaded. Something annoying I see though is when I close the window using the X button it...
2) Curiously, the text in the menu panels has a y offset about the size of a window titlebar. I initially thought that this was caused by the titlebar, but then I noted that the same offset is present also when running the game in fullscreen or modal style. The problem does not exist running the game alone, so it must depend on DxWnd. This problem is fixed for me by disabling Fake HD so the correct fonts get loaded. Something annoying I see though is when I close the window using the X button it...
Hook opengl doesn't work because it also has the IsRealDesktop problem although when opengl renders to a bitmap open hooking probably isn't needed anyway. Edit: If Fake HD is enabled in the I/O tab and you are using the rip version, disable it to fix the fonts.
Hook opengl doesn't work because it also has the IsRealDesktop problem although when opengl renders to a bitmap open hooking probably isn't needed anyway.
Just disable hook opengl and it works. The DC remapping was the only problem. The popup settings menu doesn't appear though. Edit: Menu is fixed with "Position Mouse Processing".
Just disable hook opengl and it works. The DC remapping was the only problem. The popup settings menu doesn't appear though. Edit: Menu is fix with "Position Mouse Processing".
Just disable hook opengl and it works. The DC remapping was the only problem. The popup settings menu doesn't appear though.
Just disable hook opengl and it works. The popup settings menu doesn't appear though.
Just disable hook opengl and it works.
Post a build with these changes?
I've found a bug in dxwChoosePixelFormat and dxwSetPixelFormat. Simgolf passes a memory dc to them which then if(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))){ returns 0 as it's not a window dc. IsRealDesktop returns TRUE as it treats 0 as the desktop dc. The memory dc is then incorrectly remapped to the game window dc.
Using bear https://the-sz.com/products/bear/ I examined the memory bitmaps while the game was running without dxwnd and the only interesting ones are attached. The bitmap with the sprites is a dib section so the game isn't using bitblt to draw them (there are no bitmaps with the sprites in them either), it's writing directly to the dib section after copying the terrain bitmap into it.
Using bear https://the-sz.com/products/bear/ I examined the memory bitmaps while the game was running without dxwnd and the only interesting ones are attached. The bitmap with the sprites is a dib section so the game isn't using bitblt to draw them, it's writing directly to the dib section after copying the terrain bitmap into it.
Using bear https://the-sz.com/products/bear/ I examined the memory bitmaps while the game was running without dxwnd and the only interesting ones are attached. The bitmap with the sprites is a dib section so the game isn't using bitblt to draw them, it's writing directly to the dib section after copying the terrain bitmap into it.
Using bear https://the-sz.com/products/bear/ I examined the memory bitmaps while the game was running without dxwnd and the only interesting ones are attached. The bitmap with the sprites is a dib section so the game isn't using bitblt to draw them, it's writing directly to the dib section after copying the terrain bitmap into it.
Winevdm does nothing with clip regions, they are passed directly to win32.
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing it to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen. I'm...
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing it to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen. I'm...
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing it to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen. I'm...
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing it to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen. I'm...
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing it to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen. I'm...
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing it to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen.
I think what happening is that opengl isn't bitblting to the screen but instead to a bitmap as PFD_DRAW_TO_BITMAP is set in the call to SetPixelFormat. The gl output bitmap is fed to jgld.dll which combines it with the sprites then drawn to the screen. Dxwnd is overriding the pixel format when wglCreateContext is called and changing to PFD_DRAW_TO_WINDOW. Since the opengl output is sent to the screen jgld.dll is getting a blank bitmap that it then puts the sprites on and draws to the screen.
Terrain.dll tries to set the pixel format to 16bpp but when it calls wglCreateContext it returns error 0x2000 ERROR_INVALID_PIXEL_FORMAT which makes sense since windows 11 only supports 32bpp. Edit: I was wrong, it does work fullscreen. Edit2: I wonder if in fullscreen opengl is being forced to use software rendering somehow.
Terrain.dll tries to set the pixel format to 16bpp but when it calls wglCreateContext it returns error 0x2000 ERROR_INVALID_PIXEL_FORMAT which makes sense since windows 11 only supports 32bpp. Edit: I was wrong, it does work fullscreen.
Terrain.dll tries to set the pixel format to 16bpp but when it calls wglCreateContext it returns error 0x2000 ERROR_INVALID_PIXEL_FORMAT which makes sense since windows 11 only supports 32bpp.
Game seems to hang on my computer very easily. When I do get in game I get an error about "Unable to create GL rendering context", I don't see that mentioned anywhere so it might just be a problem here. Anyway, once running I do get the same problem with black grass. Edit: Wait this happens even when run fullscreen. Looks like it's completely broken on my computer.
Game seems to hang on my computer very easily. When I do get in game I get an error about "Unable to create GL rendering context", I don't see that mentioned anywhere so it might just be a problem here. Anyway, once running I do get the same problem with black grass.
Wine supports dsound and d3d 2 but it's not guaranteed to be 100% compatible, just good enough so most software runs. Dxwnds hooks might expect things that wine doesn't implement.
Wine supports dsound and d3d 2 but it's not guaranteed to be 100% compatible, just good enough so most software runs. Dxwnds hooks might do things that wine doesn't implement.
1) the hook seems successful but in reality it is not and the wrapper routine is bypassed Maybe with IAT redirection but don't how this is possible with Hot Patch. 2) the hook had success but it took place after that the window was created, just too late. Don't see how this is possible with detours. It could be interesting to see how this Win8.1 Entony said it happens with windows 10 also. Only ideas I can think of is joytokey or textractor are interfering some how if they are still running or this...
hiscore.dat: updates
I think that more than user32 is affected as there are a bunch of calls missing from the logs. Try setting hook mode to hot patch.
I also see the calls to CreateWindowExA but also with "Don't notify on task switch" it crashes after restoring the window.
I also see the calls to CreateWindowExA but with "Don't notify on task switch" it crashes after restoring the window.
bitc=640 A bitdepth of 640 isn't going to work.
Your log shows it returns 0xffffffff which should be correct as dummy doesn't exist. So the game still doesn't work?
Dxwnd is truncating (DWORD)-1 to (WORD)-1 and winevdm expects the former. eax=00000003 ebx=00000000 ecx=00000000 edx=00000000 esi=80000000 edi=00000000 eip=761b78d8 esp=03e6e23c ebp=03e6e260 iopl=0 nv up ei ng nz na pe cy cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000287 KERNEL32!_lopen+0x38: 761b78d8 ff15f8121d76 call dword ptr [KERNEL32!_imp__CreateFileA (761d12f8)] ds:002b:761d12f8={KERNELBASE!CreateFileA (75f06470)} 1:014> eax=ffffffff ebx=00000000 ecx=84307f0b edx=00000000 esi=80000000...
You should add +int21,+msg to the WINEDEBUG env var as win16 programs heavily use dos int 21h syscalls and window messages are also very useful to see. Anyway, here's the problem. 9824:trace:int21:DOSVM_Int21Handler AX=19bc BX=0000 CX=d8b4 DX=1907 SI=d8b4 DI=1907 DS=1c17 ES=1907 EFL=00003282 9824:trace:int21:DOSVM_Int21Handler GET CURRENT DRIVE -> C: 9824:trace:int21:DOSVM_Int21Handler returning: AX=1902 BX=0000 CX=d8b4 DX=1907 SI=d8b4 DI=1907 DS=1c17 ES=1907 EFL=00003282 9824:trace:int21:DOSVM_Int21Handler...
A debug trace when it fails might show the problem.
This runs okay for me. Is there some specific option you are using?
At line 261 or GameIcons.cpp if (cx2 && cy2) pIconId[++i] = LookupIconIdFromDirectoryEx(pCIDir, TRUE, cx2, cy2, flags); pIconId is best so if the file has more than 1 icon it will overwrite the next bytes on the stack.
At line 261 or GameIcons.cpp if (cx2 && cy2) pIconId[++i] = LookupIconIdFromDirectoryEx(pCIDir, TRUE, cx2, cy2, flags); pIconId is best so if the file has more than 1 icon it will overwrite the next bytes on the that.
Can you build it with pdb symbols?
You'd need to set a breakpoint after return and set eax to 0. I don't know if ap monitor can do that, you might need a real debugger.
346c:Call VER.6: GETFILEVERSIONINFOSIZE(12070eee "USER.EXE",1207:53dc) ret=11ff:68ba ds=1207 346c:Ret VER.6: GETFILEVERSIONINFOSIZE() retval=000001c0 ret=11ff:68ba ds=1207 346c:Call KERNEL.15: GLOBALALLOC(0042,000001c0) ret=11ff:68d5 ds=1207 AX=01c0 BX=171a CX=0000 DX=01c0 SI=00d0 DI=5960 ES=1207 EFL=00003216 346c:Ret KERNEL.15: GLOBALALLOC() retval=none ret=11ff:68d5 ds=1207 AX=12d6 BX=12d6 CX=12d6 DX=01c0 SI=00d0 DI=5960 ES=0000 EFL=00003216 346c:Call KERNEL.18: GLOBALLOCK(12d6) ret=11ff:68db ds=1207...
https://github.com/otya128/winevdm/issues/1510
This has the same problem in xp/ntvdm with 32bpp so it's a color mode problem. The problem is different but still wrong with 256 compat mode.
I can't explain why my config doesn't work for you but making GetAttachedSurface from dxwnd return NULL eventually passes the hang starting a mission. I then fails with a "Could not aquire analogue device" from https://github.com/gondur/mig_src/blob/master/SRC/INPUT/ANALOGUE.CPP#L379 .
I can't explain why my config doesn't work for you but making GetAttachedSurface from dxwnd return NULL eventually passes the hang starting a mission. I then fails with a "'Could not aquire analogue device" from https://github.com/gondur/mig_src/blob/master/SRC/INPUT/ANALOGUE.CPP#L379 .
v5x: clear m_brc_enable in constructor
As I said above, your config did give the error. Changing the DirectX render to primary surface made it go away. If I do that then there is a resolution list in the preferences. A log with your config shows that the only resolutions returned by EnumModesCallback are 32bpp ones that the game rejects.
Okay, this one does give "failed to find ddraw modes" error. Here's mine which doesn't. To fix the error set DX renderer to primary surface and to fix the preferences set window initial size in the main tab to the same as the initial screen size in the video tab.
Okay, this one does give "failed to find ddraw modes" error. Here's mine which doesn't.
Okay, this one does give "failed to find ddraw modes" error. Here's mine which doesn't.
The error comes from https://github.com/gondur/mig_src/blob/master/SRC/HARDWARE/DDRWINIT.CPP#L686 after checking for an lpdd2 object which is created in the constructor at https://github.com/gondur/mig_src/blob/master/SRC/HARDWARE/WIN3D.CPP#L1572 . Again on my computer this doesn't happen which suggests some display driver difference.
If i set Inital res to 1024x768 in the video tab the preferences pages look much better. I also see the bad pixel format. IDirectDraw2::GetDisplayMode: lpdd=0x47d2a28 lpddsd=0x19f9f8 dxwnd.GetPixFmt: PixelFormat flags=0x40(DDPF_RGB) BPP=1024 RGB=(0xf800,0x7e0,0x1f) IDirectDraw2::GetDisplayMode: returning size=(1024x768) PixelFormat flags=0x40(DDPF_RGB) BPP=1024 RGB=(0xf800,0x7e0,0x1f)
If i set Inital res to 1024x768 in the video tab the preferences pages look much better.