diff --git a/scumm.h b/scumm.h index 16da3fae426..5c4df6720e2 100644 --- a/scumm.h +++ b/scumm.h @@ -799,7 +799,8 @@ struct Scumm { // byte _minorScummVersion; ScummDebugger *_debugger; void *_gui; /* actually a pointer to a Gui */ - + + int _gameTempo; int _lastLoadedRoom; int _roomResource; byte _encbyte; diff --git a/scummvm.cpp b/scummvm.cpp index 30c6ef6498c..c9122122283 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -195,7 +195,8 @@ void Scumm::scummMain(int argc, char **argv) { _minHeapThreshold = 400000; _gameDataPath = NULL; - + _gameTempo = 0; + parseCommandLine(argc, argv); if (_exe_name==NULL) @@ -208,7 +209,7 @@ void Scumm::scummMain(int argc, char **argv) { if (!_gameDataPath) { warning("No path was provided. Assuming that data file are in the current directory"); - _gameDataPath = (char *)malloc(sizeof(char) * 2); + _gameDataPath = (char *)malloc(sizeof(char) * 2); strcpy(_gameDataPath, ""); } @@ -413,6 +414,9 @@ void Scumm::parseCommandLine(int argc, char **argv) { case 'p': _gameDataPath = argv[++i]; break; + case 't': + _gameTempo = atoi(s+1); + goto NextArg; default: ShowHelpAndExit:; printf( @@ -421,6 +425,7 @@ ShowHelpAndExit:; "\tscummvm [-b] [-p path] game\n" "Flags:\n" "\tb - start in that room\n" + "\tt - Set music tempo. Suggested: 1F0000\n" "\tf - fullscreen mode\n"); exit(1); } diff --git a/sound/imuse.cpp b/sound/imuse.cpp index c69dee198f1..4bc67c26f7f 100644 --- a/sound/imuse.cpp +++ b/sound/imuse.cpp @@ -187,7 +187,7 @@ bool SoundEngine::start_sound(int sound) { player = allocate_player(128); if (!player) return false; - + player->clear(); return player->start_sound(sound); } @@ -220,7 +220,7 @@ void SoundEngine::init_players() { for (i=ARRAYSIZE(_players); i!=0; i--, player++) { player->_active = false; - player->_se = this; + player->_se = this; } } @@ -1059,8 +1059,12 @@ int Player::start_seq_sound(int sound) { void Player::set_tempo(uint32 b) { uint32 i,j; - - i = TEMPO_BASE; +printf("is: %d\n", _se->_s->_gameTempo); + if (_se->_s->_gameTempo < 1000) + i = TEMPO_BASE; + else + i = _se->_s->_gameTempo; + printf("Tempo set to: %d\n", i); j = _tempo = b; while (i&0xFFFF0000 || j&0xFFFF0000) { i>>=1; j>>=1; }