TITANIC: Add support for specifying a sound is music or SFX

Apart from the CMusicRoom music, the game doesn't differentiate between
music and sound effects. This adds an optional _soundType field to the
CProximity class, so I can manually specify which is which
This commit is contained in:
Paul Gilbert 2016-08-31 20:20:10 -04:00
parent 15ebf3a12a
commit dd4fee37e3
6 changed files with 14 additions and 4 deletions

View File

@ -438,7 +438,8 @@ bool CGameObject::isSoundActive(int handle) const {
return false;
}
void CGameObject::playGlobalSound(const CString &resName, int mode, bool initialMute, bool repeated, int handleIndex) {
void CGameObject::playGlobalSound(const CString &resName, int mode, bool initialMute, bool repeated,
int handleIndex, Audio::Mixer::SoundType soundType) {
if (handleIndex < 0 || handleIndex > 3)
return;
CGameManager *gameManager = getGameManager();
@ -463,6 +464,7 @@ void CGameObject::playGlobalSound(const CString &resName, int mode, bool initial
CProximity prox;
prox._channelVolume = volume;
prox._repeated = repeated;
prox._soundType = soundType;
switch (handleIndex) {
case 0:

View File

@ -23,6 +23,7 @@
#ifndef TITANIC_GAME_OBJECT_H
#define TITANIC_GAME_OBJECT_H
#include "audio/mixer.h"
#include "common/stream.h"
#include "titanic/support/mouse_cursor.h"
#include "titanic/support/credit_text.h"
@ -234,8 +235,10 @@ protected:
* @param initialMute If set, sound transitions in from mute over 2 seconds
* @param repeated Flag for repeating sounds
* @param handleIndex Slot 0 to 3 in the shared sound handle list to store the sound's handle
* @param soundType Specifies whether the sound is a sound effect or music
*/
void playGlobalSound(const CString &resName, int mode, bool initialMute, bool repeated, int handleIndex);
void playGlobalSound(const CString &resName, int mode, bool initialMute, bool repeated,
int handleIndex, Audio::Mixer::SoundType soundType = Audio::Mixer::kMusicSoundType);
/**
* Stops a sound saved in the global sound handle list

View File

@ -116,7 +116,7 @@ bool CBarBell::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
}
++_fieldBC;
return 2;
return true;
}
bool CBarBell::ActMsg(CActMsg *msg) {

View File

@ -31,7 +31,7 @@ CProximity::CProximity() : _field4(0), _channelVolume(100), _fieldC(0),
_range(0.5), _elevation(0), _posX(0.0), _posY(0.0), _posZ(0.0),
_hasVelocity(false), _velocityX(0), _velocityY(0), _velocityZ(0),
_field54(0), _field58(0), _field5C(0), _freeSoundFlag(false), _endTalkerFn(nullptr),
_talker(nullptr), _field6C(0) {
_talker(nullptr), _field6C(0), _soundType(Audio::Mixer::kPlainSoundType) {
}
} // End of namespace Titanic

View File

@ -23,6 +23,7 @@
#ifndef TITANIC_PROXIMITY_H
#define TITANIC_PROXIMITY_H
#include "audio/mixer.h"
#include "common/scummsys.h"
namespace Titanic {
@ -62,6 +63,7 @@ public:
CEndTalkerFn _endTalkerFn;
TTtalker *_talker;
int _field6C;
Audio::Mixer::SoundType _soundType;
public:
CProximity();
};

View File

@ -158,6 +158,9 @@ int CSound::playSound(const CString &name, CProximity &prox) {
return -1;
prox._field6C = waveFile->fn1();
if (prox._soundType != Audio::Mixer::kPlainSoundType)
waveFile->_soundType = prox._soundType;
activateSound(waveFile, prox._freeSoundFlag);
return _soundManager.playSound(*waveFile, prox);