[Bug 9154] Balls of Steel demo v1.3 fails to start a game (ddraw7_WaitForVerticalBlank stub too fast, needs real implementation)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun May 4 14:35:34 CDT 2014


http://bugs.winehq.org/show_bug.cgi?id=9154

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |NEW
                 CC|                            |focht at gmx.net
            Summary|Balls of Steel fails to     |Balls of Steel demo v1.3
                   |start                       |fails to start a game
                   |                            |(ddraw7_WaitForVerticalBlan
                   |                            |k stub too fast, needs real
                   |                            |implementation)

--- Comment #23 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

confirming.

You need to start the game in virtual desktop mode (wants 8 bpp).
This also allows to see the error message box.

Seems this is an old DirectDraw game.

Relevant part of trace log:

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Pinball Wizards/Balls of Steel DEMO
v1.3

$ WINEDEBUG=+tid,+seh,+relay,+ddraw wine ./bos.exe >>log.txt 2>&1

0029:Call KERNEL32.CreateProcessA(00000000,008499d0 "C:\\Program Files\\Pinball
Wizards\\Balls of Steel DEMO
v1.3\\darkside.DDP",00000000,00000000,00000000,00000000,00000000,00849a24
"C:\\Program Files\\Pinball Wizards\\Balls of Steel DEMO
v1.3",0033f858,0033f848) ret=00455988
...
0039:Call KERNEL32.__wine_kernel_init() ret=7bc5a402
0029:Ret  KERNEL32.CreateProcessA() retval=00000001 ret=00455988 
...
...
0039:Call advapi32.RegCreateKeyExA(80000002,003b1be0 "Software\\Wildfire
Studios\\Balls of Steel\\Display
profile",00000000,00478484,00000000,000f003f,00000000,0033f7f4,0033f7dc)
ret=0040bd33
0039:Ret  advapi32.RegCreateKeyExA() retval=00000000 ret=0040bd33
0039:Call advapi32.RegQueryValueExA(000000c4,003b1c24 "Refresh
rate",00000000,0033f7d8,0033f6ac,0033f7d4) ret=0040be3d
0039:Ret  advapi32.RegQueryValueExA() retval=00000002 ret=0040be3d
0039:Call KERNEL32.SetThreadPriority(fffffffe,0000000f) ret=00433152
0039:Ret  KERNEL32.SetThreadPriority() retval=00000001 ret=00433152
0039:trace:ddraw:ddraw2_WaitForVerticalBlank iface 0x13f210, flags 0x1, event
(nil).
0039:trace:ddraw:ddraw7_WaitForVerticalBlank iface 0x13f208, flags 0x1, event
(nil).
0039:fixme:ddraw:ddraw7_WaitForVerticalBlank iface 0x13f208, flags 0x1, event
(nil) stub! 
0039:Call KERNEL32.GetTickCount() ret=0043315e
0039:Ret  KERNEL32.GetTickCount() retval=01dac739 ret=0043315e
0039:Call KERNEL32.GetTickCount() ret=00433167
0039:Ret  KERNEL32.GetTickCount() retval=01dac739 ret=00433167
0039:Call KERNEL32.GetTickCount() ret=00433170 
...
0039:Call KERNEL32.SetThreadPriority(fffffffe,00000000) ret=004331a1
0039:Ret  KERNEL32.SetThreadPriority() retval=00000001 ret=004331a1
0039:Call user32.GetDC(000100f0) ret=004331fb
0039:Ret  user32.GetDC() retval=00020042 ret=004331fb
0039:Call gdi32.SetBkColor(00020042,00000000) ret=00433207
0039:Ret  gdi32.SetBkColor() retval=00ffffff ret=00433207
0039:Call gdi32.SetTextColor(00020042,00ffffff) ret=00433214
0039:Ret  gdi32.SetTextColor() retval=00000000 ret=00433214
0039:Call gdi32.TextOutA(00020042,00000000,00000000,0047a8fe "Profiling
display, please wait a moment...",0000002a) ret=00433238
0039:Ret  gdi32.TextOutA() retval=00000001 ret=00433238
0039:Call user32.ReleaseDC(000100f0,00020042) ret=00433247
0039:Ret  user32.ReleaseDC() retval=00000001 ret=00433247
0039:Call KERNEL32.SetThreadPriority(fffffffe,0000000f) ret=00433263
0039:Ret  KERNEL32.SetThreadPriority() retval=00000001 ret=00433263
0039:trace:ddraw:ddraw2_WaitForVerticalBlank iface 0x13f210, flags 0x1, event
(nil). 
...
0039:Call KERNEL32.GetTickCount() ret=004332b1
0039:Ret  KERNEL32.GetTickCount() retval=01dad067 ret=004332b1
0039:Call KERNEL32.SetThreadPriority(fffffffe,00000000) ret=004332c4
0039:Ret  KERNEL32.SetThreadPriority() retval=00000001 ret=004332c4
0039:Call advapi32.RegCloseKey(00000080) ret=0040bd54
0039:Ret  advapi32.RegCloseKey() retval=00000000 ret=0040bd54
0039:Call advapi32.RegCloseKey(0000007c) ret=0040bd54
0039:Ret  advapi32.RegCloseKey() retval=00000000 ret=0040bd54
0039:Call user32.DestroyWindow(00010124) ret=00411fc7 
...
0039:Call user32.MessageBoxA(00000000,004928f8 "Couldn't determine the refresh
rate of the display\n",00478a8e "",00012030) ret=00412e52 
--- snip ---

Looks like some stop-watch approach using DirectDraw's "WaitForVerticalBlank".

The first timeGetTime() calls (seen as GetTickCount() in log) are probably to
stabilize measurement.

The game code uses a specific number of
ddraw2_WaitForVerticalBlank()/ddraw7_WaitForVerticalBlank() calls = "x" full
refreshs to calculate vertical sync frequency using stop-watch.

Since ddraw7_WaitForVerticalBlank() is a stub it's probably too fast :)

$ sha1sum bossw13.exe 
7fb8de385592dd70cedb8102726c50c3602aa3fa  bossw13.exe

$ du -sh bossw13.exe 
13M    bossw13.exe

$ wine --version
wine-1.7.18

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list