Opened 15 years ago

Closed 15 years ago

Last modified 15 years ago

#2077 closed defect (fixed)

COMI: Failed assertion in Digital iMUSE

Reported by: eriktorbjorn Owned by: fingolfin
Priority: normal Component: Engine: SCUMM
Keywords: Cc:
Game: Monkey Island 3

Description

The Curse of Monkey Island, English version Latest ScummVM CVS snapshot

I'm getting a failed assertion on line 579 of dimuse_codecs.cpp. The assertion is that "(firstWord & 3) == 0". It doesn't happen right away - not on the difficulty selection screen - but it does happen on the chapter screen right after the intro cutscene.

If I remove the assertion, everything seems to be working fine. But I don't quite dare to do that.

Ticket imported from: #1227778. Ticket imported from: bugs/2077.

Change History (5)

comment:1 by eriktorbjorn, 15 years ago

Owner: set to fingolfin

comment:2 by eriktorbjorn, 15 years ago

This appears to be the data it chokes on:

decompressCodec(15, 026547E0, 02734044, 1147) 000000: 00 8a 69 4d 55 53 00 0f c8 8a 4d 41 50 20 00 00 |..iMUS....MAP ..| 000010: 00 72 46 52 4d 54 00 00 00 14 00 00 00 8a 00 00 |.rFRMT..........| 000020: 00 00 00 00 00 10 00 00 56 22 00 00 00 02 54 45 |........V"....TE| 000030: 58 54 00 00 00 14 00 00 00 8a 32 31 30 35 2d 49 |XT........2105-I| 000040: 6e 74 65 72 6c 75 64 65 31 00 54 45 58 54 00 00 |nterlude1.TEXT..| 000050: 00 16 00 00 00 8a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |......**********| 000060: 2a 2a 2a 2a 2a 2a 2a 00 52 45 47 4e 00 00 00 08 |*******.REGN....| 000070: 00 00 00 8a 00 0f c8 00 53 54 4f 50 00 00 00 04 |........STOP....| 000080: 00 0f c8 8a 44 41 54 41 00 0f c8 00 82 0c 88 80 |....DATA........| 000090: a2 20 a2 82 22 22 20 c8 82 08 a2 20 2a 20 a2 08 |. .."" .... * ..| 0000a0: a0 a2 22 80 2a 0a 20 a0 a2 22 20 a0 a2 82 22 0a |..".*. .." ...".|

In this case, firstWord would be 138 which will land it shortly after the DATA chunk. We may be able to make assertions about firstWord relative the beginning of the DATA chunk, since that's presumably where we begin to skip audio samples, but I don't see how we can make assumptions about it relative the beginning of the iMUS chunk.

comment:3 by eriktorbjorn, 15 years ago

And since you asked for step-by-step instructions:

* Start COMI in ScummVM. * Pick a difficulty level. It doesn't matter which one. * Either wait for the intro to finish, or press Escape a few times.

When the assertion fails the screen is still blank, but it's where it would ordinarily show the "Part I" screen. It's the "Interlude 1" music, but the assertion also fails on the "Hold" music that comes next.

It probably only happens with the original (uncompressed) music files, since otherwise we wouldn't use these codecs at all, I guess.

comment:4 by eriktorbjorn, 15 years ago

I noticed the assertion has been changed to "(firstWord & 1) == 0" instead. I don't know enough about the code to see how even that is guaranteed, but it does fix my problem.

comment:5 by eriktorbjorn, 15 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.