Opened 14 years ago

Closed 14 years ago

Last modified 14 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, 14 years ago

Owner: set to fingolfin

comment:2 by eriktorbjorn, 14 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, 14 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, 14 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, 14 years ago

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