http://bugs.winehq.org/show_bug.cgi?id=15984
--- Comment #17 from Itzamna xamaniqinqu@gmail.com 2010-12-12 20:27:33 CST --- Created an attachment (id=32472) --> (http://bugs.winehq.org/attachment.cgi?id=32472) Backtrace showing the segmentation fault is caused by shoddy implementation of ddraw_surface7_Blt.
After a lot of debugging, I managed to identify the problem:
Any time the game saves (auto save after temple completion, when starting a skirmish game, before going to the God's Playground), Black & White creates a screenshot thumbnail to accompany the savegame, which can be viewed in the Temple. However, only a portion of the screen is copied, for which blitting is used. For this, a so-called DDBltFx structure is passed to the Wine DirectDraw function ddraw_surface7_Blt(). If this DDBltFx structure contains dds (DirectDraw Surface) pointers, Wine should replace the ddraw surfaces with WineD3D surfaces. However, this is not being done - therefore, important pointers and variables end up being NULL, causing a segmentation fault further down the road.
I'm working on completing the ddraw_surface7_Blt() function, any assistance is welcome. I've included a backtrace, though note I implemented a dummy XRGB1555->DXT1 conversion function to get at the blitting operation.