[Bug 31586] Myst V stucked when about playing the first cutscene in the game (DirectMusic segment handling/notification incomplete, IDirectMusicTool8::ProcessPMsg)
wine-bugs at winehq.org
wine-bugs at winehq.org
Tue Oct 8 15:21:06 CDT 2013
http://bugs.winehq.org/show_bug.cgi?id=31586
Anastasius Focht <focht at gmx.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |focht at gmx.net
Summary|Myst V stucked when about |Myst V stucked when about
|playing the first cutscene |playing the first cutscene
|in the game |in the game (DirectMusic
| |segment
| |handling/notification
| |incomplete,
| |IDirectMusicTool8::ProcessP
| |Msg)
--- Comment #8 from Anastasius Focht <focht at gmx.net> 2013-10-08 15:21:06 CDT ---
Hello folks,
bought the game just for analysis ... confirming.
When the monologue scene happens:
--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/GOG.com/Myst V End Of Ages
$ WINEDEBUG=+tid,+seh,+loaddll,+dmime wine ./eoa.exe
...
0009:trace:dmime:DllGetClassObject (CLSID_DirectMusicSegment,
IID_IClassFactory, 0x33dcb8)
0009:trace:dmime:ClassFactory_CreateInstance ((nil), IID_IDirectMusicObject,
0x33e4d8)
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_QueryInterface (0x9d33230,
IID_IDirectMusicObject, 0x33e4d8)
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_AddRef (0x9d33230): AddRef
from 0
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_QueryInterface (0x9d33230,
IID_IPersistStream, 0x33e4dc)
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_AddRef (0x9d33230): AddRef
from 1
0009:trace:dmime:IDirectMusicSegment8Impl_IPersistStream_Load (0x9d33230,
0xb7a22f8): Loading
0009:trace:dmime:IDirectMusicSegment8Impl_IDirectMusicObject_GetDescriptor
(0x9d33230, 0x33e188)
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_Release (0x9d33230):
ReleaseRef to 1
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_QueryInterface (0x9d33230,
IID_IDirectMusicSegment8, 0x33ec78)
0009:trace:dmime:IDirectMusicSegment8Impl_IUnknown_AddRef (0x9d33230): AddRef
from 1
0009:trace:dmime:IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLength
(0x9d33230, 0x33ee98)
0009:fixme:dmime:IDirectMusicSegment8Impl_IDirectMusicSegment8_SetGraph
(0x9d33230, 0x9be3d84): to complete
0009:trace:dmime:IDirectMusicGraphImpl_IUnknown_AddRef (0x9be3d80): AddRef from
1
0009:trace:dmime:IDirectMusicSegment8Impl_IDirectMusicSegment8_SetStartPoint
(0x9d33230, 0)
0009:fixme:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath
(0x9d06da0)->(6, 32, 1, 0x33f0a0): semi-stub
0009:trace:dmime:IDirectMusicAudioPathImpl_IUnknown_QueryInterface (0x9dfd890,
IID_IDirectMusicAudioPath, 0x33f034)
0009:trace:dmime:IDirectMusicAudioPathImpl_IUnknown_AddRef (0x9dfd890): AddRef
from 0
0009:trace:dmime:IDirectMusicPerformance8Impl_CreateStandardAudioPath
returning IDirectMusicAudioPath interface at 0x9dfd894.
0009:fixme:dmime:IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Activate
(0x9dfd890, 1): stub
0009:fixme:dmime:IDirectMusicAudioPathImpl_IDirectMusicAudioPath_SetVolume
(0x9dfd890, -9600, 0): stub
0009:fixme:dmime:IDirectMusicAudioPathImpl_IDirectMusicAudioPath_GetObjectInPath
(0x9dfd890, -5, 24576, 0, {00000000-0000-0000-0000-000000000000}, 0,
{279afa86-4981-11ce-a521-0020af0be560}, 0x2b313d8): stub
0009:trace:dmime:IDirectMusicAudioPathImpl_IDirectMusicAudioPath_GetObjectInPath
returning 0xb7a2304
0009:trace:dmime:IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLength
(0x9d33230, 0x33f0bc)
0009:fixme:dmime:IDirectMusicSegment8Impl_IDirectMusicSegment8_AddNotificationType
(0x9d33230, GUID_NOTIFICATION_SEGMENT): stub
0009:fixme:dmime:IDirectMusicGraphImpl_IDirectMusicGraph_InsertTool (0x9be3d80,
0x178d880, (nil), 0, 0): use of pdwPChannels
0009:fixme:dmime:IDirectMusicAudioPathImpl_IDirectMusicAudioPath_SetVolume
(0x9dfd890, -300, 0): stub
0009:fixme:dmime:IDirectMusicSegment8Impl_IDirectMusicSegment8_Download
(0x9d33230, 0x9dfd894): stub
0009:fixme:dmime:IDirectMusicPerformance8Impl_PlaySegmentEx (0x9d06da0,
0x9d33234, (nil), (nil), 0, 0x0, 0x2b313cc, (nil), 0x9dfd894): stub
0009:trace:dmime:IDirectMusicSegmentState8Impl_QueryInterface (0xb7a24c0,
IID_IDirectMusicSegmentState, 0x2b313cc)
0009:trace:dmime:IDirectMusicSegmentState8Impl_AddRef (0xb7a24c0): AddRef from
0
0009:fixme:d3d:resource_check_usage Unhandled usage flags 0x8.
0009:fixme:d3d:resource_check_usage Unhandled usage flags 0x8.
...
--- snip ---
One indication of what could be missing is the registration for
GUID_NOTIFICATION_SEGMENT.
It seems the game code expects callback-style notifications to proceed further.
DirectMusic performance events can be delivered through several ways.
I didn't see any calls to SetNotificationHandle() and
performance->GetNotificationPMsg() so the notifications must be
signaled/delivered in another way.
Well, I found out the way the game expects to be notified:
IDirectMusicTool8::ProcessPMsg() (see
IDirectMusicGraphImpl_IDirectMusicGraph_InsertTool in log).
Wine's dmime code is incomplete/stubbed at various places so I really had a
hard time to get some proof-of-concept with minimal effort working.
I only needed an initial "trigger" of game callback ...
First by posting a custom message in IDirectMusicPerformance8Impl_PlaySegmentEx
to message thread.
Within the message thread I processed the message and created
DMUS_NOTIFICATION_PMSG object with type = DMUS_PMSGT_NOTIFICATION,
guidNotificationType = GUID_NOTIFICATION_SEGMENT, dwNotificationOption =
DMUS_NOTIFICATION_SEGSTART and called IDirectMusicTool8_ProcessPMsg() on the
instanced the game code created earlier (segment -> music graph -> ...).
This is obviously a big hack but it was enough to have the callback trigger
other in-game events and the guy actually started talking/acting, letting the
scene continue.
Pure Wine, no winetricks recipes used.
I debugged the game "sound start" callback and found it checks for following:
Type must be DMUS_PMSGT_NOTIFICATION or DMUS_PMSGT_LYRIC
In case of DMUS_PMSGT_NOTIFICATION type, the guid must be
GUID_NOTIFICATION_SEGMENT.
There is still various stuff missing but maybe this gives people working on
DirectMusic an idea.
Tested with Myst V: End of Ages from GOG.com:
$ du -sh setup_myst_5_end_of_ages_1.0.0.8*
2.0G setup_myst_5_end_of_ages_1.0.0.8-1.bin
1.7G setup_myst_5_end_of_ages_1.0.0.8-2.bin
2.5M setup_myst_5_end_of_ages_1.0.0.8.exe
$ sha1sum setup_myst_5_end_of_ages_1.0.0.8*
1f2ed82280231cfa8d2bc7023a1e69fc025a6b7c
setup_myst_5_end_of_ages_1.0.0.8-1.bin
1c2aea52ed16a1f5f7215bdebf22597980c8813e
setup_myst_5_end_of_ages_1.0.0.8-2.bin
ba69842d5af28cf8280dc9c08f5a0c4ecb500a8b setup_myst_5_end_of_ages_1.0.0.8.exe
$ wine --version
wine-1.7.3-269-gcd65c68
Regards
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the wine-bugs
mailing list