Re: [DInput] Fix 'peek' code for mouse (S3 problem)
Am Samstag, 7. Mai 2005 20:46 schrieb Lionel Ulmer: I just noticed that S3 has a registry setting called GDIMouse. This setting is reflected by the use colored mouse pointer(if possible) / use monochrome mouse pointer settings. (Benutze farbigen Mauszeiger(wenn möglich) and Benutze monochrimen Mauszeiger in my German version). Changing this Setting has no effect on S3 in Wine. I suppose S3 fails to draw its own mouse pointer in Wine and falls back to the GDI one. In that case, you need to do a +dinput,+cursor,+ddraw,+event trace to see if it puts DInput in 'EXCLUSIVE' mode and also if there are no cursor calls once the game starts (as there is no need to change the GDI cursor if the game is using its own). Well I've attached another log if you're interested, but I looked at it and S3 still puts Dinput in NONEXCLUSIVE mode. The ddraw mouse pointer causes a Blue Screen of Death on my brothers Notebook(win2k), so I'd consider it somewhat broken. I just installed S3 in qemu 0.7.0 + win95, it doesn't bail out with a illegal instruction any more, but the copy protection seems to be broken, the game can't find the CD. Stefan s3.out.gz Description: GNU Zip compressed data
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
It doesn't look like the normal X cursor. S3 changes the cursor the same way in Wine as it does on Windows, but I think, appart of it's look that it's the normal X cursor / the normal Windows GDI cursor. trace:dinput:SysMouseAImpl_SetCooperativeLevel (this=0x77c55f18,0x0008004c,0x0006) trace:dinput:SysMouseAImpl_SetCooperativeLevel cooperative level : DISCL_FOREGROUND DISCL_NONEXCLUSIVE ---^ And this means that the mouse cursor will NOT be hidden by DInput. So S3 really uses the standard GDI cursor at the same time than DInput. This means that one (hacky) way to fix your issue would be to disable mouse warping as soon as 'NONEXCLUSIVE' is given AND that the application did not hide the mouse cursor itself. After, one just needs to hope the application did not resort to setting an 'empty' mouse cursor :-) I wanted first to work on the real fix but as no-one answered my mail on the XOrg list yet, I will maybe do the 'hacky' patch described above waiting for things to move on the X11 side. I don't know if this Demo works with Wine. The original S3 does a lot of checks on system dlls and such, which causes the game to refuse to run on Windows XP and Wine. Bluebyte has published a modified s3.exe which makes the game start on Windows 2K, Windows XP and (as a side effect) with Wine. I don't know how the demo behaves. Nope it does not work in Wine and neither does it on WinXP. But it works fine in Win98 + QEMU :-) Lionel -- Lionel Ulmer - http://www.bbrox.org/
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
trace:dinput:SysMouseAImpl_SetCooperativeLevel (this=0x77c55f18,0x0008004c,0x0006) trace:dinput:SysMouseAImpl_SetCooperativeLevel cooperative level : DISCL_FOREGROUND DISCL_NONEXCLUSIVE ---^ And this means that the mouse cursor will NOT be hidden by DInput. So S3 really uses the standard GDI cursor at the same time than DInput. This means that one (hacky) way to fix your issue would be to disable mouse warping as soon as 'NONEXCLUSIVE' is given AND that the application did not hide the mouse cursor itself. After, one just needs to hope the application did not resort to setting an 'empty' mouse cursor :-) I wanted first to work on the real fix but as no-one answered my mail on the XOrg list yet, I will maybe do the 'hacky' patch described above waiting for things to move on the X11 side. Well, now we know at least what's going wrong. I don't know if this Demo works with Wine. The original S3 does a lot of checks on system dlls and such, which causes the game to refuse to run on Windows XP and Wine. Bluebyte has published a modified s3.exe which makes the game start on Windows 2K, Windows XP and (as a side effect) with Wine. I don't know how the demo behaves. Nope it does not work in Wine and neither does it on WinXP. But it works fine in Win98 + QEMU :-) Interesting. The full version didn't work for me.(Win95 + qemu and WinXP + Qemu). What qemu version do you use? Many thanks for your help so far. Stefan
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
Am Samstag, 7. Mai 2005 19:30 schrieb Lionel Ulmer: It doesn't look like the normal X cursor. S3 changes the cursor the same way in Wine as it does on Windows, but I think, appart of it's look that it's the normal X cursor / the normal Windows GDI cursor. trace:dinput:SysMouseAImpl_SetCooperativeLevel (this=0x77c55f18,0x0008004c,0x0006) trace:dinput:SysMouseAImpl_SetCooperativeLevel cooperative level : DISCL_FOREGROUND DISCL_NONEXCLUSIVE ---^ And this means that the mouse cursor will NOT be hidden by DInput. So S3 really uses the standard GDI cursor at the same time than DInput. Just an update: I just noticed that S3 has a registry setting called GDIMouse. This setting is reflected by the use colored mouse pointer(if possible) / use monochrome mouse pointer settings. (Benutze farbigen Mauszeiger(wenn möglich) and Benutze monochrimen Mauszeiger in my German version). Changing this Setting has no effect on S3 in Wine. I suppose S3 fails to draw its own mouse pointer in Wine and falls back to the GDI one. I don't know why I didn't notice this earlier
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
Interesting. The full version didn't work for me.(Win95 + qemu and WinXP + Qemu). What qemu version do you use? Well, I use a REALLY old QEMU version from CVS (my binary is from July 2004 :-) ). It works fine for my images so I never bothered to upgrade since then. Lionel -- Lionel Ulmer - http://www.bbrox.org/
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
I just noticed that S3 has a registry setting called GDIMouse. This setting is reflected by the use colored mouse pointer(if possible) / use monochrome mouse pointer settings. (Benutze farbigen Mauszeiger(wenn möglich) and Benutze monochrimen Mauszeiger in my German version). Changing this Setting has no effect on S3 in Wine. I suppose S3 fails to draw its own mouse pointer in Wine and falls back to the GDI one. In that case, you need to do a +dinput,+cursor,+ddraw,+event trace to see if it puts DInput in 'EXCLUSIVE' mode and also if there are no cursor calls once the game starts (as there is no need to change the GDI cursor if the game is using its own). Lionel -- Lionel Ulmer - http://www.bbrox.org/
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
Am Mittwoch, 4. Mai 2005 20:44 schrieb Lionel Ulmer: This should fix the mouse issue in S3. Lionel Changelog: - do not flush the buffer when the application only wants to peek the number of elements in the queue - trace the GetDeviceState values before they are reset No, saidly, it doesn't. I have attached a +dinput log again. Stefan s3.out.gz Description: GNU Zip compressed data
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
On Thu, May 05, 2005 at 10:42:55AM +, Stefan Dösinger wrote: No, saidly, it doesn't. I have attached a +dinput log again. This is really strange as the behaviour of DInput seems fine in my log. Could you send me another log with the attached patch ? By the way, what exactly is the issue ? The in-game cursor not working or having still the X cursor displayed which is continuously warping back to the middle of the screen ? Lionel PS: if anyone knows where I could download the S3 demo, I would be happy to test on my box. -- Lionel Ulmer - http://www.bbrox.org/ Only in dlls/dinput: .#mouse.c.1.21 Common subdirectories: ../wine_base/dlls/dinput/CVS and dlls/dinput/CVS Only in dlls/dinput: Makefile Only in dlls/dinput: data_formats.o Only in dlls/dinput: device.o Only in dlls/dinput: dinput.dll.dbg.c Only in dlls/dinput: dinput.dll.dbg.o Only in dlls/dinput: dinput.dll.so Only in dlls/dinput: dinput.spec.def Only in dlls/dinput: dinput_main.o Only in dlls/dinput: joystick_linux.o Only in dlls/dinput: joystick_linuxinput.o Only in dlls/dinput: keyboard.o diff -u ../wine_base/dlls/dinput/mouse.c dlls/dinput/mouse.c --- ../wine_base/dlls/dinput/mouse.cThu May 5 11:23:20 2005 +++ dlls/dinput/mouse.c Thu May 5 11:34:02 2005 @@ -770,12 +770,19 @@ } if (len) - TRACE(Application retrieving %ld event(s).\n, len); + TRACE(Application retrieving %ld event(s):\n, len); *entries = 0; nqtail = This-queue_tail; while (len) { /* Copy the buffered data into the application queue */ + TRACE( - queuing Offs:%2ld Data:%5ld TS:%8ld Seq:%8ld at address %p from queue tail %4d\n, + (This-data_queue)-dwOfs, + (This-data_queue)-dwData, + (This-data_queue)-dwTimeStamp, + (This-data_queue)-dwSequence, + (char *)dod + *entries * dodsize, + nqtail); memcpy((char *)dod + *entries * dodsize, This-data_queue + nqtail, dodsize); /* Advance position */ nqtail++; Only in dlls/dinput: mouse.o Only in dlls/dinput: regsvr.o Only in dlls/dinput: version.res
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
Am Donnerstag, 5. Mai 2005 09:38 schrieb Lionel Ulmer: On Thu, May 05, 2005 at 10:42:55AM +, Stefan Dösinger wrote: No, saidly, it doesn't. I have attached a +dinput log again. This is really strange as the behaviour of DInput seems fine in my log. Could you send me another log with the attached patch ? Log is attached By the way, what exactly is the issue ? The in-game cursor not working or having still the X cursor displayed which is continuously warping back to the middle of the screen ? The game seems to use the X cursor, which is continuously warped back. The cursor can be moved a little bit(~1 cm) if I move the mouse fast, but it immediatly warps back to the window center. Stefan s3.out.gz Description: GNU Zip compressed data
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
The game seems to use the X cursor, which is continuously warped back. The cursor can be moved a little bit(~1 cm) if I move the mouse fast, but it immediatly warps back to the window center. Thanks for the log, but except for the timestamp and sequence number which I find a bit strange (will have to investigate on Windows), it looks perfectly OK. As the cursor itself, what is the shape of the X cursor ? Is it the normal one or is it changed by the application ? I would be really surprised if the application did use the 'normal' cursor and did not do it itself using DirectX. It could be confirmed by the screenshots I found on the web when one does not see any cursor drawn on the screen. Did you test this game on Windows to see how the cursor looks like ? Finally, could you send me a +ddraw,+dinput,+cursor log so that I can reproduce this on my test box and see if the 'normal' mouse cursor stays on screen or if it is hidden by either DDraw or DInput. Thanks, Lionel -- Lionel Ulmer - http://www.bbrox.org/
Re: [DInput] Fix 'peek' code for mouse (S3 problem)
As the cursor itself, what is the shape of the X cursor ? Is it the normal one or is it changed by the application ? I would be really surprised if the application did use the 'normal' cursor and did not do it itself using DirectX. It doesn't look like the normal X cursor. S3 changes the cursor the same way in Wine as it does on Windows, but I think, appart of it's look that it's the normal X cursor / the normal Windows GDI cursor. It could be confirmed by the screenshots I found on the web when one does not see any cursor drawn on the screen. Did you test this game on Windows to see how the cursor looks like ? I could send you a Screenshot, but strangely the cursor isn't visible on the screen shot. I played this game on Windows, and I didn't notice any difference in how the cursor looks. Finally, could you send me a +ddraw,+dinput,+cursor log so that I can reproduce this on my test box and see if the 'normal' mouse cursor stays on screen or if it is hidden by either DDraw or DInput. The log is attached. A demo is available at http://www.siedler3.de/gindex.htm (Direct Link to English Version: ftp://ftp.bluebyte.com/demos/eng/settlers3/s3multidemoeng.exe) I don't know if this Demo works with Wine. The original S3 does a lot of checks on system dlls and such, which causes the game to refuse to run on Windows XP and Wine. Bluebyte has published a modified s3.exe which makes the game start on Windows 2K, Windows XP and (as a side effect) with Wine. I don't know how the demo behaves. S3 has two other issues: Drawing is slow with wine versions later than 20040914, and S3 requests it's Window with the WS_CAPTION and the ddraw DDSCL_FULLSCREEN flag set. That causes Wine to reserve space for a caption around the window. I have a patch which filters the WS_CAPTION flag in Main_DirectDraw_SetCooperativeLevel. I didn't figure out how Windows handles this, I just know that doing so is not 100% correct. Stefan s3-3.log.gz Description: GNU Zip compressed data