From 2b40502503bc5e6a99b53cd45d4eeeccc43dc718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Andersson?= Date: Thu, 13 Feb 2014 00:35:21 +0100 Subject: [PATCH] HOPKINS: Fix bug that could cause the music to stop prematurely The SoundManager filled the sound handles with zeroes, which made the mixer confuse them with active sound handle zero. In my case, this happened to be the intro music, and the music was stopped when playWavSample() wrongly thought its sound handle was in use. --- NEWS | 1 + engines/hopkins/sound.cpp | 8 -------- engines/hopkins/sound.h | 8 ++++++++ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 8821dfe20af..239965450be 100644 --- a/NEWS +++ b/NEWS @@ -27,6 +27,7 @@ For a more comprehensive changelog of the latest experimental code, see: Hopkins: - Added an option to toggle Gore Mode from the ScummVM GUI. + - Fixed bug that could cause the music to stop prematurely. SCI: - Added support for the more detailed RAVE lip syncing data in the Windows diff --git a/engines/hopkins/sound.cpp b/engines/hopkins/sound.cpp index 92c5f514625..704ebe3349e 100644 --- a/engines/hopkins/sound.cpp +++ b/engines/hopkins/sound.cpp @@ -200,14 +200,6 @@ SoundManager::SoundManager(HopkinsEngine *vm) { _currentSoundIndex = 0; _oldSoundNumber = 0; _modPlayingFl = false; - - for (int i = 0; i < VOICE_COUNT; ++i) - Common::fill((byte *)&_voice[i], (byte *)&_voice[i] + sizeof(VoiceItem), 0); - for (int i = 0; i < SWAV_COUNT; ++i) - Common::fill((byte *)&_sWav[i], (byte *)&_sWav[i] + sizeof(SwavItem), 0); - for (int i = 0; i < SOUND_COUNT; ++i) - Common::fill((byte *)&_sound[i], (byte *)&_sound[i] + sizeof(SoundItem), 0); - Common::fill((byte *)&_music, (byte *)&_music + sizeof(MusicItem), 0); } SoundManager::~SoundManager() { diff --git a/engines/hopkins/sound.h b/engines/hopkins/sound.h index f1d047ae8b0..6ebb6fdb020 100644 --- a/engines/hopkins/sound.h +++ b/engines/hopkins/sound.h @@ -33,12 +33,16 @@ namespace Hopkins { class VoiceItem { public: + VoiceItem() : _status(false), _wavIndex(0) {} + bool _status; int _wavIndex; }; class SwavItem { public: + SwavItem() : _active(false), _audioStream(NULL), _freeSampleFl(false) {} + bool _active; Audio::RewindableAudioStream *_audioStream; Audio::SoundHandle _soundHandle; @@ -47,11 +51,15 @@ public: class MusicItem { public: + MusicItem() : _active(false) {} + bool _active; }; class SoundItem { public: + SoundItem() : _active(false) {} + bool _active; };