https://bugs.winehq.org/show_bug.cgi?id=57455
Bug ID: 57455 Summary: HOMM3 (from GOG.com) crashes immediately on run Product: Wine Version: 9.16 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: gilbates2a@proton.me Distribution: ---
Created attachment 77450 --> https://bugs.winehq.org/attachment.cgi?id=77450 Output of WINEDEBUG="+all"
Running the Heroes3.exe causes an immediate crash on Arch Linux with wine 9.16 with the following error message:
0024:err:seh:NtRaiseException Unhandled exception code c0000409 flags 1 addr 0x7a181f30
The crash occurs on every run and with identical error message.
I also tried running with wine 7.22 and get a similar crash but with different error message:
0024:err:seh:NtRaiseException Unhandled exception code c0000409 flags 1 addr 0x11a1f30
Attached log from 9.16 run with WINEDEBUG="+all"
HOMM3 was installed from GOG offline installer with following filename (installer ran fine):
setup_heroes_of_might_and_magic_3_complete_4.0_(3.2)_gog_0.1_(77075).exe
https://bugs.winehq.org/show_bug.cgi?id=57455
JPT j-p-t@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |j-p-t@gmx.net
--- Comment #1 from JPT j-p-t@gmx.net --- I can confirm. Manjaro, Wine 9.16 Map Editor works offline installer partly works GOG installer does not work (different problems though)
Is there anything I can help with?
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #2 from Rafał Mużyło galtgendo@o2.pl --- Would one of you attach the full *normal* output ?
Going for '+all' is usually not needed and going for it as the first thing is nearly always wrong. Filtering out all the noise without having a general idea what went wrong is too tedious.
https://bugs.winehq.org/show_bug.cgi?id=57455
Béla Gyebrószki gyebro69@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |gyebro69@gmail.com
--- Comment #3 from Béla Gyebrószki gyebro69@gmail.com --- (In reply to Rafał Mużyło from comment #2)
Would one of you attach the full *normal* output ?
Really this is the only line in the terminal:
0024:err:seh:NtRaiseException Unhandled exception code c0000409 flags 1 addr 0x7ae01f30
GOG updated the game in November and the problem exists since then. They include the DDrawCompat wrapper with the game and oddly enough, they also renamed the bundled ddraw.dll to xdd.dll so the game executable always loads xdd.dll. If you don't mind hex editing Heroes3.exe, here is a workaround: https://www.gog.com/forum/heroes_of_might_and_magic_series/full_screen_disab... The game will look for ddraw.dll instead and will use Wine's built-in ddraw.dll (which should work).
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #4 from Rafał Mużyło galtgendo@o2.pl --- ...
Out of curiosity, is that lib just original Windows dll renamed, some wacky wrapper or some odd modification of ddraw.dll ?
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #5 from Béla Gyebrószki gyebro69@gmail.com --- (In reply to Rafał Mużyło from comment #4)
...
Out of curiosity, is that lib just original Windows dll renamed, some wacky wrapper or some odd modification of ddraw.dll ?
It is from https://github.com/narzoul/DDrawCompat
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #6 from Rafał Mużyło galtgendo@o2.pl --- Something sounds off about this...
The way I remember such wrappers working with wine was (as long as the dll name wasn't changed) WINEDLLOVERRIDES=ddraw=n,b. And such *do* work - IIRC, Fallout 1 was using such wrapper.
Your proposed solution just kills the wrapper...
Now, the question is: if you change the dll name in the executable back to ddraw.dll, rename that dll too (or use its unmodified version, as that one is named ddraw.dll) *and* use WINEDLLOVERRIDES does the wrapper work or not ?
Though that's actually two different problems: one with how wine is loading the symbols, other with the wrapper being buggy in wine...
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #7 from Béla Gyebrószki gyebro69@gmail.com --- The game is forced to use native ddraw.dll aliased as xdd.dll that comes from DDrawCompat. Any versions of DDrawCompat higher than v0.4.0 don't work in Wine.
md5sum xdd.dll (from HoMM3 installation) f64472b6e307ff765c4c25a7333a9577
md5sum ddraw.dll (comes from DDrawCompat-v0.5.4.zip) f64472b6e307ff765c4c25a7333a9577
You can reproduce the problem e.g. with Star Trek Armada demo: https://www.moddb.com/games/star-trek-armada-i/downloads/star-trek-armada-de...
Download and extract ddraw.dll to the game install directory and make the override ddraw='n,b' https://github.com/narzoul/DDrawCompat/releases/download/v0.5.4/DDrawCompat-...
You will receive a very similar exception that of posted here when starting the game Armada.exe: 0024:err:seh:NtRaiseException Unhandled exception code c0000409 flags 1 addr 0x7fcb1f30
So this bug is not specific to HoMM3 only but to any old games that use DDrawCompat>v0.4.0
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #8 from Rafał Mużyło galtgendo@o2.pl --- ...a part of their hooking method looks a bit volatile going by the second commit after 0.4.0 tag...
I wonder if their debug builds (combined with 'loaddll' channel) show anything interesting (when you compare before and after) - if the whole wine's debug output is a single line, the failure must happen ridiculously early...
https://bugs.winehq.org/show_bug.cgi?id=57455
--- Comment #9 from Rafał Mużyło galtgendo@o2.pl --- Their debug log offers this for 0.5.0:
2d2c 11:08:32.461 Hooking function via IAT: GetProcAddress (C:\windows\system32\ kernel32.dll+0x19410) 2d2c 11:08:32.461 > dbgEngGetProcAddress(*MOD{&7BCF0000,"C:\windows\system32\ ntdll.dll"}, "__wine_dbg_strdup") 2d2c 11:08:32.461 < dbgEngGetProcAddress(*MOD{&7BCF0000,"C:\windows\system32\ ntdll.dll"}, "__wine_dbg_strdup") = 7BD2AE10 2d2c 11:08:32.461 > dbgEngGetProcAddress(*MOD{&7BCF0000,"C:\windows\system32\ ntdll.dll"}, "__wine_dbg_header") 2d2c 11:08:32.461 < dbgEngGetProcAddress(*MOD{&7BCF0000,"C:\windows\system32\ ntdll.dll"}, "__wine_dbg_header") = 7BD2ABD0 2d2c 11:08:32.461 ERROR: DbgEng: object creation failed: 0x80004002
With 0.4.0 it's:
2d38 11:14:30.683 Hooking function via IAT: GetProcAddress (C:\windows\system32\ kernel32.dll+0x19410) 2d38 11:14:30.683 > dbgEngGetProcAddress(&7BCF0000, "__wine_dbg_strdup") 2d38 11:14:30.683 < dbgEngGetProcAddress(&7BCF0000, "__wine_dbg_strdup") = 7BD2A E10 2d38 11:14:30.683 > dbgEngGetProcAddress(&7BCF0000, "__wine_dbg_header") 2d38 11:14:30.683 < dbgEngGetProcAddress(&7BCF0000, "__wine_dbg_header") = 7BD2A BD0 2d38 11:14:30.683 ERROR: DbgEng: object creation failed: 0x80004002 2d38 11:14:30.684 > dbgEngGetProcAddress(&7BCF0000, "__wine_dbg_output") 2d38 11:14:30.685 < dbgEngGetProcAddress(&7BCF0000, "__wine_dbg_output") = 7BD2A D50 2d38 11:14:30.685 DPI awareness was successfully changed to "permonitor" via Set ProcessDpiAwarenessContext 2d38 11:14:30.689 DDrawCompat loaded successfully 2d38 11:14:48.992 DDrawCompat detached successfully
In both cases it looks weird - those are wine internals...
https://bugs.winehq.org/show_bug.cgi?id=57455
Béla Gyebrószki gyebro69@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |scarabyte18+winehq@gmail.co | |m
--- Comment #10 from Béla Gyebrószki gyebro69@gmail.com --- *** Bug 57590 has been marked as a duplicate of this bug. ***