DREAMWEB: Objectify Sound functions & data into DreamWebSound class.
This change should have no functional change, but makes the sound code more decoupled, modular and readable, prior to attempting a fix for bug #3528164 - "DREAMWEB: missing sound effects/music cues during main title".
This commit is contained in:
parent
8860a83bf8
commit
628cfa3d47
17 changed files with 277 additions and 210 deletions
|
@ -35,6 +35,7 @@
|
|||
#include "graphics/palette.h"
|
||||
#include "graphics/surface.h"
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -46,21 +47,15 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam
|
|||
_roomDesc(kNumRoomTexts), _freeDesc(kNumFreeTexts),
|
||||
_personText(kNumPersonTexts) {
|
||||
|
||||
// Setup mixer
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume"));
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume"));
|
||||
|
||||
_vSyncInterrupt = false;
|
||||
|
||||
_console = 0;
|
||||
_sound = 0;
|
||||
DebugMan.addDebugChannel(kDebugAnimation, "Animation", "Animation Debug Flag");
|
||||
DebugMan.addDebugChannel(kDebugSaveLoad, "SaveLoad", "Track Save/Load Function");
|
||||
_speed = 1;
|
||||
_turbo = false;
|
||||
_oldMouseState = 0;
|
||||
_channel0 = 0;
|
||||
_channel1 = 0;
|
||||
|
||||
_datafilePrefix = "DREAMWEB.";
|
||||
_speechDirName = "SPEECH";
|
||||
|
@ -85,16 +80,6 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam
|
|||
_openChangeSize = kInventx+(4*kItempicsize);
|
||||
_quitRequested = false;
|
||||
|
||||
_currentSample = 0xff;
|
||||
_channel0Playing = 0;
|
||||
_channel0Repeat = 0;
|
||||
_channel1Playing = 0xff;
|
||||
|
||||
_volume = 0;
|
||||
_volumeTo = 0;
|
||||
_volumeDirection = 0;
|
||||
_volumeCount = 0;
|
||||
|
||||
_speechLoaded = false;
|
||||
|
||||
_backdropBlocks = 0;
|
||||
|
@ -246,6 +231,7 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam
|
|||
DreamWebEngine::~DreamWebEngine() {
|
||||
DebugMan.clearAllDebugChannels();
|
||||
delete _console;
|
||||
delete _sound;
|
||||
}
|
||||
|
||||
static void vSyncInterrupt(void *refCon) {
|
||||
|
@ -286,7 +272,7 @@ void DreamWebEngine::processEvents() {
|
|||
return;
|
||||
}
|
||||
|
||||
soundHandler();
|
||||
_sound->soundHandler();
|
||||
Common::Event event;
|
||||
int softKey, hardKey;
|
||||
while (_eventMan->pollEvent(event)) {
|
||||
|
@ -382,6 +368,7 @@ void DreamWebEngine::processEvents() {
|
|||
Common::Error DreamWebEngine::run() {
|
||||
syncSoundSettings();
|
||||
_console = new DreamWebConsole(this);
|
||||
_sound = new DreamWebSound(this);
|
||||
|
||||
ConfMan.registerDefault("originalsaveload", "false");
|
||||
ConfMan.registerDefault("bright_palette", true);
|
||||
|
|
|
@ -99,10 +99,12 @@ enum {
|
|||
};
|
||||
|
||||
struct DreamWebGameDescription;
|
||||
class DreamWebSound;
|
||||
|
||||
class DreamWebEngine : public Engine {
|
||||
private:
|
||||
DreamWebConsole *_console;
|
||||
DreamWebSound *_sound;
|
||||
bool _vSyncInterrupt;
|
||||
|
||||
protected:
|
||||
|
@ -142,7 +144,6 @@ public:
|
|||
|
||||
void quit();
|
||||
|
||||
void loadSounds(uint bank, const Common::String &suffix);
|
||||
bool loadSpeech(const Common::String &filename);
|
||||
|
||||
void enableSavingOrLoading(bool enable = true) { _enableSavingOrLoading = enable; }
|
||||
|
@ -151,15 +152,12 @@ public:
|
|||
uint8 modifyChar(uint8 c) const;
|
||||
Common::String modifyFileName(const char *);
|
||||
|
||||
void stopSound(uint8 channel);
|
||||
|
||||
const Common::String& getDatafilePrefix() { return _datafilePrefix; };
|
||||
const Common::String& getSpeechDirName() { return _speechDirName; };
|
||||
|
||||
private:
|
||||
void keyPressed(uint16 ascii);
|
||||
void setSpeed(uint speed);
|
||||
void soundHandler();
|
||||
void playSound(uint8 channel, uint8 id, uint8 loops);
|
||||
|
||||
const DreamWebGameDescription *_gameDescription;
|
||||
Common::RandomSource _rnd;
|
||||
|
@ -171,22 +169,6 @@ private:
|
|||
uint _oldMouseState;
|
||||
bool _enableSavingOrLoading;
|
||||
|
||||
struct Sample {
|
||||
uint offset;
|
||||
uint size;
|
||||
Sample(): offset(), size() {}
|
||||
};
|
||||
|
||||
struct SoundData {
|
||||
Common::Array<Sample> samples;
|
||||
Common::Array<uint8> data;
|
||||
};
|
||||
SoundData _soundData[2];
|
||||
Common::Array<uint8> _speechData;
|
||||
|
||||
Audio::SoundHandle _channelHandle[2];
|
||||
uint8 _channel0, _channel1;
|
||||
|
||||
protected:
|
||||
GameVars _vars; // saved variables
|
||||
|
||||
|
@ -327,16 +309,6 @@ public:
|
|||
|
||||
// sound related
|
||||
uint8 _roomsSample;
|
||||
uint8 _currentSample;
|
||||
uint8 _channel0Playing;
|
||||
uint8 _channel0Repeat;
|
||||
uint8 _channel1Playing;
|
||||
|
||||
uint8 _volume;
|
||||
uint8 _volumeTo;
|
||||
int8 _volumeDirection;
|
||||
uint8 _volumeCount;
|
||||
|
||||
bool _speechLoaded;
|
||||
|
||||
// misc variables
|
||||
|
@ -715,15 +687,6 @@ public:
|
|||
void showSaveOps();
|
||||
void showLoadOps();
|
||||
|
||||
// from sound.cpp
|
||||
bool loadSpeech(byte type1, int idx1, byte type2, int idx2);
|
||||
void volumeAdjust();
|
||||
void cancelCh0();
|
||||
void cancelCh1();
|
||||
void loadRoomsSample();
|
||||
void playChannel0(uint8 index, uint8 repeat);
|
||||
void playChannel1(uint8 index);
|
||||
|
||||
// from sprite.cpp
|
||||
void printSprites();
|
||||
void printASprite(const Sprite *sprite);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -85,7 +86,7 @@ void DreamWebEngine::enterCode(uint8 digit0, uint8 digit1, uint8 digit2, uint8 d
|
|||
if (_pressed == 11) {
|
||||
if (isItRight(digit0, digit1, digit2, digit3))
|
||||
_vars._lockStatus = 0;
|
||||
playChannel1(11);
|
||||
_sound->playChannel1(11);
|
||||
_lightCount = 120;
|
||||
_pressPointer = 0;
|
||||
}
|
||||
|
@ -180,7 +181,7 @@ void DreamWebEngine::buttonPress(uint8 buttonId) {
|
|||
_graphicPress = buttonId + 21;
|
||||
_pressCount = 40;
|
||||
if (buttonId != 11)
|
||||
playChannel1(10);
|
||||
_sound->playChannel1(10);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -532,7 +533,7 @@ void DreamWebEngine::enterSymbol() {
|
|||
_symbolGraphics.clear();
|
||||
restoreReels();
|
||||
workToScreenM();
|
||||
playChannel1(13);
|
||||
_sound->playChannel1(13);
|
||||
} else {
|
||||
removeSetObject(46);
|
||||
placeSetObject(43);
|
||||
|
@ -820,7 +821,7 @@ void DreamWebEngine::diaryKeyP() {
|
|||
_pressCount)
|
||||
return; // notkeyp
|
||||
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
_pressCount = 12;
|
||||
_pressed = 'P';
|
||||
_diaryPage--;
|
||||
|
@ -837,7 +838,7 @@ void DreamWebEngine::diaryKeyN() {
|
|||
_pressCount)
|
||||
return; // notkeyn
|
||||
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
_pressCount = 12;
|
||||
_pressed = 'N';
|
||||
_diaryPage++;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -97,7 +98,7 @@ void DreamWebEngine::useMon() {
|
|||
_textFile3.clear();
|
||||
|
||||
_getBack = 1;
|
||||
playChannel1(26);
|
||||
_sound->playChannel1(26);
|
||||
_manIsOffScreen = 0;
|
||||
restoreAll();
|
||||
redrawMainScrn();
|
||||
|
@ -180,7 +181,7 @@ void DreamWebEngine::monitorLogo() {
|
|||
printLogo();
|
||||
//fadeUpMon(); // FIXME: Commented out in ASM
|
||||
printLogo();
|
||||
playChannel1(26);
|
||||
_sound->playChannel1(26);
|
||||
randomAccess(20);
|
||||
} else {
|
||||
printLogo();
|
||||
|
@ -288,7 +289,7 @@ void DreamWebEngine::scrollMonitor() {
|
|||
printLogo();
|
||||
printUnderMonitor();
|
||||
workToScreen();
|
||||
playChannel1(25);
|
||||
_sound->playChannel1(25);
|
||||
}
|
||||
|
||||
void DreamWebEngine::showCurrentFile() {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -55,7 +56,7 @@ void DreamWebEngine::selectLocation() {
|
|||
_pointerFrame = 0;
|
||||
showPointer();
|
||||
workToScreen();
|
||||
playChannel0(9, 255);
|
||||
_sound->playChannel0(9, 255);
|
||||
_newLocation = 255;
|
||||
|
||||
while (_newLocation == 255) {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -149,7 +150,7 @@ void DreamWebEngine::madmanText() {
|
|||
if (hasSpeech()) {
|
||||
if (_speechCount > 15)
|
||||
return;
|
||||
if (_channel1Playing != 255)
|
||||
if (_sound->isChannel1Playing())
|
||||
return;
|
||||
origCount = _speechCount;
|
||||
++_speechCount;
|
||||
|
@ -250,7 +251,7 @@ bool DreamWebEngine::checkSpeed(ReelRoutine &routine) {
|
|||
|
||||
void DreamWebEngine::sparkyDrip(ReelRoutine &routine) {
|
||||
if (checkSpeed(routine))
|
||||
playChannel0(14, 0);
|
||||
_sound->playChannel0(14, 0);
|
||||
}
|
||||
|
||||
void DreamWebEngine::genericPerson(ReelRoutine &routine) {
|
||||
|
@ -430,7 +431,7 @@ void DreamWebEngine::drinker(ReelRoutine &routine) {
|
|||
void DreamWebEngine::alleyBarkSound(ReelRoutine &routine) {
|
||||
uint16 prevReelPointer = routine.reelPointer() - 1;
|
||||
if (prevReelPointer == 0) {
|
||||
playChannel1(14);
|
||||
_sound->playChannel1(14);
|
||||
routine.setReelPointer(1000);
|
||||
} else {
|
||||
routine.setReelPointer(prevReelPointer);
|
||||
|
@ -523,7 +524,7 @@ void DreamWebEngine::gates(ReelRoutine &routine) {
|
|||
if (checkSpeed(routine)) {
|
||||
uint16 nextReelPointer = routine.reelPointer() + 1;
|
||||
if (nextReelPointer == 116)
|
||||
playChannel1(17);
|
||||
_sound->playChannel1(17);
|
||||
if (nextReelPointer >= 110)
|
||||
routine.period = 2;
|
||||
if (nextReelPointer == 120) {
|
||||
|
@ -579,12 +580,12 @@ void DreamWebEngine::carParkDrip(ReelRoutine &routine) {
|
|||
if (!checkSpeed(routine))
|
||||
return; // cantdrip2
|
||||
|
||||
playChannel1(14);
|
||||
_sound->playChannel1(14);
|
||||
}
|
||||
|
||||
void DreamWebEngine::foghornSound(ReelRoutine &routine) {
|
||||
if (randomNumber() == 198)
|
||||
playChannel1(13);
|
||||
_sound->playChannel1(13);
|
||||
}
|
||||
|
||||
void DreamWebEngine::train(ReelRoutine &routine) {
|
||||
|
@ -1027,8 +1028,7 @@ void DreamWebEngine::endGameSeq(ReelRoutine &routine) {
|
|||
fadeScreenDownHalf();
|
||||
} else if (nextReelPointer == 324) {
|
||||
fadeScreenDowns();
|
||||
_volumeTo = 7;
|
||||
_volumeDirection = 1;
|
||||
_sound->volumeChange(7, 1);
|
||||
}
|
||||
|
||||
if (nextReelPointer == 340)
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -246,10 +247,9 @@ const char *DreamWebEngine::monPrint(const char *string) {
|
|||
}
|
||||
|
||||
void DreamWebEngine::rollEndCreditsGameWon() {
|
||||
playChannel0(16, 255);
|
||||
_volume = 7;
|
||||
_volumeTo = 0;
|
||||
_volumeDirection = -1;
|
||||
_sound->playChannel0(16, 255);
|
||||
_sound->volumeSet(7);
|
||||
_sound->volumeChange(0, -1);
|
||||
|
||||
multiGet(_mapStore, 75, 20, 160, 160);
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -50,7 +51,7 @@ void DreamWebEngine::showRain() {
|
|||
}
|
||||
}
|
||||
|
||||
if (_channel1Playing != 255)
|
||||
if (_sound->isChannel1Playing())
|
||||
return;
|
||||
if (_realLocation == 2 && _vars._beenMugged != 1)
|
||||
return;
|
||||
|
@ -61,11 +62,11 @@ void DreamWebEngine::showRain() {
|
|||
return;
|
||||
|
||||
uint8 soundIndex;
|
||||
if (_channel0Playing != 6)
|
||||
if (_sound->getChannel0Playing() != 6)
|
||||
soundIndex = 4;
|
||||
else
|
||||
soundIndex = 7;
|
||||
playChannel1(soundIndex);
|
||||
_sound->playChannel1(soundIndex);
|
||||
}
|
||||
|
||||
uint8 DreamWebEngine::getBlockOfPixel(uint8 x, uint8 y) {
|
||||
|
|
|
@ -20,7 +20,9 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
#include "engines/metaengine.h"
|
||||
#include "graphics/thumbnail.h"
|
||||
#include "gui/saveload.h"
|
||||
|
@ -181,7 +183,7 @@ void DreamWebEngine::doLoad(int savegameId) {
|
|||
_saveGraphics.clear();
|
||||
|
||||
startLoading(g_madeUpRoomDat);
|
||||
loadRoomsSample();
|
||||
_sound->loadRoomsSample(_roomsSample);
|
||||
_roomLoaded = 1;
|
||||
_newLocation = 255;
|
||||
clearSprites();
|
||||
|
|
|
@ -20,27 +20,52 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
#include "audio/mixer.h"
|
||||
#include "audio/decoders/raw.h"
|
||||
|
||||
#include "common/config-manager.h"
|
||||
#include "common/debug.h"
|
||||
#include "common/file.h"
|
||||
|
||||
#include "dreamweb/dreamweb.h"
|
||||
#include "dreamweb/sound.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
||||
bool DreamWebEngine::loadSpeech(byte type1, int idx1, byte type2, int idx2) {
|
||||
DreamWebSound::DreamWebSound(DreamWebEngine *vm) : _vm(vm) {
|
||||
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume"));
|
||||
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume"));
|
||||
_vm->_mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume"));
|
||||
|
||||
_channel0 = 0;
|
||||
_channel1 = 0;
|
||||
|
||||
_currentSample = 0xff;
|
||||
_channel0Playing = 0;
|
||||
_channel0Repeat = 0;
|
||||
_channel1Playing = 255;
|
||||
|
||||
_volume = 0;
|
||||
_volumeTo = 0;
|
||||
_volumeDirection = 0;
|
||||
_volumeCount = 0;
|
||||
}
|
||||
|
||||
DreamWebSound::~DreamWebSound() {
|
||||
}
|
||||
|
||||
bool DreamWebSound::loadSpeech(byte type1, int idx1, byte type2, int idx2) {
|
||||
cancelCh1();
|
||||
|
||||
Common::String name = Common::String::format("%c%02d%c%04d.RAW", type1, idx1, type2, idx2);
|
||||
//debug("name = %s", name.c_str());
|
||||
bool result = loadSpeech(name);
|
||||
|
||||
_speechLoaded = result;
|
||||
return result;
|
||||
debug(2, "loadSpeech() name:%s", name.c_str());
|
||||
return loadSpeech(name);
|
||||
}
|
||||
|
||||
void DreamWebEngine::volumeAdjust() {
|
||||
void DreamWebSound::volumeChange(uint8 value, int8 direction) {
|
||||
_volumeTo = value;
|
||||
_volumeDirection = direction;
|
||||
}
|
||||
|
||||
void DreamWebSound::volumeAdjust() {
|
||||
if (_volumeDirection == 0)
|
||||
return;
|
||||
if (_volume != _volumeTo) {
|
||||
|
@ -53,34 +78,33 @@ void DreamWebEngine::volumeAdjust() {
|
|||
}
|
||||
}
|
||||
|
||||
void DreamWebEngine::playChannel0(uint8 index, uint8 repeat) {
|
||||
void DreamWebSound::playChannel0(uint8 index, uint8 repeat) {
|
||||
debug(1, "playChannel0(index:%d, repeat:%d)", index, repeat);
|
||||
_channel0Playing = index;
|
||||
_channel0Repeat = repeat;
|
||||
}
|
||||
|
||||
void DreamWebEngine::playChannel1(uint8 index) {
|
||||
void DreamWebSound::playChannel1(uint8 index) {
|
||||
if (_channel1Playing == 7)
|
||||
return;
|
||||
|
||||
_channel1Playing = index;
|
||||
}
|
||||
|
||||
void DreamWebEngine::cancelCh0() {
|
||||
void DreamWebSound::cancelCh0() {
|
||||
debug(1, "cancelCh0()");
|
||||
_channel0Playing = 255;
|
||||
_channel0Repeat = 0;
|
||||
stopSound(0);
|
||||
}
|
||||
|
||||
void DreamWebEngine::cancelCh1() {
|
||||
void DreamWebSound::cancelCh1() {
|
||||
_channel1Playing = 255;
|
||||
stopSound(1);
|
||||
}
|
||||
|
||||
void DreamWebEngine::loadRoomsSample() {
|
||||
debug(1, "loadRoomsSample() _roomsSample:%d", _roomsSample);
|
||||
uint8 sample = _roomsSample;
|
||||
void DreamWebSound::loadRoomsSample(uint8 sample) {
|
||||
debug(1, "loadRoomsSample(sample:%d)", sample);
|
||||
|
||||
if (sample == 255 || _currentSample == sample)
|
||||
return; // loaded already
|
||||
|
@ -98,7 +122,7 @@ void DreamWebEngine::loadRoomsSample() {
|
|||
loadSounds(1, sampleSuffix.c_str());
|
||||
}
|
||||
|
||||
void DreamWebEngine::playSound(uint8 channel, uint8 id, uint8 loops) {
|
||||
void DreamWebSound::playSound(uint8 channel, uint8 id, uint8 loops) {
|
||||
debug(1, "playSound(%u, %u, %u)", channel, id, loops);
|
||||
|
||||
int bank = 0;
|
||||
|
@ -149,27 +173,27 @@ void DreamWebEngine::playSound(uint8 channel, uint8 id, uint8 loops) {
|
|||
} else
|
||||
stream = raw;
|
||||
|
||||
if (_mixer->isSoundHandleActive(_channelHandle[channel]))
|
||||
_mixer->stopHandle(_channelHandle[channel]);
|
||||
_mixer->playStream(type, &_channelHandle[channel], stream);
|
||||
if (_vm->_mixer->isSoundHandleActive(_channelHandle[channel]))
|
||||
_vm->_mixer->stopHandle(_channelHandle[channel]);
|
||||
_vm->_mixer->playStream(type, &_channelHandle[channel], stream);
|
||||
}
|
||||
|
||||
void DreamWebEngine::stopSound(uint8 channel) {
|
||||
void DreamWebSound::stopSound(uint8 channel) {
|
||||
debug(1, "stopSound(%u)", channel);
|
||||
assert(channel == 0 || channel == 1);
|
||||
_mixer->stopHandle(_channelHandle[channel]);
|
||||
_vm->_mixer->stopHandle(_channelHandle[channel]);
|
||||
if (channel == 0)
|
||||
_channel0 = 0;
|
||||
else
|
||||
_channel1 = 0;
|
||||
}
|
||||
|
||||
bool DreamWebEngine::loadSpeech(const Common::String &filename) {
|
||||
if (!hasSpeech())
|
||||
bool DreamWebSound::loadSpeech(const Common::String &filename) {
|
||||
if (!_vm->hasSpeech())
|
||||
return false;
|
||||
|
||||
Common::File file;
|
||||
if (!file.open(_speechDirName + "/" + filename))
|
||||
if (!file.open(_vm->getSpeechDirName() + "/" + filename))
|
||||
return false;
|
||||
|
||||
debug(1, "loadSpeech(%s)", filename.c_str());
|
||||
|
@ -181,13 +205,13 @@ bool DreamWebEngine::loadSpeech(const Common::String &filename) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void DreamWebEngine::soundHandler() {
|
||||
void DreamWebSound::soundHandler() {
|
||||
static uint8 volumeOld = 0, channel0Old = 0, channel0PlayingOld = 0;
|
||||
if (_volume != volumeOld || _channel0 != channel0Old || _channel0Playing != channel0PlayingOld)
|
||||
debug(1, "soundHandler() _volume: %d _channel0: %d _channel0Playing: %d", _volume, _channel0, _channel0Playing);
|
||||
volumeOld = _volume, channel0Old = _channel0, channel0PlayingOld = _channel0Playing;
|
||||
|
||||
_subtitles = ConfMan.getBool("subtitles");
|
||||
_vm->_subtitles = ConfMan.getBool("subtitles");
|
||||
volumeAdjust();
|
||||
|
||||
uint volume = _volume;
|
||||
|
@ -204,7 +228,7 @@ void DreamWebEngine::soundHandler() {
|
|||
if (volume >= 8)
|
||||
volume = 7;
|
||||
volume = (8 - volume) * Audio::Mixer::kMaxChannelVolume / 8;
|
||||
_mixer->setChannelVolume(_channelHandle[0], volume);
|
||||
_vm->_mixer->setChannelVolume(_channelHandle[0], volume);
|
||||
|
||||
uint8 ch0 = _channel0Playing;
|
||||
if (ch0 == 255)
|
||||
|
@ -226,20 +250,20 @@ void DreamWebEngine::soundHandler() {
|
|||
playSound(1, ch1, 1);
|
||||
}
|
||||
}
|
||||
if (!_mixer->isSoundHandleActive(_channelHandle[0])) {
|
||||
if (!_vm->_mixer->isSoundHandleActive(_channelHandle[0])) {
|
||||
if (_channel0Playing != 255 && _channel0 != 0)
|
||||
debug(1, "!_mixer->isSoundHandleActive _channelHandle[0] _channel0Playing:%d _channel0:%d", _channel0Playing, _channel0);
|
||||
_channel0Playing = 255;
|
||||
_channel0 = 0;
|
||||
}
|
||||
if (!_mixer->isSoundHandleActive(_channelHandle[1])) {
|
||||
if (!_vm->_mixer->isSoundHandleActive(_channelHandle[1])) {
|
||||
_channel1Playing = 255;
|
||||
_channel1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DreamWebEngine::loadSounds(uint bank, const Common::String &suffix) {
|
||||
Common::String filename = getDatafilePrefix() + suffix;
|
||||
void DreamWebSound::loadSounds(uint bank, const Common::String &suffix) {
|
||||
Common::String filename = _vm->getDatafilePrefix() + suffix;
|
||||
debug(1, "loadSounds(%u, %s)", bank, filename.c_str());
|
||||
Common::File file;
|
||||
if (!file.open(filename)) {
|
||||
|
|
91
engines/dreamweb/sound.h
Normal file
91
engines/dreamweb/sound.h
Normal file
|
@ -0,0 +1,91 @@
|
|||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DREAMWEB_SOUND_H
|
||||
#define DREAMWEB_SOUND_H
|
||||
|
||||
#include "common/array.h"
|
||||
#include "common/str.h"
|
||||
#include "audio/mixer.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
||||
class DreamWebEngine;
|
||||
|
||||
class DreamWebSound {
|
||||
public:
|
||||
DreamWebSound(DreamWebEngine *vm);
|
||||
~DreamWebSound();
|
||||
|
||||
bool loadSpeech(byte type1, int idx1, byte type2, int idx2);
|
||||
void volumeSet(uint8 value) { _volume = value; }
|
||||
void volumeChange(uint8 value, int8 direction);
|
||||
void playChannel0(uint8 index, uint8 repeat);
|
||||
void playChannel1(uint8 index);
|
||||
uint8 getChannel0Playing() { return _channel0Playing; }
|
||||
bool isChannel1Playing() { return _channel1Playing != 255; }
|
||||
void cancelCh0();
|
||||
void cancelCh1();
|
||||
void loadRoomsSample(uint8 sample);
|
||||
void soundHandler();
|
||||
void loadSounds(uint bank, const Common::String &suffix);
|
||||
|
||||
private:
|
||||
DreamWebEngine *_vm;
|
||||
|
||||
struct Sample {
|
||||
uint offset;
|
||||
uint size;
|
||||
Sample(): offset(), size() {}
|
||||
};
|
||||
|
||||
struct SoundData {
|
||||
Common::Array<Sample> samples;
|
||||
Common::Array<uint8> data;
|
||||
};
|
||||
|
||||
SoundData _soundData[2];
|
||||
Common::Array<uint8> _speechData;
|
||||
|
||||
Audio::SoundHandle _channelHandle[2];
|
||||
|
||||
uint8 _channel0, _channel1;
|
||||
|
||||
uint8 _currentSample;
|
||||
uint8 _channel0Playing;
|
||||
uint8 _channel0Repeat;
|
||||
uint8 _channel1Playing;
|
||||
|
||||
uint8 _volume;
|
||||
uint8 _volumeTo;
|
||||
int8 _volumeDirection;
|
||||
uint8 _volumeCount;
|
||||
|
||||
void volumeAdjust();
|
||||
void playSound(uint8 channel, uint8 id, uint8 loops);
|
||||
void stopSound(uint8 channel);
|
||||
bool loadSpeech(const Common::String &filename);
|
||||
};
|
||||
|
||||
} // End of namespace DreamWeb
|
||||
|
||||
#endif
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -298,7 +299,7 @@ void DreamWebEngine::doDoor(Sprite *sprite, SetObject *objData, Common::Rect che
|
|||
soundIndex = 13;
|
||||
else
|
||||
soundIndex = 0;
|
||||
playChannel1(soundIndex);
|
||||
_sound->playChannel1(soundIndex);
|
||||
}
|
||||
if (objData->frames[sprite->animFrame] == 255)
|
||||
--sprite->animFrame;
|
||||
|
@ -315,7 +316,7 @@ void DreamWebEngine::doDoor(Sprite *sprite, SetObject *objData, Common::Rect che
|
|||
soundIndex = 13;
|
||||
else
|
||||
soundIndex = 1;
|
||||
playChannel1(soundIndex);
|
||||
_sound->playChannel1(soundIndex);
|
||||
}
|
||||
if (sprite->animFrame != 0)
|
||||
--sprite->animFrame;
|
||||
|
@ -346,7 +347,7 @@ void DreamWebEngine::lockedDoorway(Sprite *sprite, SetObject *objData) {
|
|||
if (openDoor) {
|
||||
|
||||
if (sprite->animFrame == 1) {
|
||||
playChannel1(0);
|
||||
_sound->playChannel1(0);
|
||||
}
|
||||
|
||||
if (sprite->animFrame == 6)
|
||||
|
@ -367,7 +368,7 @@ void DreamWebEngine::lockedDoorway(Sprite *sprite, SetObject *objData) {
|
|||
// shut door
|
||||
|
||||
if (sprite->animFrame == 5) {
|
||||
playChannel1(1);
|
||||
_sound->playChannel1(1);
|
||||
}
|
||||
|
||||
if (sprite->animFrame != 0)
|
||||
|
@ -505,7 +506,7 @@ void DreamWebEngine::intro1Text() {
|
|||
if (_introCount != 2 && _introCount != 4 && _introCount != 6)
|
||||
return;
|
||||
|
||||
if (hasSpeech() && _channel1Playing != 255) {
|
||||
if (hasSpeech() && _sound->isChannel1Playing()) {
|
||||
_introCount--;
|
||||
} else {
|
||||
if (_introCount == 2)
|
||||
|
@ -578,7 +579,7 @@ void DreamWebEngine::textForEnd() {
|
|||
}
|
||||
|
||||
void DreamWebEngine::textForMonkHelper(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount) {
|
||||
if (hasSpeech() && _channel1Playing != 255)
|
||||
if (hasSpeech() && _sound->isChannel1Playing())
|
||||
_introCount--;
|
||||
else
|
||||
setupTimedTemp(textIndex, voiceIndex, x, y, countToTimed, timeCount);
|
||||
|
@ -614,8 +615,7 @@ void DreamWebEngine::textForMonk() {
|
|||
else if (_introCount == 53) {
|
||||
fadeScreenDowns();
|
||||
if (hasSpeech()) {
|
||||
_volumeTo = 7;
|
||||
_volumeDirection = 1;
|
||||
_sound->volumeChange(7, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -905,14 +905,14 @@ void DreamWebEngine::soundOnReels(uint16 reelPointer) {
|
|||
continue;
|
||||
_lastSoundReel = r->_reelPointer;
|
||||
if (r->_sample < 64) {
|
||||
playChannel1(r->_sample);
|
||||
_sound->playChannel1(r->_sample);
|
||||
return;
|
||||
}
|
||||
if (r->_sample < 128) {
|
||||
playChannel0(r->_sample & 63, 0);
|
||||
_sound->playChannel0(r->_sample & 63, 0);
|
||||
return;
|
||||
}
|
||||
playChannel0(r->_sample & 63, 255);
|
||||
_sound->playChannel0(r->_sample & 63, 255);
|
||||
}
|
||||
|
||||
if (_lastSoundReel != reelPointer)
|
||||
|
@ -955,9 +955,9 @@ void DreamWebEngine::getRidOfReels() {
|
|||
|
||||
void DreamWebEngine::liftNoise(uint8 index) {
|
||||
if (_realLocation == 5 || _realLocation == 21)
|
||||
playChannel1(13); // hiss noise
|
||||
_sound->playChannel1(13); // hiss noise
|
||||
else
|
||||
playChannel1(index);
|
||||
_sound->playChannel1(index);
|
||||
}
|
||||
|
||||
void DreamWebEngine::checkForExit(Sprite *sprite) {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
#include "common/config-manager.h"
|
||||
|
||||
|
@ -578,7 +579,7 @@ void DreamWebEngine::dreamweb() {
|
|||
readSetData();
|
||||
_wonGame = false;
|
||||
|
||||
loadSounds(0, "V99"); // basic sample
|
||||
_sound->loadSounds(0, "V99"); // basic sample
|
||||
|
||||
bool firstLoop = true;
|
||||
|
||||
|
@ -654,7 +655,7 @@ void DreamWebEngine::dreamweb() {
|
|||
_vars._location = 255;
|
||||
_vars._roomAfterDream = 1;
|
||||
_newLocation = 35;
|
||||
_volume = 7;
|
||||
_sound->volumeSet(7);
|
||||
loadRoom();
|
||||
clearSprites();
|
||||
initMan();
|
||||
|
@ -664,8 +665,7 @@ void DreamWebEngine::dreamweb() {
|
|||
initialInv();
|
||||
_lastFlag = 32;
|
||||
startup1();
|
||||
_volumeTo = 0;
|
||||
_volumeDirection = -1;
|
||||
_sound->volumeChange(0, -1);
|
||||
_commandType = 255;
|
||||
}
|
||||
|
||||
|
@ -930,7 +930,7 @@ void DreamWebEngine::processTrigger() {
|
|||
void DreamWebEngine::useTimedText() {
|
||||
if (_previousTimedTemp._string) {
|
||||
// TODO: It might be nice to make subtitles wait for the speech
|
||||
// to finish (_channel1Playing) when we're in speech+subtitles mode,
|
||||
// to finish (_sound->isChannel1Playing()) when we're in speech+subtitles mode,
|
||||
// instead of waiting the pre-specified amount of time.
|
||||
|
||||
|
||||
|
@ -967,9 +967,9 @@ void DreamWebEngine::useTimedText() {
|
|||
void DreamWebEngine::setupTimedTemp(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount) {
|
||||
|
||||
if (hasSpeech() && voiceIndex != 0) {
|
||||
if (loadSpeech('T', voiceIndex, 'T', textIndex)) {
|
||||
playChannel1(50+12);
|
||||
}
|
||||
_speechLoaded = _sound->loadSpeech('T', voiceIndex, 'T', textIndex);
|
||||
if (_speechLoaded)
|
||||
_sound->playChannel1(50+12);
|
||||
|
||||
if (_speechLoaded && !_subtitles)
|
||||
return;
|
||||
|
@ -1846,7 +1846,7 @@ void DreamWebEngine::loadRoom() {
|
|||
_vars._location = _newLocation;
|
||||
const Room &room = g_roomData[_newLocation];
|
||||
startLoading(room);
|
||||
loadRoomsSample();
|
||||
_sound->loadRoomsSample(_roomsSample);
|
||||
switchRyanOn();
|
||||
drawFlags();
|
||||
|
||||
|
@ -2146,12 +2146,12 @@ void DreamWebEngine::atmospheres() {
|
|||
continue;
|
||||
if (a->_mapX != _mapX || a->_mapY != _mapY)
|
||||
continue;
|
||||
if (a->_sound != _channel0Playing) {
|
||||
if (a->_sound != _sound->getChannel0Playing()) {
|
||||
|
||||
if (_vars._location == 45 && _vars._reelToWatch == 45)
|
||||
continue; // "web"
|
||||
|
||||
playChannel0(a->_sound, a->_repeat);
|
||||
_sound->playChannel0(a->_sound, a->_repeat);
|
||||
|
||||
// NB: The asm here reads
|
||||
// cmp reallocation,2
|
||||
|
@ -2161,21 +2161,21 @@ void DreamWebEngine::atmospheres() {
|
|||
// I'm interpreting this as if the cmp reallocation is below the jz
|
||||
|
||||
if (_mapY == 0) {
|
||||
_volume = 0; // "fullvol"
|
||||
_sound->volumeSet(0); // "fullvol"
|
||||
return;
|
||||
}
|
||||
|
||||
if (_realLocation == 2 && _mapX == 22 && _mapY == 10)
|
||||
_volume = 5; // "louisvol"
|
||||
_sound->volumeSet(5); // "louisvol"
|
||||
|
||||
if (hasSpeech() && _realLocation == 14) {
|
||||
if (_mapX == 33) {
|
||||
_volume = 0; // "ismad2"
|
||||
_sound->volumeSet(0); // "ismad2"
|
||||
return;
|
||||
}
|
||||
|
||||
if (_mapX == 22) {
|
||||
_volume = 5;
|
||||
_sound->volumeSet(5);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2184,19 +2184,19 @@ void DreamWebEngine::atmospheres() {
|
|||
|
||||
if (_realLocation == 2) {
|
||||
if (_mapX == 22) {
|
||||
_volume = 5; // "louisvol"
|
||||
_sound->volumeSet(5); // "louisvol"
|
||||
return;
|
||||
}
|
||||
|
||||
if (_mapX == 11) {
|
||||
_volume = 0; // "fullvol"
|
||||
_sound->volumeSet(0); // "fullvol"
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
cancelCh0();
|
||||
_sound->cancelCh0();
|
||||
}
|
||||
|
||||
void DreamWebEngine::readKey() {
|
||||
|
@ -2642,8 +2642,8 @@ void DreamWebEngine::showGun() {
|
|||
_numToFade = 128;
|
||||
hangOn(200);
|
||||
_roomsSample = 34;
|
||||
loadRoomsSample();
|
||||
_volume = 0;
|
||||
_sound->loadRoomsSample(_roomsSample);
|
||||
_sound->volumeSet(0);
|
||||
GraphicsFile graphics;
|
||||
loadGraphicsFile(graphics, "G13");
|
||||
createPanel2();
|
||||
|
@ -2653,7 +2653,7 @@ void DreamWebEngine::showGun() {
|
|||
graphics.clear();
|
||||
fadeScreenUp();
|
||||
hangOn(160);
|
||||
playChannel0(12, 0);
|
||||
_sound->playChannel0(12, 0);
|
||||
loadTempText("T83");
|
||||
rollEndCreditsGameLost();
|
||||
getRidOfTempText();
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -67,9 +68,8 @@ void DreamWebEngine::talk() {
|
|||
redrawMainScrn();
|
||||
workToScreenM();
|
||||
if (_speechLoaded) {
|
||||
cancelCh1();
|
||||
_volumeDirection = -1;
|
||||
_volumeTo = 0;
|
||||
_sound->cancelCh1();
|
||||
_sound->volumeChange(0, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,12 +99,10 @@ void DreamWebEngine::startTalk() {
|
|||
printDirect(&str, 66, &y, 241, true);
|
||||
|
||||
if (hasSpeech()) {
|
||||
_speechLoaded = false;
|
||||
loadSpeech('R', _realLocation, 'C', 64*(_character & 0x7F));
|
||||
_speechLoaded = _sound->loadSpeech('R', _realLocation, 'C', 64*(_character & 0x7F));
|
||||
if (_speechLoaded) {
|
||||
_volumeDirection = 1;
|
||||
_volumeTo = 6;
|
||||
playChannel1(50 + 12);
|
||||
_sound->volumeChange(6, 1);
|
||||
_sound->playChannel1(50 + 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -155,9 +153,9 @@ void DreamWebEngine::doSomeTalk() {
|
|||
|
||||
printDirect(str, 164, 64, 144, false);
|
||||
|
||||
loadSpeech('R', _realLocation, 'C', (64 * (_character & 0x7F)) + _talkPos);
|
||||
_speechLoaded = _sound->loadSpeech('R', _realLocation, 'C', (64 * (_character & 0x7F)) + _talkPos);
|
||||
if (_speechLoaded)
|
||||
playChannel1(62);
|
||||
_sound->playChannel1(62);
|
||||
|
||||
_pointerMode = 3;
|
||||
workToScreenM();
|
||||
|
@ -181,9 +179,9 @@ void DreamWebEngine::doSomeTalk() {
|
|||
convIcons();
|
||||
printDirect(str, 48, 128, 144, false);
|
||||
|
||||
loadSpeech('R', _realLocation, 'C', (64 * (_character & 0x7F)) + _talkPos);
|
||||
_speechLoaded = _sound->loadSpeech('R', _realLocation, 'C', (64 * (_character & 0x7F)) + _talkPos);
|
||||
if (_speechLoaded)
|
||||
playChannel1(62);
|
||||
_sound->playChannel1(62);
|
||||
|
||||
_pointerMode = 3;
|
||||
workToScreenM();
|
||||
|
@ -220,11 +218,11 @@ bool DreamWebEngine::hangOnPQ() {
|
|||
// Quit conversation
|
||||
delPointer();
|
||||
_pointerMode = 0;
|
||||
cancelCh1();
|
||||
_sound->cancelCh1();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_speechLoaded && _channel1Playing == 255) {
|
||||
if (_speechLoaded && !_sound->isChannel1Playing()) {
|
||||
speechFlag++;
|
||||
if (speechFlag == 40)
|
||||
break;
|
||||
|
@ -237,7 +235,7 @@ bool DreamWebEngine::hangOnPQ() {
|
|||
}
|
||||
|
||||
void DreamWebEngine::redes() {
|
||||
if (_channel1Playing != 255 || _talkMode != 2) {
|
||||
if (_sound->isChannel1Playing() || _talkMode != 2) {
|
||||
blank();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
#include "engines/util.h"
|
||||
|
||||
|
@ -32,38 +33,36 @@ void DreamWebEngine::endGame() {
|
|||
return;
|
||||
gettingShot();
|
||||
getRidOfTempText();
|
||||
_volumeTo = 7;
|
||||
_volumeDirection = 1;
|
||||
_sound->volumeChange(7, 1);
|
||||
hangOn(200);
|
||||
}
|
||||
|
||||
void DreamWebEngine::monkSpeaking() {
|
||||
_roomsSample = 35;
|
||||
loadRoomsSample();
|
||||
_sound->loadRoomsSample(_roomsSample);
|
||||
GraphicsFile graphics;
|
||||
loadGraphicsFile(graphics, "G15");
|
||||
clearWork();
|
||||
showFrame(graphics, 160, 72, 0, 128); // show monk
|
||||
workToScreen();
|
||||
_volume = 7;
|
||||
_volumeDirection = -1;
|
||||
_volumeTo = hasSpeech() ? 5 : 0;
|
||||
playChannel0(12, 255);
|
||||
_sound->volumeSet(7);
|
||||
_sound->volumeChange(hasSpeech() ? 5 : 0, -1);
|
||||
_sound->playChannel0(12, 255);
|
||||
fadeScreenUps();
|
||||
hangOn(300);
|
||||
|
||||
// TODO: Subtitles+speech mode
|
||||
if (hasSpeech()) {
|
||||
for (int i = 40; i < 48; i++) {
|
||||
loadSpeech('T', 83, 'T', i);
|
||||
_speechLoaded = _sound->loadSpeech('T', 83, 'T', i);
|
||||
|
||||
playChannel1(50 + 12);
|
||||
_sound->playChannel1(50 + 12);
|
||||
|
||||
do {
|
||||
waitForVSync();
|
||||
if (_quitRequested)
|
||||
return;
|
||||
} while (_channel1Playing != 255);
|
||||
} while (_sound->isChannel1Playing());
|
||||
}
|
||||
} else {
|
||||
for (int i = 40; i <= 44; i++) {
|
||||
|
@ -83,8 +82,7 @@ void DreamWebEngine::monkSpeaking() {
|
|||
}
|
||||
}
|
||||
|
||||
_volumeDirection = 1;
|
||||
_volumeTo = 7;
|
||||
_sound->volumeChange(7, 1);
|
||||
fadeScreenDowns();
|
||||
hangOn(300);
|
||||
graphics.clear();
|
||||
|
@ -95,8 +93,7 @@ void DreamWebEngine::gettingShot() {
|
|||
clearPalette();
|
||||
loadIntroRoom();
|
||||
fadeScreenUps();
|
||||
_volumeTo = 0;
|
||||
_volumeDirection = -1;
|
||||
_sound->volumeChange(0, -1);
|
||||
runEndSeq();
|
||||
clearBeforeLoad();
|
||||
}
|
||||
|
@ -127,7 +124,7 @@ void DreamWebEngine::bibleQuote() {
|
|||
return; // "biblequotearly"
|
||||
}
|
||||
|
||||
cancelCh0();
|
||||
_sound->cancelCh0();
|
||||
|
||||
_lastHardKey = 0;
|
||||
}
|
||||
|
@ -147,10 +144,9 @@ void DreamWebEngine::intro() {
|
|||
_newLocation = 50;
|
||||
clearPalette();
|
||||
loadIntroRoom();
|
||||
_volume = 7;
|
||||
_volumeDirection = -1;
|
||||
_volumeTo = hasSpeech() ? 4 : 0;
|
||||
playChannel0(12, 255);
|
||||
_sound->volumeSet(7);
|
||||
_sound->volumeChange(hasSpeech() ? 4 : 0, -1);
|
||||
_sound->playChannel0(12, 255);
|
||||
fadeScreenUps();
|
||||
runIntroSeq();
|
||||
|
||||
|
@ -286,14 +282,14 @@ void DreamWebEngine::set16ColPalette() {
|
|||
|
||||
void DreamWebEngine::realCredits() {
|
||||
_roomsSample = 33;
|
||||
loadRoomsSample();
|
||||
_volume = 0;
|
||||
_sound->loadRoomsSample(_roomsSample);
|
||||
_sound->volumeSet(0);
|
||||
|
||||
initGraphics(640, 480, true);
|
||||
hangOn(35);
|
||||
|
||||
showPCX("I01");
|
||||
playChannel0(12, 0);
|
||||
_sound->playChannel0(12, 0);
|
||||
|
||||
hangOne(2);
|
||||
|
||||
|
@ -319,7 +315,7 @@ void DreamWebEngine::realCredits() {
|
|||
}
|
||||
|
||||
showPCX("I02");
|
||||
playChannel0(12, 0);
|
||||
_sound->playChannel0(12, 0);
|
||||
hangOne(2);
|
||||
|
||||
if (_lastHardKey == 1) {
|
||||
|
@ -344,7 +340,7 @@ void DreamWebEngine::realCredits() {
|
|||
}
|
||||
|
||||
showPCX("I03");
|
||||
playChannel0(12, 0);
|
||||
_sound->playChannel0(12, 0);
|
||||
hangOne(2);
|
||||
|
||||
if (_lastHardKey == 1) {
|
||||
|
@ -369,7 +365,7 @@ void DreamWebEngine::realCredits() {
|
|||
}
|
||||
|
||||
showPCX("I04");
|
||||
playChannel0(12, 0);
|
||||
_sound->playChannel0(12, 0);
|
||||
hangOne(2);
|
||||
|
||||
if (_lastHardKey == 1) {
|
||||
|
@ -394,7 +390,7 @@ void DreamWebEngine::realCredits() {
|
|||
}
|
||||
|
||||
showPCX("I05");
|
||||
playChannel0(12, 0);
|
||||
_sound->playChannel0(12, 0);
|
||||
hangOne(2);
|
||||
|
||||
if (_lastHardKey == 1) {
|
||||
|
@ -427,7 +423,7 @@ void DreamWebEngine::realCredits() {
|
|||
return; // "realcreditsearly"
|
||||
}
|
||||
|
||||
playChannel0(13, 0);
|
||||
_sound->playChannel0(13, 0);
|
||||
hangOne(350);
|
||||
|
||||
if (_lastHardKey == 1) {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -201,13 +202,13 @@ void DreamWebEngine::edensCDPlayer() {
|
|||
}
|
||||
|
||||
void DreamWebEngine::hotelBell() {
|
||||
playChannel1(12);
|
||||
_sound->playChannel1(12);
|
||||
showFirstUse();
|
||||
putBackObStuff();
|
||||
}
|
||||
|
||||
void DreamWebEngine::playGuitar() {
|
||||
playChannel1(14);
|
||||
_sound->playChannel1(14);
|
||||
showFirstUse();
|
||||
putBackObStuff();
|
||||
}
|
||||
|
@ -273,13 +274,13 @@ void DreamWebEngine::useHatch() {
|
|||
}
|
||||
|
||||
void DreamWebEngine::wheelSound() {
|
||||
playChannel1(17);
|
||||
_sound->playChannel1(17);
|
||||
showFirstUse();
|
||||
putBackObStuff();
|
||||
}
|
||||
|
||||
void DreamWebEngine::callHotelLift() {
|
||||
playChannel1(12);
|
||||
_sound->playChannel1(12);
|
||||
showFirstUse();
|
||||
_vars._countToOpen = 8;
|
||||
_getBack = 1;
|
||||
|
@ -382,7 +383,7 @@ void DreamWebEngine::sitDownInBar() {
|
|||
}
|
||||
|
||||
void DreamWebEngine::useDryer() {
|
||||
playChannel1(12);
|
||||
_sound->playChannel1(12);
|
||||
showFirstUse();
|
||||
_getBack = 1;
|
||||
}
|
||||
|
@ -887,7 +888,7 @@ void DreamWebEngine::usePlate() {
|
|||
|
||||
if (compare(_withObject, _withType, "SCRW")) {
|
||||
// Unscrew plate
|
||||
playChannel1(20);
|
||||
_sound->playChannel1(20);
|
||||
showFirstUse();
|
||||
placeSetObject(28);
|
||||
placeSetObject(24);
|
||||
|
@ -992,7 +993,7 @@ void DreamWebEngine::useCart() {
|
|||
removeSetObject(_command);
|
||||
placeSetObject(_command + 1);
|
||||
_vars._progressPoints++;
|
||||
playChannel1(17);
|
||||
_sound->playChannel1(17);
|
||||
showFirstUse();
|
||||
_getBack = 1;
|
||||
}
|
||||
|
@ -1035,7 +1036,7 @@ void DreamWebEngine::openHotelDoor() {
|
|||
if (defaultUseHandler("KEYA"))
|
||||
return;
|
||||
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
showFirstUse();
|
||||
_vars._lockStatus = 0;
|
||||
_getBack = 1;
|
||||
|
@ -1045,7 +1046,7 @@ void DreamWebEngine::openHotelDoor2() {
|
|||
if (defaultUseHandler("KEYA"))
|
||||
return;
|
||||
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
showFirstUse();
|
||||
putBackObStuff();
|
||||
}
|
||||
|
@ -1067,7 +1068,7 @@ void DreamWebEngine::usePoolReader() {
|
|||
showSecondUse();
|
||||
putBackObStuff();
|
||||
} else {
|
||||
playChannel1(17);
|
||||
_sound->playChannel1(17);
|
||||
showFirstUse();
|
||||
_vars._countToOpen = 6;
|
||||
_getBack = 1;
|
||||
|
@ -1088,7 +1089,7 @@ void DreamWebEngine::useCardReader1() {
|
|||
putBackObStuff();
|
||||
} else {
|
||||
// Get cash
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
showPuzText(18, 300);
|
||||
_vars._progressPoints++;
|
||||
_vars._card1Money = 12432;
|
||||
|
@ -1113,7 +1114,7 @@ void DreamWebEngine::useCardReader2() {
|
|||
showPuzText(22, 300);
|
||||
putBackObStuff();
|
||||
} else {
|
||||
playChannel1(18);
|
||||
_sound->playChannel1(18);
|
||||
showPuzText(19, 300);
|
||||
placeSetObject(94);
|
||||
_vars._gunPassFlag = 1;
|
||||
|
@ -1136,7 +1137,7 @@ void DreamWebEngine::useCardReader3() {
|
|||
showPuzText(26, 300);
|
||||
putBackObStuff();
|
||||
} else {
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
showPuzText(25, 300);
|
||||
_vars._progressPoints++;
|
||||
_vars._card1Money -= 8300;
|
||||
|
@ -1232,7 +1233,7 @@ void DreamWebEngine::useControl() {
|
|||
}
|
||||
|
||||
if (compare(_withObject, _withType, "KEYA")) { // Right key
|
||||
playChannel1(16);
|
||||
_sound->playChannel1(16);
|
||||
if (_vars._location == 21) { // Going down
|
||||
showPuzText(3, 300);
|
||||
_newLocation = 30;
|
||||
|
@ -1257,7 +1258,7 @@ void DreamWebEngine::useControl() {
|
|||
placeSetObject(30);
|
||||
removeSetObject(16);
|
||||
removeSetObject(17);
|
||||
playChannel1(14);
|
||||
_sound->playChannel1(14);
|
||||
showPuzText(10, 300);
|
||||
_vars._progressPoints++;
|
||||
_getBack = 1;
|
||||
|
@ -1375,7 +1376,7 @@ void DreamWebEngine::runTap() {
|
|||
// Fill cup from tap
|
||||
DynObject *exObject = getExAd(_withObject);
|
||||
exObject->objId[3] = 'F'-'A'; // CUPE (empty cup) -> CUPF (full cup)
|
||||
playChannel1(8);
|
||||
_sound->playChannel1(8);
|
||||
showPuzText(57, 300);
|
||||
putBackObStuff();
|
||||
return;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "dreamweb/sound.h"
|
||||
#include "dreamweb/dreamweb.h"
|
||||
|
||||
namespace DreamWeb {
|
||||
|
@ -123,7 +124,7 @@ void DreamWebEngine::fadeUpMonFirst() {
|
|||
_colourPos = 0;
|
||||
_numToFade = 128;
|
||||
hangOn(64);
|
||||
playChannel1(26);
|
||||
_sound->playChannel1(26);
|
||||
hangOn(64);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue