It doesn't really *want* to, but there's some bug or unimplemented feature in Wine that causes it to fail to initialize a certain pointer. From what I recall, this pointer would be stored as extra window data using Get/SetWindowLong, but I didn't find out why it didn't get initialized.
I guess you mean the place where the program wants to call GetWindowLong16 using offset value 10 even though there are only 12 bytes of data available? If I convert offset to 8 in this case, I get rid of a single memory fault. Unfortunately, this does not have any impact at all to the rest of the about dozen memory faults... Looking at relay traces, I see no indication that the program gets other invalid pointers from GetWindowLong.
It would be possible to trace the program execution backward from the faulting instruction and find out the exact place where the illegal segment value gets defined. I'm not sure that I want to do something that boring and tidious, though. I just wish that I didn't have a handful of other games that need to be played using hacked Wine versions because I haven't found out what the real problem is :(
Oh, DeusEx, Pharaoh, Colonization and Civilization 2 do work under Wine after some hacks, but I feel a bit depressed that I have no idea what the real problem with those games is. And I have utterly failed to get half a dozen other games work.