VOGONS

Common searches


First post, by UCyborg

User metadata
Rank Member
Rank
Member

So back when Windows Vista was released, we realized DirectMusic scripting functionality was completely broken, which the game Unreal II: Awakening heavily depends on. From my limited testing, it was enough to just put the old dmscript.dll from Windows XP in its place. Full set of DLLs was posted back then, eg. https://greatemerald.eu/blog/solving-the-unre … i-intro-problem.

This new problem is even more interesting at it seems to have started at some point with Windows 11 and effects Drakan: Order of the Flame, where it breaks only specific tracks (menu music, the one that starts playing when you gain control of the character for the first time...). I don't know much about this game's music implementation, only that the music is stored in custom Music.rrc file and that from level editing tools, you specify the index which track you want to play, so pretty much like specifying track number for a CD player to play.

It seems only putting XP's dmusic.dll restores the missing tracks. Unsure how wise it is in general to mix DLLs in this case, so old dmsuic.dll and newer remaining DLLs, it doesn't crash and on one hand, you would think newer one would be better suited for a new OS, on another, parts of newer ones are definitely broken and fail to provide expected functionality, even though they're generally larger in size than XP ones.

You definitely can't use eg. Win10 20H2's dmusic.dll on Win11 23H2 or even Win7's dmusic.dll. I suspect it depends on some lower level APIs on NT 6.0+ systems (possibly related to sound) while the old one might always be using higher-level ones (from modern Windows' point of view).

I didn't dig deep into the matter, I'm a bit rusty anyway and analyzing Microsoft's DLLs is challenging as it is, I just noticed one of the support DirectMusic DLLs, so one that isn't dmusic.dll returned E_NOINTERFACE error code at some point and the game got back another code, which according to internal game's function linking error codes to human readable messages says "The method succeeded, but there was nothing to do.". Some error, huh? 😁

Arthur Schopenhauer wrote:

A man can be himself only so long as he is alone; and if he does not love solitude, he will not love freedom; for it is only when he is alone that he is really free.