speed changes to play smush movies

svn-id: r4941
This commit is contained in:
Paweł Kołodziejski 2002-09-15 05:38:04 +00:00
parent fb91bdd21d
commit 2f91c18b22
5 changed files with 19 additions and 7 deletions

View file

@ -2709,8 +2709,13 @@ void Scumm::o6_miscOps()
case 4: case 4:
grabCursor(args[1], args[2], args[3], args[4]); grabCursor(args[1], args[2], args[3], args[4]);
break; break;
case 6: { case 6: {
ScummRenderer sr(this); uint32 speed;
if (strcmp((char*)getStringAddressVar(VAR_VIDEONAME), "sq3.san") == 0)
speed = 71;
else
speed = 1000 / _insaneFlag;
ScummRenderer sr(this, speed);
SmushPlayer sp(&sr); SmushPlayer sp(&sr);
char filename[512]; char filename[512];
strcpy(filename, _gameDataPath); strcpy(filename, _gameDataPath);
@ -2718,6 +2723,7 @@ void Scumm::o6_miscOps()
strcat(filename, (char*)getStringAddressVar(VAR_VIDEONAME)); strcat(filename, (char*)getStringAddressVar(VAR_VIDEONAME));
sp.play(filename); sp.play(filename);
} }
break;
case 7: case 7:
warning("o6_miscOps: stub7()"); warning("o6_miscOps: stub7()");
break; break;

View file

@ -188,7 +188,10 @@ bool scumm_mixer::stop() {
return true; return true;
} }
ScummRenderer::ScummRenderer(Scumm * scumm) : _scumm(scumm), _smixer(0) { ScummRenderer::ScummRenderer(Scumm * scumm, uint32 speed) :
_scumm(scumm),
_smixer(0),
_insaneSpeed(speed) {
} }
static ScummRenderer * s_renderer; static ScummRenderer * s_renderer;
@ -203,7 +206,7 @@ Mixer * ScummRenderer::getMixer() {
_smixer = new scumm_mixer(_scumm->_mixer); _smixer = new scumm_mixer(_scumm->_mixer);
if(!_smixer) error("unable to allocate a smush mixer"); if(!_smixer) error("unable to allocate a smush mixer");
s_renderer = this; s_renderer = this;
_scumm->_timer->installProcedure(&smush_handler, 83); _scumm->_timer->installProcedure(&smush_handler, _insaneSpeed);
} }
return _smixer; return _smixer;
} }

View file

@ -44,9 +44,10 @@ class ScummRenderer : public BaseRenderer {
private: private:
Scumm * _scumm; Scumm * _scumm;
scumm_mixer * _smixer; scumm_mixer * _smixer;
uint32 _insaneSpeed;
volatile bool _wait; volatile bool _wait;
public: public:
ScummRenderer(Scumm * scumm); ScummRenderer(Scumm * scumm, uint32 speed);
virtual ~ScummRenderer(); virtual ~ScummRenderer();
virtual bool wait(int32 ms); virtual bool wait(int32 ms);
bool update(); bool update();

View file

@ -105,7 +105,7 @@ void Sound::processSoundQues() {
#endif #endif
if ((_scumm->_gameId == GID_DIG) && (data[0] == 4096)){ if ((_scumm->_gameId == GID_DIG) && (data[0] == 4096)){
playBundleMusic(data[1] - 1); // playBundleMusic(data[1] - 1);
} }
if (!(_scumm->_features & GF_AFTER_V7)) { if (!(_scumm->_features & GF_AFTER_V7)) {

View file

@ -656,11 +656,13 @@ void SoundMixer::ChannelStream::mix(int16 * data, uint len) {
} else { } else {
mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, _endOfBuffer); mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, _endOfBuffer);
if (len != 0) { if (len != 0) {
//FIXME: what is wrong ?
warning("bad play sound in stream(wrap around)");
_pos = _ptr; _pos = _ptr;
mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data); mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data);
} }
} }
_timeOut = 2; _timeOut = 3;
_fpPos = fp_pos; _fpPos = fp_pos;
} }