http://bugs.winehq.org/show_bug.cgi?id=13683
--- Comment #35 from Christopher Thielen christopher@thielen.co --- Some more results:
The cursor is loaded from bitmap16.flx (0x1020eb4 bytes into the file) into a heap right before the call to CreateWindow. This is the same method all game texture data is loaded from file (though most are loaded after the CreateWindow call).
The cursor texture does not exist when it is not on screen - you must hit 'Q', 'Control+X' or other dialog-introducing command for it to appear. It is drawn toward the very end of the frame as a 128x128 D3DFMT_A8R8G8B8 8-Mips formatted texture with the actual glove image in the upper-left. It is drawn using two calls to DrawPrimitiveUP.
Given that nGlide is really issuing those commands and doing more or less the same thing for all other game textures, I have not yet been able to determine whether or not this draw command is missing from the Wine rendition.
My hunch is that it is given that this bug shows up both when u9.exe is rendering Glide (->D3D9 via nGlide) or rendering D3D7, it is likely unrelated to render errors. However, it appears the texture is a normal texture loaded just like the others, so it being a texture loading error also doesn't seem likely. Other 2D elements (like the backpack image) are also loaded from bitmap16.flx and appear fine in both renderings.
I'm trying now to confirm that Wine is indeed missing this texture entirely either via dumping texture data with a monkey-patch of wined3d or using apitrace. I can confirm Wine is issuing the same ReadFile command, so the cursor is at least making it off the disk and into a heap.
Note: this is definitely unrelated to the user32 SetCursor stuff.
Any other ideas about what this could be would be appreciated.