diff options
| -rw-r--r-- | engines/saga/actor.cpp | 2 | ||||
| -rw-r--r-- | engines/saga/saga.h | 12 | ||||
| -rw-r--r-- | engines/saga/sfuncs.cpp | 17 | 
3 files changed, 19 insertions, 12 deletions
| diff --git a/engines/saga/actor.cpp b/engines/saga/actor.cpp index 743d0cd6c5..ecf7202725 100644 --- a/engines/saga/actor.cpp +++ b/engines/saga/actor.cpp @@ -1130,7 +1130,7 @@ void Actor::handleSpeech(int msec) {  		}  		if (_activeSpeech.stringsCount == 0) { -			_vm->_script->wakeUpThreadsDelayed(kWaitTypeSpeech, ticksToMSec(kScriptTimeTicksPerSecond / 3)); +			_vm->_script->wakeUpThreadsDelayed(kWaitTypeSpeech, _vm->ticksToMSec(kScriptTimeTicksPerSecond / 3));  		}  		return; diff --git a/engines/saga/saga.h b/engines/saga/saga.h index 19d965643a..844a738418 100644 --- a/engines/saga/saga.h +++ b/engines/saga/saga.h @@ -339,6 +339,7 @@ enum GameObjectTypes {  enum ScriptTimings {  	kScriptTimeTicksPerSecond = (728L/10L), +	kScriptTimeTicksPerSecondIHNM = 72,  	kRepeatSpeedTicks = (728L/10L)/3,  	kNormalFadeDuration = 320, // 64 steps, 5 msec each  	kQuickFadeDuration = 64,  // 64 steps, 1 msec each @@ -459,10 +460,6 @@ struct SaveGameHeader {  	char name[SAVE_TITLE_SIZE];  }; -inline int ticksToMSec(int tick) { -	return tick * 1000 / kScriptTimeTicksPerSecond; -} -  inline int clamp(int minValue, int value, int maxValue) {  	if (value <= minValue) {  		return minValue; @@ -595,6 +592,13 @@ public:  		return _leftMouseButtonPressed || _rightMouseButtonPressed;  	} +	inline int ticksToMSec(int tick) { +		if (getGameType() == GType_ITE) +			return tick * 1000 / kScriptTimeTicksPerSecond; +		else +			return tick * 1000 / kScriptTimeTicksPerSecondIHNM; +	} +   private:  	uint _saveFilesMaxCount;  	uint _saveFilesCount; diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp index 1556b20487..a9c4f6cad5 100644 --- a/engines/saga/sfuncs.cpp +++ b/engines/saga/sfuncs.cpp @@ -266,7 +266,7 @@ void Script::sfWait(SCRIPTFUNC_PARAMS) {  	time = thread->pop();  	if (!_skipSpeeches) { -		thread->waitDelay(ticksToMSec(time)); // put thread to sleep +		thread->waitDelay(_vm->ticksToMSec(time)); // put thread to sleep  	}  } @@ -437,7 +437,7 @@ void Script::sfStartBgdAnim(SCRIPTFUNC_PARAMS) {  	int16 cycles = thread->pop();  	_vm->_anim->setCycles(animId, cycles); -	_vm->_anim->setFrameTime(animId, ticksToMSec(kRepeatSpeedTicks)); +	_vm->_anim->setFrameTime(animId, _vm->ticksToMSec(kRepeatSpeedTicks));  	_vm->_anim->play(animId, 0);  	debug(1, "sfStartBgdAnim(%d, %d)", animId, cycles); @@ -695,7 +695,7 @@ void Script::sfSetBgdAnimSpeed(SCRIPTFUNC_PARAMS) {  	int16 animId = thread->pop();  	int16 speed = thread->pop(); -	_vm->_anim->setFrameTime(animId, ticksToMSec(speed)); +	_vm->_anim->setFrameTime(animId, _vm->ticksToMSec(speed));  	debug(1, "sfSetBgdAnimSpeed(%d, %d)", animId, speed);  } @@ -723,7 +723,7 @@ void Script::sfStartBgdAnimSpeed(SCRIPTFUNC_PARAMS) {  	int16 speed = thread->pop();  	_vm->_anim->setCycles(animId, cycles); -	_vm->_anim->setFrameTime(animId, ticksToMSec(speed)); +	_vm->_anim->setFrameTime(animId, _vm->ticksToMSec(speed));  	_vm->_anim->play(animId, 0);  	debug(1, "sfStartBgdAnimSpeed(%d, %d, %d)", animId, cycles, speed); @@ -1086,7 +1086,7 @@ void Script::sfChainBgdAnim(SCRIPTFUNC_PARAMS) {  	if (speed >= 0) {  		_vm->_anim->setCycles(animId, cycles);  		_vm->_anim->stop(animId); -		_vm->_anim->setFrameTime(animId, ticksToMSec(speed)); +		_vm->_anim->setFrameTime(animId, _vm->ticksToMSec(speed));  	}  	_vm->_anim->link(animId1, animId); @@ -2138,8 +2138,11 @@ void Script::sfQueueMusic(SCRIPTFUNC_PARAMS) {  		event.param = _vm->_music->_songTable[param1];  		event.param2 = param2 ? MUSIC_LOOP : MUSIC_NORMAL;  		event.op = kEventPlay; -		event.time = 5 * 1000;	// we wait for 5x the duration here, to let the previous music track end -								// TODO: original waits for 1000ms here, why is the 5x duration needed? +		event.time = _vm->ticksToMSec(500);		// I find the delay in the original to be too long, so I've set it to +												// wait for half the time, which sounds better when chapter points +												// change +												// FIXME: If this is too short for other cases apart from chapter +												// point change, set it back to 1000  		_vm->_events->queue(&event); | 
