diff --git a/engines/pegasus/timers.cpp b/engines/pegasus/timers.cpp index 169986731426..ab0e4da31d84 100755 --- a/engines/pegasus/timers.cpp +++ b/engines/pegasus/timers.cpp @@ -223,17 +223,19 @@ void TimeBase::checkCallBacks() { // TODO: Update the slaves? + Common::Rational time = getTime(); + // Check if we've triggered any callbacks for (TimeBaseCallBack *runner = _callBackList; runner != 0; runner = runner->_nextCallBack) { if (runner->_type == kCallBackAtTime && runner->_trigger == kTriggerTimeFwd) { - if (_time >= (runner->_param2 * _preferredScale / runner->_param3) && getRate() > 0) + if (time >= (runner->_param2 * _preferredScale / runner->_param3) && getRate() > 0) runner->callBack(); } else if (runner->_type == kCallBackAtExtremes) { if (runner->_trigger == kTriggerAtStop) { - if (_time == stopTime) + if (time == stopTime) runner->callBack(); } else if (runner->_trigger == kTriggerAtStart) { - if (_time == startTime) + if (time == startTime) runner->callBack(); } } @@ -241,10 +243,10 @@ void TimeBase::checkCallBacks() { // Loop if necessary if (getFlags() & kLoopTimeBase) { - if (_time == startTime) - _time = stopTime; - else if (_time == stopTime) - _time = startTime; + if (time == startTime) + setTime(_stopTime, _stopScale); + else if (time == stopTime) + setTime(_startTime, _startScale); } } diff --git a/engines/pegasus/timers.h b/engines/pegasus/timers.h index 04dd235daee0..a40a2c179bfc 100755 --- a/engines/pegasus/timers.h +++ b/engines/pegasus/timers.h @@ -102,7 +102,7 @@ friend class TimeBaseCallBack; void disposeAllCallBacks(); // ScummVM's API additions (to replace the need for actual timers) - void checkCallBacks(); + virtual void checkCallBacks(); protected: void addCallBack(TimeBaseCallBack *);