Opened 3 years ago

Closed 3 years 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:

Description

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.

[monkey-vga]
filtering=true
mute=false
engineid=scumm
multi_midi=false
gui_saveload_last_pos=0
platform=pc
music_driver=windows_VirtualMIDISynth #1
vsync=true
talkspeed=85
music_volume=190
opl_driver=auto
aspect_ratio=true
guioptions=sndNoSpeech lang_English
fullscreen=false
sfx_volume=197
description=Monkey Island 1: The Secret of Monkey Island (DOS, VGA, English)
speech_volume=189
midi_gain=100
path=E:\GamesScumm\Monkey Island 1 (VGA, e)\
gameid=monkey
language=en
stretch_mode=fit_force_aspect

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

Change History (3)

comment:1 by eriktorbjorn, 3 years 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, 3 years ago

Nice funky loop :)

@eriktorbjorn: Your diff works well with both my floppy VGA and EGA versions from the Limited Run Games set.

Version 0, edited 3 years ago by dwatteau (next)

comment:3 by eriktorbjorn, 3 years 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.