[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