From 9d53046039c38d8c562a8f211929a01eb771d054 Mon Sep 17 00:00:00 2001 From: Jamieson Christian Date: Sun, 25 May 2003 16:21:55 +0000 Subject: Fixed music starting at incorrect location when loading game svn-id: r7961 --- scumm/imuse_internal.h | 3 +-- scumm/imuse_player.cpp | 36 ++++++++++++++++++------------------ 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'scumm') diff --git a/scumm/imuse_internal.h b/scumm/imuse_internal.h index 90caaa792b..08257d4100 100644 --- a/scumm/imuse_internal.h +++ b/scumm/imuse_internal.h @@ -164,7 +164,6 @@ protected: int8 _detune; byte _vol_eff; - uint _song_index; uint _track_index; uint _loop_to_beat; uint _loop_from_beat; @@ -219,7 +218,7 @@ protected: // Sequencer part void setTempo(uint32 data); - int start_seq_sound(int sound); + int start_seq_sound (int sound, bool reset_vars = true); int query_param(int param); public: diff --git a/scumm/imuse_player.cpp b/scumm/imuse_player.cpp index 134fe3af25..9feadcd441 100644 --- a/scumm/imuse_player.cpp +++ b/scumm/imuse_player.cpp @@ -60,7 +60,6 @@ _pan (0), _transpose (0), _detune (0), _vol_eff (0), -_song_index (0), _track_index (0), _loop_to_beat (0), _loop_from_beat (0), @@ -156,19 +155,20 @@ void Player::hook_clear() { memset(&_hook, 0, sizeof(_hook)); } -int Player::start_seq_sound(int sound) { +int Player::start_seq_sound (int sound, bool reset_vars) { byte *ptr; - _song_index = sound; - _loop_to_beat = 1; - _loop_from_beat = 1; - _track_index = 0; - _loop_counter = 0; - _loop_to_tick = 0; - _loop_from_tick = 0; + if (reset_vars) { + _loop_to_beat = 1; + _loop_from_beat = 1; + _track_index = 0; + _loop_counter = 0; + _loop_to_tick = 0; + _loop_from_tick = 0; - setTempo(500000); - setSpeed(128); + setTempo(500000); + setSpeed(128); + } ptr = _se->findStartOfSound (sound); if (ptr == NULL) @@ -219,7 +219,7 @@ void Player::uninit_parts() { void Player::setSpeed(byte speed) { _speed = speed; if (_parser) - _parser->setTimerRate ((_midi->getBaseTempo() * speed) >> 7); + _parser->setTimerRate ((_midi->getBaseTempo() * speed) / 128); } void Player::send (uint32 b) { @@ -719,6 +719,7 @@ void Player::key_off(uint8 chan, uint8 note) { bool Player::jump(uint track, uint beat, uint tick) { if (!_parser) return false; + _track_index = track; _parser->setTrack (track); if (!_parser->jumpToTick ((beat - 1) * TICKS_PER_BEAT + tick)) return false; @@ -1122,12 +1123,11 @@ void Player::fixAfterLoad() { if (!_midi) { clear(); } else { - start_seq_sound (_id); + start_seq_sound (_id, false); setTempo (_tempo); - if (_parser) { - _parser->setTrack (_track_index); - _parser->jumpToTick (_music_tick); - } + setSpeed (_speed); + if (_parser) + _parser->jumpToTick (_music_tick); // start_seq_sound already switched tracks _isMT32 = _se->isMT32 (_id); _isGM = _se->isGM (_id); } @@ -1174,7 +1174,7 @@ int Player::save_or_load(Serializer *ser) { MKLINE(Player, _vol_chan, sleUint16, VER_V8), MKLINE(Player, _vol_eff, sleByte, VER_V8), MKLINE(Player, _speed, sleByte, VER_V8), - MKLINE(Player, _song_index, sleUint16, VER_V8), + MK_OBSOLETE(Player, _song_index, sleUint16, VER_V8, VER_V19), MKLINE(Player, _track_index, sleUint16, VER_V8), MK_OBSOLETE(Player, _timer_counter, sleUint16, VER_V8, VER_V17), MKLINE(Player, _loop_to_beat, sleUint16, VER_V8), -- cgit v1.2.3