http://bugs.winehq.org/show_bug.cgi?id=13683
--- Comment #31 from Christopher Thielen christopher@thielen.co --- Thanks Erich - I ended up learning quite a bit about User32 cursor stuff reading the docs and disabling bits of Wine's code.
Most of the User32 cursor calls come during initialization; using various cursors during gameplay didn't seem to elicit any calls so I'm somewhat confident that the cursors are not drawn using the User32 stuff.
I believe the only other viable option would be for them to be D3D surfaces which unfortunately is a lot harder to debug.
Using the fan-made tools I found I was able to dump the contents of the major "bitmaps" file, which contained the various enumerations of the missing cursor (by itself, holding one object, holding another object), as well as textures clearly used in 3D models. I dumped them as .BMP files and they open just fine, though it should be noted the color is incorrect on the cursors when I open them in Gimp but the bitmaps used as textures on 3D objects look correct. Perhaps this is a clue to what's wrong - incorrect parameters being set on a D3D surface which is supposed to represent the cursor?
I looked through some of the load_texture calls made in WineD3D - there's a few hundred for the initial scene I'm loading - including about 8 that are 32x32 which is roughly the size of the cursor (Wine/OpenGL code modifies the texture sizes to be squares with power-of-two lengths as is required by many 3D drivers).
I'm looking into figuring out how to dump texture data to a file as its loaded so I can confirm the missing cursor is a D3D surface and not anything else (what else could it be?). If that works, perhaps it will be easier to see what flags are being set on the surface by Wine that might make it invisible or behind the rest of the scene.