get rid of _noSubtitles, use ConfigManager directly instead; clean up some IMuseDigital oddities
svn-id: r11966
This commit is contained in:
parent
a567b741e7
commit
17c189d1f9
14 changed files with 57 additions and 94 deletions
|
@ -458,7 +458,7 @@ void ConfigDialog::open() {
|
||||||
GUI_OptionsDialog::open();
|
GUI_OptionsDialog::open();
|
||||||
|
|
||||||
// update checkboxes, too
|
// update checkboxes, too
|
||||||
subtitlesCheckbox->setState(_scumm->_noSubtitles == false);
|
subtitlesCheckbox->setState(ConfMan.getBool("subtitles"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigDialog::close() {
|
void ConfigDialog::close() {
|
||||||
|
@ -484,9 +484,6 @@ void ConfigDialog::close() {
|
||||||
|
|
||||||
_scumm->_mixer->setVolume(soundVolumeSfx * soundVolumeMaster / 255);
|
_scumm->_mixer->setVolume(soundVolumeSfx * soundVolumeMaster / 255);
|
||||||
_scumm->_mixer->setMusicVolume(soundVolumeMusic);
|
_scumm->_mixer->setMusicVolume(soundVolumeMusic);
|
||||||
|
|
||||||
// Subtitles?
|
|
||||||
_scumm->_noSubtitles = !ConfMan.getBool("subtitles");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -674,12 +674,6 @@ IMuseDigital::IMuseDigital(ScummEngine *scumm)
|
||||||
: _scumm(scumm) {
|
: _scumm(scumm) {
|
||||||
_pause = false;
|
_pause = false;
|
||||||
|
|
||||||
_voiceVocData = NULL;
|
|
||||||
_voiceVocSize = 0;
|
|
||||||
_voiceVocRate = 0;
|
|
||||||
|
|
||||||
_voiceBundleData = NULL;
|
|
||||||
|
|
||||||
_nameBundleMusic = "";
|
_nameBundleMusic = "";
|
||||||
_musicBundleBufFinal = NULL;
|
_musicBundleBufFinal = NULL;
|
||||||
_musicBundleBufOutput = NULL;
|
_musicBundleBufOutput = NULL;
|
||||||
|
@ -766,23 +760,15 @@ void IMuseDigital::callback() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IMuseDigital::setVocVoice(byte *src, int32 size, int rate) {
|
void IMuseDigital::startSound(int sound, byte *voc_src, int voc_size, int voc_rate) {
|
||||||
_voiceVocData = src;
|
|
||||||
_voiceVocSize = size;
|
|
||||||
_voiceVocRate = rate;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IMuseDigital::setBundleVoice(byte *src) {
|
|
||||||
_voiceBundleData = src;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IMuseDigital::startSound(int sound) {
|
|
||||||
debug(5, "IMuseDigital::startSound(%d)", sound);
|
debug(5, "IMuseDigital::startSound(%d)", sound);
|
||||||
int l, r;
|
int l, r;
|
||||||
|
|
||||||
for (l = 0; l < MAX_DIGITAL_CHANNELS; l++) {
|
for (l = 0; l < MAX_DIGITAL_CHANNELS; l++) {
|
||||||
if (!_channel[l].used && !_channel[l].handle.isActive()) {
|
if (!_channel[l].used && !_channel[l].handle.isActive()) {
|
||||||
byte *ptr, *s_ptr;
|
byte *ptr, *s_ptr;
|
||||||
|
byte *_voiceVocData = (voc_src && voc_size > 0) ? voc_src : 0;
|
||||||
|
byte *_voiceBundleData = (voc_src && voc_size <= 0) ? voc_src : 0;
|
||||||
if ((sound == kTalkSoundID) && (_voiceBundleData)) {
|
if ((sound == kTalkSoundID) && (_voiceBundleData)) {
|
||||||
s_ptr = ptr = _voiceBundleData;
|
s_ptr = ptr = _voiceBundleData;
|
||||||
} else if ((sound == kTalkSoundID) && (_voiceVocData)) {
|
} else if ((sound == kTalkSoundID) && (_voiceVocData)) {
|
||||||
|
@ -819,37 +805,26 @@ void IMuseDigital::startSound(int sound) {
|
||||||
int32 size = 0;
|
int32 size = 0;
|
||||||
int t;
|
int t;
|
||||||
|
|
||||||
if ((sound == kTalkSoundID) && (_voiceVocData)) {
|
if ((sound == kTalkSoundID) && (_voiceVocData) || (READ_UINT32(ptr) == MKID('Crea'))) {
|
||||||
_channel[l].mixerSize = _voiceVocRate * 2;
|
if (READ_UINT32(ptr) == MKID('Crea')) {
|
||||||
_channel[l].freq = _voiceVocRate;
|
int loops = 0;
|
||||||
_channel[l].size = _voiceVocSize * 2;
|
voc_src = readVOCFromMemory(ptr, voc_size, voc_rate, loops);
|
||||||
|
}
|
||||||
|
_channel[l].mixerSize = voc_rate * 2;
|
||||||
|
_channel[l].freq = voc_rate;
|
||||||
|
_channel[l].size = voc_size * 2;
|
||||||
_channel[l].bits = 8;
|
_channel[l].bits = 8;
|
||||||
_channel[l].channels = 2;
|
_channel[l].channels = 2;
|
||||||
_channel[l].mixerFlags = SoundMixer::FLAG_STEREO | SoundMixer::FLAG_REVERSE_STEREO | SoundMixer::FLAG_UNSIGNED;
|
_channel[l].mixerFlags = SoundMixer::FLAG_STEREO | SoundMixer::FLAG_REVERSE_STEREO | SoundMixer::FLAG_UNSIGNED;
|
||||||
_channel[l].data = (byte *)malloc(_channel[l].size);
|
_channel[l].data = (byte *)malloc(_channel[l].size);
|
||||||
|
|
||||||
|
// Widen data to two channels
|
||||||
for (t = 0; t < _channel[l].size / 2; t++) {
|
for (t = 0; t < _channel[l].size / 2; t++) {
|
||||||
*(_channel[l].data + t * 2 + 0) = *(_voiceVocData + t);
|
*(_channel[l].data + t * 2 + 0) = *(voc_src + t);
|
||||||
*(_channel[l].data + t * 2 + 1) = *(_voiceVocData + t);
|
*(_channel[l].data + t * 2 + 1) = *(voc_src + t);
|
||||||
}
|
}
|
||||||
|
|
||||||
_voiceVocData = NULL;
|
free(voc_src);
|
||||||
} else if (READ_UINT32(ptr) == MKID('Crea')) {
|
|
||||||
int32 loops = 0;
|
|
||||||
byte *t_ptr= readVOCFromMemory(ptr, size, _channel[l].freq, loops);
|
|
||||||
_channel[l].mixerSize = _channel[l].freq * 2;
|
|
||||||
_channel[l].size = size * 2;
|
|
||||||
_channel[l].bits = 8;
|
|
||||||
_channel[l].channels = 2;
|
|
||||||
_channel[l].mixerFlags = SoundMixer::FLAG_STEREO | SoundMixer::FLAG_REVERSE_STEREO | SoundMixer::FLAG_UNSIGNED;
|
|
||||||
_channel[l].data = (byte *)malloc(_channel[l].size);
|
|
||||||
|
|
||||||
for (t = 0; t < _channel[l].size / 2; t++) {
|
|
||||||
*(_channel[l].data + t * 2 + 0) = *(t_ptr + t);
|
|
||||||
*(_channel[l].data + t * 2 + 1) = *(t_ptr + t);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(t_ptr);
|
|
||||||
} else if (READ_UINT32(ptr) == MKID('iMUS')) {
|
} else if (READ_UINT32(ptr) == MKID('iMUS')) {
|
||||||
ptr += 16;
|
ptr += 16;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@ -964,11 +939,10 @@ void IMuseDigital::startSound(int sound) {
|
||||||
size *= 2;
|
size *= 2;
|
||||||
_channel[l].channels = 2;
|
_channel[l].channels = 2;
|
||||||
_channel[l].data = (byte *)malloc(size);
|
_channel[l].data = (byte *)malloc(size);
|
||||||
|
// Widen data to two channels
|
||||||
for (t = 0; t < size / 4; t++) {
|
for (t = 0; t < size / 4; t++) {
|
||||||
*(_channel[l].data + t * 4 + 0) = *(ptr + t * 2 + 0);
|
*(uint16 *)(_channel[l].data + t * 4 + 0) = *(uint16 *)(ptr + t * 2);
|
||||||
*(_channel[l].data + t * 4 + 1) = *(ptr + t * 2 + 1);
|
*(uint16 *)(_channel[l].data + t * 4 + 2) = *(uint16 *)(ptr + t * 2);
|
||||||
*(_channel[l].data + t * 4 + 2) = *(ptr + t * 2 + 0);
|
|
||||||
*(_channel[l].data + t * 4 + 3) = *(ptr + t * 2 + 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_channel[l].size = size;
|
_channel[l].size = size;
|
||||||
|
@ -978,6 +952,7 @@ void IMuseDigital::startSound(int sound) {
|
||||||
size *= 2;
|
size *= 2;
|
||||||
_channel[l].channels = 2;
|
_channel[l].channels = 2;
|
||||||
_channel[l].data = (byte *)malloc(size);
|
_channel[l].data = (byte *)malloc(size);
|
||||||
|
// Widen data to two channels
|
||||||
for (t = 0; t < size / 2; t++) {
|
for (t = 0; t < size / 2; t++) {
|
||||||
*(_channel[l].data + t * 2 + 0) = *(ptr + t);
|
*(_channel[l].data + t * 2 + 0) = *(ptr + t);
|
||||||
*(_channel[l].data + t * 2 + 1) = *(ptr + t);
|
*(_channel[l].data + t * 2 + 1) = *(ptr + t);
|
||||||
|
@ -1478,8 +1453,7 @@ void IMuseDigital::playBundleSound(const char *sound) {
|
||||||
|
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
stopSound(kTalkSoundID);
|
stopSound(kTalkSoundID);
|
||||||
setBundleVoice(ptr);
|
startSound(kTalkSoundID, ptr);
|
||||||
startSound(kTalkSoundID);
|
|
||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,17 +130,12 @@ private:
|
||||||
public:
|
public:
|
||||||
int32 _bundleSongPosInMs;
|
int32 _bundleSongPosInMs;
|
||||||
Bundle *_bundle; // FIXME: should be protected but is used by ScummEngine::askForDisk
|
Bundle *_bundle; // FIXME: should be protected but is used by ScummEngine::askForDisk
|
||||||
byte *_voiceVocData;
|
|
||||||
int32 _voiceVocSize;
|
|
||||||
int _voiceVocRate;
|
|
||||||
|
|
||||||
byte *_voiceBundleData;
|
|
||||||
|
|
||||||
void pauseBundleMusic(bool state);
|
void pauseBundleMusic(bool state);
|
||||||
void stopBundleMusic();
|
void stopBundleMusic();
|
||||||
void playBundleSound(const char *sound);
|
void playBundleSound(const char *sound);
|
||||||
void setVocVoice(byte *src, int32 size, int rate);
|
|
||||||
void setBundleVoice(byte *src);
|
void startSound(int sound, byte *src, int size = 0, int rate = 0);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IMuseDigital(ScummEngine *scumm);
|
IMuseDigital(ScummEngine *scumm);
|
||||||
|
@ -148,7 +143,7 @@ public:
|
||||||
|
|
||||||
void setMasterVolume(int vol) {}
|
void setMasterVolume(int vol) {}
|
||||||
|
|
||||||
void startSound(int sound);
|
void startSound(int sound) { startSound(sound, 0, 0, 0); }
|
||||||
void stopSound(int sound);
|
void stopSound(int sound);
|
||||||
void stopAllSounds();
|
void stopAllSounds();
|
||||||
void pause(bool pause);
|
void pause(bool pause);
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#include "common/config-manager.h"
|
||||||
#include "common/util.h"
|
#include "common/util.h"
|
||||||
|
|
||||||
#include "scumm/actor.h"
|
#include "scumm/actor.h"
|
||||||
|
@ -476,7 +477,7 @@ int ScummEngine::readVar(uint var) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_gameId == GID_LOOM256 && var == VAR_NOSUBTITLES) {
|
if (_gameId == GID_LOOM256 && var == VAR_NOSUBTITLES) {
|
||||||
return _noSubtitles;
|
return !ConfMan.getBool("subtitles");
|
||||||
}
|
}
|
||||||
|
|
||||||
checkRange(_numVariables - 1, 0, var, "Variable %d out of range(r)");
|
checkRange(_numVariables - 1, 0, var, "Variable %d out of range(r)");
|
||||||
|
@ -542,8 +543,10 @@ void ScummEngine::writeVar(uint var, int value) {
|
||||||
_scummVars[var] = value;
|
_scummVars[var] = value;
|
||||||
|
|
||||||
// stay in sync with loom cd subtitle var
|
// stay in sync with loom cd subtitle var
|
||||||
if (_gameId == GID_LOOM256 && var == VAR_NOSUBTITLES && (value == 0 || value == 1))
|
if (_gameId == GID_LOOM256 && var == VAR_NOSUBTITLES) {
|
||||||
_noSubtitles = (value != 0);
|
assert(value == 0 || value == 1);
|
||||||
|
ConfMan.set("subtitles", (value == 0));
|
||||||
|
}
|
||||||
|
|
||||||
if ((_varwatch == (int)var) || (_varwatch == 0)) {
|
if ((_varwatch == (int)var) || (_varwatch == 0)) {
|
||||||
if (vm.slot[_currentScript].number < 100)
|
if (vm.slot[_currentScript].number < 100)
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#include "common/config-manager.h"
|
||||||
|
|
||||||
#include "scumm/actor.h"
|
#include "scumm/actor.h"
|
||||||
#include "scumm/charset.h"
|
#include "scumm/charset.h"
|
||||||
#include "scumm/imuse.h"
|
#include "scumm/imuse.h"
|
||||||
|
@ -2413,7 +2415,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() {
|
||||||
|
|
||||||
debug(1, "INSANE Arg: %d %d", args[1], args[2]);
|
debug(1, "INSANE Arg: %d %d", args[1], args[2]);
|
||||||
|
|
||||||
SmushPlayer *sp = new SmushPlayer(this, speed, !_noSubtitles);
|
SmushPlayer *sp = new SmushPlayer(this, speed);
|
||||||
|
|
||||||
// INSANE mode 0: SMUSH movie playback
|
// INSANE mode 0: SMUSH movie playback
|
||||||
if (args[1] == 0) {
|
if (args[1] == 0) {
|
||||||
|
@ -2422,7 +2424,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() {
|
||||||
#ifdef INSANE
|
#ifdef INSANE
|
||||||
const int insaneVarNum = (_features & GF_DEMO) ? 232 : 233;
|
const int insaneVarNum = (_features & GF_DEMO) ? 232 : 233;
|
||||||
|
|
||||||
_insane->setSmushParams(speed, !_noSubtitles);
|
_insane->setSmushParams(speed);
|
||||||
_insane->runScene(insaneVarNum);
|
_insane->runScene(insaneVarNum);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -2559,10 +2561,7 @@ void ScummEngine_v6::o6_kernelSetFunctions() {
|
||||||
_saveSound = args[1];
|
_saveSound = args[1];
|
||||||
break;
|
break;
|
||||||
case 215:
|
case 215:
|
||||||
if (args[1])
|
ConfMan.set("subtitles", args[1] != 0);
|
||||||
_noSubtitles = false;
|
|
||||||
else
|
|
||||||
_noSubtitles = true;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error("o6_kernelSetFunctions: default case %d (param count %d)", args[0], num);
|
error("o6_kernelSetFunctions: default case %d (param count %d)", args[0], num);
|
||||||
|
|
|
@ -1244,7 +1244,7 @@ void ScummEngine_v8::o8_startVideo() {
|
||||||
|
|
||||||
debug(4, "o8_startVideo(%s/%s)", getGameDataPath(), (const char*)_scriptPointer);
|
debug(4, "o8_startVideo(%s/%s)", getGameDataPath(), (const char*)_scriptPointer);
|
||||||
|
|
||||||
SmushPlayer *sp = new SmushPlayer(this, 83333, !_noSubtitles);
|
SmushPlayer *sp = new SmushPlayer(this, 83333);
|
||||||
sp->play((const char*)_scriptPointer, getGameDataPath());
|
sp->play((const char*)_scriptPointer, getGameDataPath());
|
||||||
delete sp;
|
delete sp;
|
||||||
|
|
||||||
|
|
|
@ -1013,8 +1013,6 @@ protected:
|
||||||
int _charsetBufPos;
|
int _charsetBufPos;
|
||||||
byte _charsetBuffer[512];
|
byte _charsetBuffer[512];
|
||||||
|
|
||||||
public:
|
|
||||||
bool _noSubtitles; // Whether to skip all subtitles
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void initCharset(int charset);
|
void initCharset(int charset);
|
||||||
|
|
|
@ -471,7 +471,6 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
|
||||||
memset(_charsetBuffer, 0, sizeof(_charsetBuffer));
|
memset(_charsetBuffer, 0, sizeof(_charsetBuffer));
|
||||||
_copyProtection = false;
|
_copyProtection = false;
|
||||||
_demoMode = false;
|
_demoMode = false;
|
||||||
_noSubtitles = false;
|
|
||||||
_confirmExit = false;
|
_confirmExit = false;
|
||||||
_numInMsgStack = 0;
|
_numInMsgStack = 0;
|
||||||
_msgPtrToAdd = NULL;
|
_msgPtrToAdd = NULL;
|
||||||
|
@ -659,11 +658,10 @@ ScummEngine::ScummEngine(GameDetector *detector, OSystem *syst, const ScummGameS
|
||||||
|
|
||||||
_copyProtection = ConfMan.getBool("copy_protection");
|
_copyProtection = ConfMan.getBool("copy_protection");
|
||||||
_demoMode = ConfMan.getBool("demo_mode");
|
_demoMode = ConfMan.getBool("demo_mode");
|
||||||
_noSubtitles = ConfMan.getBool("subtitles");
|
|
||||||
_noSubtitles ^=1;
|
|
||||||
if (ConfMan.hasKey("nosubtitles")) {
|
if (ConfMan.hasKey("nosubtitles")) {
|
||||||
warning("Configuration key 'nosubtitles' is deprecated. Use 'subtitles' instead");
|
warning("Configuration key 'nosubtitles' is deprecated. Use 'subtitles' instead");
|
||||||
_noSubtitles = ConfMan.getBool("nosubtitles");
|
if (!ConfMan.hasKey("subtitles"))
|
||||||
|
ConfMan.set("subtitles", !ConfMan.getBool("nosubtitles"));
|
||||||
}
|
}
|
||||||
_confirmExit = ConfMan.getBool("confirm_exit");
|
_confirmExit = ConfMan.getBool("confirm_exit");
|
||||||
_defaultTalkDelay = ConfMan.getInt("talkspeed");
|
_defaultTalkDelay = ConfMan.getInt("talkspeed");
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "base/engine.h"
|
#include "base/engine.h"
|
||||||
|
|
||||||
|
#include "common/config-manager.h"
|
||||||
#include "common/file.h"
|
#include "common/file.h"
|
||||||
|
|
||||||
#include "scumm/scumm.h"
|
#include "scumm/scumm.h"
|
||||||
|
@ -106,16 +107,14 @@ Insane::~Insane(void) {
|
||||||
delete _smush_icons2Nut;
|
delete _smush_icons2Nut;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::setSmushParams(int speed, bool subtitles) {
|
void Insane::setSmushParams(int speed) {
|
||||||
_speed = speed;
|
_speed = speed;
|
||||||
_subtitles = subtitles;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::initvars(void) {
|
void Insane::initvars(void) {
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
_speed = 12;
|
_speed = 12;
|
||||||
_subtitles = true;
|
|
||||||
_insaneIsRunning = false;
|
_insaneIsRunning = false;
|
||||||
|
|
||||||
_numberArray = 0;
|
_numberArray = 0;
|
||||||
|
@ -1859,7 +1858,7 @@ void Insane::runScene(int arraynum) {
|
||||||
// ptrMainLoop = &ptrMainLoopBody;
|
// ptrMainLoop = &ptrMainLoopBody;
|
||||||
|
|
||||||
_insaneIsRunning = true;
|
_insaneIsRunning = true;
|
||||||
_player = new SmushPlayer(_scumm, _speed, _subtitles);
|
_player = new SmushPlayer(_scumm, _speed);
|
||||||
_player->insanity(true);
|
_player->insanity(true);
|
||||||
|
|
||||||
_numberArray = arraynum;
|
_numberArray = arraynum;
|
||||||
|
@ -3501,7 +3500,7 @@ void Insane::postCaseAll(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
if (tsceneProp->actor != -1) {
|
if (tsceneProp->actor != -1) {
|
||||||
if (_actor[tsceneProp->actor].field_54) {
|
if (_actor[tsceneProp->actor].field_54) {
|
||||||
tsceneProp->counter++;
|
tsceneProp->counter++;
|
||||||
if (!_actor[tsceneProp->actor].runningSound || !_scumm->_noSubtitles) {
|
if (!_actor[tsceneProp->actor].runningSound || ConfMan.getBool("subtitles")) {
|
||||||
if (_actor[tsceneProp->actor].act[3].state == 72 &&
|
if (_actor[tsceneProp->actor].act[3].state == 72 &&
|
||||||
_currTrsMsg) {
|
_currTrsMsg) {
|
||||||
smush_setPaletteValue(1, tsceneProp->r, tsceneProp->g, tsceneProp->b);
|
smush_setPaletteValue(1, tsceneProp->r, tsceneProp->g, tsceneProp->b);
|
||||||
|
|
|
@ -58,7 +58,7 @@ class Insane {
|
||||||
Insane(ScummEngine *scumm);
|
Insane(ScummEngine *scumm);
|
||||||
~Insane();
|
~Insane();
|
||||||
|
|
||||||
void setSmushParams(int speed, bool subtitles);
|
void setSmushParams(int speed);
|
||||||
void runScene(int arraynum);
|
void runScene(int arraynum);
|
||||||
|
|
||||||
void procPreRendering(void);
|
void procPreRendering(void);
|
||||||
|
@ -75,7 +75,6 @@ class Insane {
|
||||||
SmushPlayer *_player;
|
SmushPlayer *_player;
|
||||||
|
|
||||||
int32 _speed;
|
int32 _speed;
|
||||||
bool _subtitles;
|
|
||||||
bool _insaneIsRunning;
|
bool _insaneIsRunning;
|
||||||
|
|
||||||
int32 _numberArray;
|
int32 _numberArray;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "base/engine.h"
|
#include "base/engine.h"
|
||||||
|
|
||||||
|
#include "common/config-manager.h"
|
||||||
#include "common/file.h"
|
#include "common/file.h"
|
||||||
#include "common/util.h"
|
#include "common/util.h"
|
||||||
#include "common/timer.h"
|
#include "common/timer.h"
|
||||||
|
@ -209,7 +210,7 @@ void SmushPlayer::timerCallback(void *refCon) {
|
||||||
((SmushPlayer *)refCon)->parseNextFrame();
|
((SmushPlayer *)refCon)->parseNextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
SmushPlayer::SmushPlayer(ScummEngine *scumm, int speed, bool subtitles) {
|
SmushPlayer::SmushPlayer(ScummEngine *scumm, int speed) {
|
||||||
_scumm = scumm;
|
_scumm = scumm;
|
||||||
_version = -1;
|
_version = -1;
|
||||||
_nbframes = 0;
|
_nbframes = 0;
|
||||||
|
@ -224,7 +225,7 @@ SmushPlayer::SmushPlayer(ScummEngine *scumm, int speed, bool subtitles) {
|
||||||
_frameBuffer = NULL;
|
_frameBuffer = NULL;
|
||||||
|
|
||||||
_skipNext = false;
|
_skipNext = false;
|
||||||
_subtitles = subtitles;
|
_subtitles = ConfMan.getBool("subtitles");
|
||||||
_dst = NULL;
|
_dst = NULL;
|
||||||
_storeFrame = false;
|
_storeFrame = false;
|
||||||
_width = 0;
|
_width = 0;
|
||||||
|
|
|
@ -71,7 +71,7 @@ private:
|
||||||
bool _middleAudio;
|
bool _middleAudio;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SmushPlayer(ScummEngine *, int, bool);
|
SmushPlayer(ScummEngine *scumm, int speed);
|
||||||
~SmushPlayer();
|
~SmushPlayer();
|
||||||
|
|
||||||
void play(const char *filename, const char *directory);
|
void play(const char *filename, const char *directory);
|
||||||
|
|
|
@ -559,7 +559,8 @@ void Sound::startTalkSound(uint32 offset, uint32 b, int mode, PlayingSoundHandle
|
||||||
_mouthSyncMode = true;
|
_mouthSyncMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
startSfxSound(_sfxFile, size, handle, id);
|
if (!_soundsPaused && _scumm->_mixer->isReady())
|
||||||
|
startSfxSound(_sfxFile, size, handle, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sound::stopTalkSound() {
|
void Sound::stopTalkSound() {
|
||||||
|
@ -794,9 +795,6 @@ void Sound::pauseSounds(bool pause) {
|
||||||
|
|
||||||
void Sound::startSfxSound(File *file, int file_size, PlayingSoundHandle *handle, int id) {
|
void Sound::startSfxSound(File *file, int file_size, PlayingSoundHandle *handle, int id) {
|
||||||
|
|
||||||
if (_soundsPaused || !_scumm->_mixer->isReady())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (file_size > 0) {
|
if (file_size > 0) {
|
||||||
if (_vorbis_mode) {
|
if (_vorbis_mode) {
|
||||||
#ifdef USE_VORBIS
|
#ifdef USE_VORBIS
|
||||||
|
@ -815,9 +813,7 @@ void Sound::startSfxSound(File *file, int file_size, PlayingSoundHandle *handle,
|
||||||
byte *data = loadVOCFile(_sfxFile, size, rate);
|
byte *data = loadVOCFile(_sfxFile, size, rate);
|
||||||
|
|
||||||
if (_scumm->_imuseDigital) {
|
if (_scumm->_imuseDigital) {
|
||||||
_scumm->_imuseDigital->setVocVoice(data, size, rate);
|
_scumm->_imuseDigital->startSound(kTalkSoundID, data, size, rate);
|
||||||
_scumm->_imuseDigital->startSound(kTalkSoundID);
|
|
||||||
free(data);
|
|
||||||
} else {
|
} else {
|
||||||
_scumm->_mixer->playRaw(handle, data, size, rate, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_UNSIGNED, id);
|
_scumm->_mixer->playRaw(handle, data, size, rate, SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_UNSIGNED, id);
|
||||||
}
|
}
|
||||||
|
@ -832,7 +828,8 @@ File *Sound::openSfxFile() {
|
||||||
* same directory */
|
* same directory */
|
||||||
offset_table = NULL;
|
offset_table = NULL;
|
||||||
|
|
||||||
// for now until better streaming will be, ft voice can't not be compressed
|
// FIXME / TODO / HACK: for FT voice can only be loaded from original .sou
|
||||||
|
// files, not .so3 or .sog. This will be so until IMuseDigital gets fixed.
|
||||||
if (_scumm->_imuseDigital) {
|
if (_scumm->_imuseDigital) {
|
||||||
sprintf(buf, "%s.sou", _scumm->getGameName());
|
sprintf(buf, "%s.sou", _scumm->getGameName());
|
||||||
if (!file->open(buf, _scumm->getGameDataPath())) {
|
if (!file->open(buf, _scumm->getGameDataPath())) {
|
||||||
|
|
|
@ -21,6 +21,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
#include "common/config-manager.h"
|
||||||
|
|
||||||
#include "scumm/scumm.h"
|
#include "scumm/scumm.h"
|
||||||
#include "scumm/actor.h"
|
#include "scumm/actor.h"
|
||||||
#include "scumm/charset.h"
|
#include "scumm/charset.h"
|
||||||
|
@ -316,9 +319,9 @@ void ScummEngine::CHARSET_1() {
|
||||||
if (_version <= 3) {
|
if (_version <= 3) {
|
||||||
_charset->printChar(c);
|
_charset->printChar(c);
|
||||||
} else {
|
} else {
|
||||||
if ((_gameId == GID_LOOM256) && _noSubtitles && (_sound->pollCD())) {
|
if ((_gameId == GID_LOOM256) && !ConfMan.getBool("subtitles") && (_sound->pollCD())) {
|
||||||
// Special case for loomcd, since it only uses CD audio.for sound
|
// Special case for loomcd, since it only uses CD audio.for sound
|
||||||
} else if (_noSubtitles && (_haveMsg == 0xFE || _sound->_talkChannelHandle.isActive())) {
|
} else if (!ConfMan.getBool("subtitles") && (_haveMsg == 0xFE || _sound->_talkChannelHandle.isActive())) {
|
||||||
// Subtitles are turned off, and there is a voice version
|
// Subtitles are turned off, and there is a voice version
|
||||||
// of this message -> don't print it.
|
// of this message -> don't print it.
|
||||||
} else
|
} else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue