diff options
-rw-r--r-- | engines/kyra/script_tim.cpp | 22 | ||||
-rw-r--r-- | engines/kyra/script_tim.h | 6 |
2 files changed, 18 insertions, 10 deletions
diff --git a/engines/kyra/script_tim.cpp b/engines/kyra/script_tim.cpp index 96d6927f5d..aa4a2cd855 100644 --- a/engines/kyra/script_tim.cpp +++ b/engines/kyra/script_tim.cpp @@ -118,7 +118,8 @@ TIM *TIMInterpreter::load(const char *filename, const Common::Array<const TIMOpc for (uint i = 0; i < avtlChunkSize; ++i) tim->avtl[i] = READ_LE_UINT16(tim->avtl + i); - for (int i = 0; i < 10; ++i) + int num = (avtlChunkSize < TIM::kCountFuncs) ? avtlChunkSize : TIM::kCountFuncs; + for (int i = 0; i < num; ++i) tim->func[i].avtl = tim->avtl + tim->avtl[i]; return tim; @@ -145,7 +146,7 @@ void TIMInterpreter::exec(TIM *tim, bool loop) { } do { - for (_currentFunc = 0; _currentFunc < 10; ++_currentFunc) { + for (_currentFunc = 0; _currentFunc < TIM::kCountFuncs; ++_currentFunc) { TIM::Function &cur = _currentTim->func[_currentFunc]; if (_currentTim->procFunc != -1) @@ -185,7 +186,10 @@ void TIMInterpreter::exec(TIM *tim, bool loop) { } void TIMInterpreter::refreshTimersAfterPause(uint32 elapsedTime) { - for (int i = 0; i < 10; i++) { + if (!_currentTim) + return; + + for (int i = 0; i < TIM::kCountFuncs; i++) { if (_currentTim->func[i].lastTime) _currentTim->func[i].lastTime += elapsedTime; if (_currentTim->func[i].nextTime) @@ -215,7 +219,7 @@ int TIMInterpreter::cmd_initFunc0(const uint16 *param) { } int TIMInterpreter::cmd_stopCurFunc(const uint16 *param) { - if (_currentFunc < 10) + if (_currentFunc < TIM::kCountFuncs) _currentTim->func[_currentFunc].ip = 0; if (!_currentFunc) _finished = true; @@ -224,7 +228,7 @@ int TIMInterpreter::cmd_stopCurFunc(const uint16 *param) { int TIMInterpreter::cmd_initFunc(const uint16 *param) { uint16 func = *param; - assert(func < 10); + assert(func < TIM::kCountFuncs); if (_currentTim->func[func].avtl) _currentTim->func[func].ip = _currentTim->func[func].avtl; else @@ -234,13 +238,13 @@ int TIMInterpreter::cmd_initFunc(const uint16 *param) { int TIMInterpreter::cmd_stopFunc(const uint16 *param) { uint16 func = *param; - assert(func < 10); + assert(func < TIM::kCountFuncs); _currentTim->func[func].ip = 0; return 1; } int TIMInterpreter::cmd_resetAllRuntimes(const uint16 *param) { - for (int i = 0; i < 10; ++i) { + for (int i = 0; i < TIM::kCountFuncs; ++i) { if (_currentTim->func[i].ip) _currentTim->func[i].nextTime = _system->getMillis(); } @@ -264,7 +268,7 @@ int TIMInterpreter::cmd_execOpcode(const uint16 *param) { int TIMInterpreter::cmd_initFuncNow(const uint16 *param) { uint16 func = *param; - assert(func < 10); + assert(func < TIM::kCountFuncs); _currentTim->func[func].ip = _currentTim->func[func].avtl; _currentTim->func[func].lastTime = _currentTim->func[func].nextTime = _system->getMillis(); return 1; @@ -272,7 +276,7 @@ int TIMInterpreter::cmd_initFuncNow(const uint16 *param) { int TIMInterpreter::cmd_stopFuncNow(const uint16 *param) { uint16 func = *param; - assert(func < 10); + assert(func < TIM::kCountFuncs); _currentTim->func[func].ip = 0; _currentTim->func[func].lastTime = _currentTim->func[func].nextTime = _system->getMillis(); return 1; diff --git a/engines/kyra/script_tim.h b/engines/kyra/script_tim.h index 7d5fe15b28..cd715ff4ef 100644 --- a/engines/kyra/script_tim.h +++ b/engines/kyra/script_tim.h @@ -40,6 +40,10 @@ struct TIM { int16 procFunc; uint16 procParam; + enum { + kCountFuncs = 10 + }; + struct Function { const uint16 *ip; @@ -47,7 +51,7 @@ struct TIM { uint32 nextTime; const uint16 *avtl; - } func[10]; + } func[kCountFuncs]; uint16 *avtl; uint8 *text; |