Opened 4 months ago

Closed 4 months ago

#13392 closed defect (fixed)

Monkey Island 1 endless loop

Reported by: Neumi7712 Owned by: eriktorbjorn
Priority: low Component: Engine: SCUMM
Version: Keywords:
Cc: Game:


When starting The Secret of Monkey Island (VGA, english) and not pressing anything, the "Part One The Tree Trials" screen won't go away and the music will play in a loop.

It's a minor inconvinience, by pressing ESC the game continues as it should. Important: Don't press anything until that scene. If you press ESC at any point before, it will continue without looping.

Just in case, here's my configuration.

music_driver=windows_VirtualMIDISynth #1
guioptions=sndNoSpeech lang_English
description=Monkey Island 1: The Secret of Monkey Island (DOS, VGA, English)
path=E:\GamesScumm\Monkey Island 1 (VGA, e)\

tested with 2.5.1 release and daily build 2022-04-04.

Change History (3)

comment:1 by eriktorbjorn, 4 months ago

I can reproduce this with the VGA floppy version (the one with text inventory, rather than icons), so I guess that's what we're talking about here.

The script loops until the music ends. But with MIDI / MT-32 music, it keeps looping so it never stops. (AdLib works fine.)

But it also only seems to happen if the tune before it is allowed to loop. If you press "." to skip the lines, you can get through the scene before that happens, and then the chapter screen will work as expected.

The "music should loop" property is set by a MIDI message. But it's not cleared when a new tune is loaded, so any looping track will cause all subsequent tracks to loop. That seems wrong, and I think that's the problem here.

As far as I can tell, every song in MI1 VGA sets the auto loop flag at the end. But the player is also used by at the very least MI1 EGA. I don't own that version, so I can't test that. Either way, I'd like to discuss with someone before committing this fix:

diff --git a/engines/scumm/midiparser_ro.cpp b/engines/scumm/midiparser_ro.cpp
index bfc748f984b..2b8452f03f3 100644
--- a/engines/scumm/midiparser_ro.cpp
+++ b/engines/scumm/midiparser_ro.cpp
@@ -134,6 +134,7 @@ bool MidiParser_RO::loadMusic (byte *data, uint32 size) {
        _numTracks = 1;
+       _autoLoop = false;
        _ppqn = 120;
        _tracks[0] = pos + 2;
        _markerCount = _lastMarkerCount = 0;

comment:2 by dwatteau, 4 months ago

Nice funky loop :)

@eriktorbjorn: Your diff works well with both my floppy VGA and EGA versions from the Limited Run Games set. They both had the same bug, which disappears with your diff.

Last edited 4 months ago by dwatteau (previous) (diff)

comment:3 by eriktorbjorn, 4 months ago

Owner: set to eriktorbjorn
Resolution: fixed
Status: newclosed

Thanks for confirming that the EGA version had the same bug. As far as I know, the only other game that uses this MIDI parser is Loom, and that game does not - to the best of my knowledge - ever loop music.

I've committed my proposed fix. Let me know if there's still problems with the next daily build.

Note: See TracTickets for help on using tickets.