VOGONS

Common searches


First post, by BEEN_Nath_58

User metadata
Rank Oldbie
Rank
Oldbie

Many games utilising the WAIL middleware have issues running on Windows 7/10. People have been able to find replacement versions of the same file which work fine, for a particular game. However, that's not always the case for every game.

MechWarrior 2 Pentium Edition and Titanium Trilogy share the same fate, the 'WAIL32.DLL' that the game uses doesn't cooperate properly with Vista+ 'WINMM.DLL'. It was difficult for me to find a replacement 'WAIL32.DLL' or edit it to work properly, so I instead got a 'WINMM.DLL' that works fine with the game. By editing every entry of 'WINMM.DLL' with 'newfile.dll' (working 'WINMM.DLL') inside 'WAIL32.DLL', I got the game to run and was able to PLAY MISSIONS for the first time with Windows 10/7. This isn't the only game having issues. Mayan The Pitfall Adventure, Deadlock 1 have issues for this file (while the former got fixed).

However things didn't go all right, as the music worked but there was no sound effect or speech voice. So my technique was flawed. So I believe that unless I get a replacement supported 'WAIL32.DLL', I have to patch it someway to make the game work fine. I need guidance to start this work.

previously known as Discrete_BOB_058

Reply 1 of 5, by llm

User metadata
Rank Member
Rank
Member

it would be interesting to get the export information from the DLLs and their exact versions (for some of the games you mentioned):
some started to collect versions of it: RAD Game Tools: Bink/Miles/Smacker Windows .dll's.

https://www.nirsoft.net/utils/dll_export_viewer.html
http://www.pe-explorer.com/de/peexplorer-tour … nction-view.htm
IDA Pro/Freeware
or Ghidra: https://ghidra-sre.org/
could be used to get an overview what functions get exported by the DLLs

different WAIL32.dlls should be only compatible if they export the same functions (with the same ordinale)
PE-Explorer or IDA, Ghidra- also showing the C signature of the exported functions

according to this forum-post: http://forum.galliusiv.com/viewtopic.php?t=317
it does not seem that the WAIL32.DLL interfaces or implementation is only based the the RAD Game Tool releases

In general though, we can't help in such situations because often customers rebuild those dlls since we provide source code that they then modify.

another idea would be replicating the dll interface with a new-version (simple C/C++ project would do) of the DLL (if there are not to many functions in the WAIL32.DLL) and look if the game starts
or analyse the behavior of the current DLL with detouring the calls into logging routines using https://github.com/microsoft/Detours

i don't know if you have a developer background but giving information about the versions and exported interfaces would help a little to understand the complexity

Reply 2 of 5, by BEEN_Nath_58

User metadata
Rank Oldbie
Rank
Oldbie
llm wrote on 2021-10-02, 17:50:
it would be interesting to get the export information from the DLLs and their exact versions (for some of the games you mentione […]
Show full quote

it would be interesting to get the export information from the DLLs and their exact versions (for some of the games you mentioned):
some started to collect versions of it: RAD Game Tools: Bink/Miles/Smacker Windows .dll's.

https://www.nirsoft.net/utils/dll_export_viewer.html
http://www.pe-explorer.com/de/peexplorer-tour … nction-view.htm
IDA Pro/Freeware
or Ghidra: https://ghidra-sre.org/
could be used to get an overview what functions get exported by the DLLs

different WAIL32.dlls should be only compatible if they export the same functions (with the same ordinale)
PE-Explorer or IDA, Ghidra- also showing the C signature of the exported functions

according to this forum-post: http://forum.galliusiv.com/viewtopic.php?t=317
it does not seem that the WAIL32.DLL interfaces or implementation is only based the the RAD Game Tool releases

In general though, we can't help in such situations because often customers rebuild those dlls since we provide source code that they then modify.

another idea would be replicating the dll interface with a new-version (simple C/C++ project would do) of the DLL (if there are not to many functions in the WAIL32.DLL) and look if the game starts
or analyse the behavior of the current DLL with detouring the calls into logging routines using https://github.com/microsoft/Detours

i don't know if you have a developer background but giving information about the versions and exported interfaces would help a little to understand the complexity

From what I have observed, the .DLL doesn't seem to have any 'Activision built' extra function in it. All the functions look to me to be the original ones provided by RAD, even the release date of 3.03d of 'WAIL32.DLL' is the same as the one provided with the application.

The '_AIL_send_channel_voice_message@20' looks suspicious to me. The game doesn't have any speech using the different 'WINMM.DLL'. So for a start, how do I 'disable' or 'remove' the function from the .DLL?

previously known as Discrete_BOB_058

Reply 3 of 5, by BEEN_Nath_58

User metadata
Rank Oldbie
Rank
Oldbie
BEEN_Nath_58 wrote on 2021-10-03, 07:34:
llm wrote on 2021-10-02, 17:50:
it would be interesting to get the export information from the DLLs and their exact versions (for some of the games you mentione […]
Show full quote

it would be interesting to get the export information from the DLLs and their exact versions (for some of the games you mentioned):
some started to collect versions of it: RAD Game Tools: Bink/Miles/Smacker Windows .dll's.

https://www.nirsoft.net/utils/dll_export_viewer.html
http://www.pe-explorer.com/de/peexplorer-tour … nction-view.htm
IDA Pro/Freeware
or Ghidra: https://ghidra-sre.org/
could be used to get an overview what functions get exported by the DLLs

different WAIL32.dlls should be only compatible if they export the same functions (with the same ordinale)
PE-Explorer or IDA, Ghidra- also showing the C signature of the exported functions

according to this forum-post: http://forum.galliusiv.com/viewtopic.php?t=317
it does not seem that the WAIL32.DLL interfaces or implementation is only based the the RAD Game Tool releases

In general though, we can't help in such situations because often customers rebuild those dlls since we provide source code that they then modify.

another idea would be replicating the dll interface with a new-version (simple C/C++ project would do) of the DLL (if there are not to many functions in the WAIL32.DLL) and look if the game starts
or analyse the behavior of the current DLL with detouring the calls into logging routines using https://github.com/microsoft/Detours

i don't know if you have a developer background but giving information about the versions and exported interfaces would help a little to understand the complexity

From what I have observed, the .DLL doesn't seem to have any 'Activision built' extra function in it. All the functions look to me to be the original ones provided by RAD, even the release date of 3.03d of 'WAIL32.DLL' is the same as the one provided with the application.

The '_AIL_send_channel_voice_message@20' looks suspicious to me. The game doesn't have any speech using the different 'WINMM.DLL'. So for a start, how do I 'disable' or 'remove' the function from the .DLL?

@ghotik2002 gave me with the following trying to track the stack backwards

winmmbase.midiOutOpen
wail32._AIL_midiOutOpen@12+0A2
wail32._AIL_midiOutOpen@12 to MW2SHELL.02C04DC7
MW2SHELL.02C04D50 to MW2SHELL.ShellMain+156
MECH2.004014E6

Just figured out that the library which crashes the game (the one where the speech works but missions don't) doesn't have the '_AIL_midiOutOpen@12' at all. So in both cases incompatible functions are being linked.

previously known as Discrete_BOB_058

Reply 4 of 5, by llm

User metadata
Rank Member
Rank
Member
BEEN_Nath_58 wrote on 2021-10-03, 07:34:

From what I have observed, the .DLL doesn't seem to have any 'Activision built' extra function in it. All the functions look to me to be the original ones provided by RAD, even the release date of 3.03d of 'WAIL32.DLL' is the same as the one provided with the application.

equal means - every exported function got 100% identical name (with all the @ and other strange chars) and the same ordinale - or else its just pure luck that the game do not exploded using the not 100% identical version

BEEN_Nath_58 wrote on 2021-10-03, 07:34:

The '_AIL_send_channel_voice_message@20' looks suspicious to me. The game doesn't have any speech using the different 'WINMM.DLL'. So for a start, how do I 'disable' or 'remove' the function from the .DLL?

the exported functions of a DLL are part of the DLLs source-code
and there is no way of "removing" or "disabling functions" - that is/was never intendet with DLLs

because the game using that DLL needs the functions and will fail/crash if there are not available (the game even don't need to use them but will still fail if the DLL does not fullfill the required interface)
or there are other internal functions in the DLL that also rely on the existence of that exported functions

BEEN_Nath_58 wrote on 2021-10-03, 07:56:

Just figured out that the library which crashes the game (the one where the speech works but missions don't) doesn't have the '_AIL_midiOutOpen@12' at all. So in both cases incompatible functions are being linked.

so they are not 100% identical - that makes it hard without deeper knowledge of programming (at last how to develop and use DLLs in code) -are you a developer?

Reply 5 of 5, by BEEN_Nath_58

User metadata
Rank Oldbie
Rank
Oldbie
BEEN_Nath_58 wrote on 2021-10-03, 07:56:

Just figured out that the library which crashes the game (the one where the speech works but missions don't) doesn't have the '_AIL_midiOutOpen@12' at all. So in both cases incompatible functions are being linked.

so they are not 100% identical - that makes it hard without deeper knowledge of programming (at last how to develop and use DLLs in code) -are you a developer?

not at the level that I can develop DLLs in code

BEEN_Nath_58 wrote on 2021-10-03, 07:34:

The '_AIL_send_channel_voice_message@20' looks suspicious to me. The game doesn't have any speech using the different 'WINMM.DLL'. So for a start, how do I 'disable' or 'remove' the function from the .DLL?

the exported functions of a DLL are part of the DLLs source-code
and there is no way of "removing" or "disabling functions" - that is/was never intendet with DLLs

because the game using that DLL needs the functions and will fail/crash if there are not available (the game even don't need to use them but will still fail if the DLL does not fullfill the required interface)
or there are other internal functions in the DLL that also rely on the existence of that exported functions[/quote]

At this point, I believe there are more issues. I managed to patch the game to use DxWnd's WinMM and dee-dee's WinMM but they crash at the same point, because the ordinals are different 🙁

previously known as Discrete_BOB_058