http://bugs.winehq.org/show_bug.cgi?id=9191
Summary: Roller Coaster Tycoon Will not switch to fullscreen (EnumDisplayModes bug?) Product: Wine Version: 0.9.42. Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: wine-directx-ddraw AssignedTo: wine-bugs@winehq.org ReportedBy: phillipezolt@gmail.com
In roller coaster tycoon, when I try to switch to full-screen mode 640x480 (from windowed), it won't work. The application stays in windowed mode and turns black. (I can get the window back by moving various sub-windows around.)
'xrandr -s 640x480' works so it isn't a permission problem. Also, another version of roller coaster tycoon (Rct2) works just fine.
This used to work with: 1) FC6 2) Wine (v.????) 3) Original Roller Coaster Tycoon
But then I upgraded to: 1) FC7, 2) wine 0.9.42, 3) RCT + Corkscreen Follies V. 1.20.013
And things don't work. I reverted to wine-0.9.36-2.fc7, and that also doesn't work.
I traced the ddraw code, and I have a theory (which I can't yet prove) about why it is failing:
On windows, EnumDisplayModes returns the lower bitdepth versions of a resolution before the high bitdepth versions. When running on wine the 32-bit version is returned first. On wine, the application sees that it has 32-bit bitdepth version of the resolution and (erroneously) decides that means it already missed the 8-bit version.
Here's why I say that:
Looking at the trace these are the last few lines after issuing the request, the application terminates the enumeration after it sees a 640x480@32, and never gets to the 640x480@8:
trace:ddraw:IDirectDrawImpl_EnumDisplayModes (0x16e3e8)->((nil),0x32fd10,0x60fd5120): Relay .....
trace:ddraw:IDirectDrawImpl_EnumDisplayModes Enumerating 800x600@32 trace:ddraw:PixelFormat_WineD3DtoDD Converting WINED3DFORMAT 22 to DDRAW trace:ddraw:PixelFormat_WineD3DtoDD Returning: ( DDPF_RGB , RGB bits: 32, R 00ff0000 G 0000ff00 B 000000ff) trace:ddraw:IDirectDrawImpl_EnumDisplayModes Enumerating 640x480@32 trace:ddraw:IDirectDrawImpl_EnumDisplayModes Application asked to terminate the enumeration
....
If I look at the whole trace, EARLIER in the execution that application does iterate through all of the modes, and the 640x480@8 modes show up. However, every attempt at full screen stops with 640x480@32.
BTW. I looked at the wine code, and it wasn't immediately obvious how to reorder things so that this is sorted. Suggestions welcome.