diff options
author | sylvaintv | 2012-04-20 01:10:46 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-03-28 17:36:57 +0200 |
commit | c3ca01737b0f484a733fa9dff3fb128a6daa8569 (patch) | |
tree | 9f158012c7eb3656b6584821efc35da8a515bcc0 | |
parent | 4fd850776872ad2715f054f3e3cc24684e499297 (diff) | |
download | scummvm-rg350-c3ca01737b0f484a733fa9dff3fb128a6daa8569.tar.gz scummvm-rg350-c3ca01737b0f484a733fa9dff3fb128a6daa8569.tar.bz2 scummvm-rg350-c3ca01737b0f484a733fa9dff3fb128a6daa8569.zip |
LILLIPUT: Int8 called every 20ms
Makes also the title stars work
-rw-r--r-- | engines/lilliput/lilliput.cpp | 25 | ||||
-rw-r--r-- | engines/lilliput/lilliput.h | 1 | ||||
-rw-r--r-- | engines/lilliput/script.cpp | 20 | ||||
-rw-r--r-- | engines/lilliput/script.h | 1 |
4 files changed, 36 insertions, 11 deletions
diff --git a/engines/lilliput/lilliput.cpp b/engines/lilliput/lilliput.cpp index 986b6c7055..86bd94ea06 100644 --- a/engines/lilliput/lilliput.cpp +++ b/engines/lilliput/lilliput.cpp @@ -204,13 +204,17 @@ GUI::Debugger *LilliputEngine::getDebugger() { } void LilliputEngine::update() { - newInt8(); - pollEvent(); + + // update every 20 ms. + int currentTime = _system->getMillis(); + if(currentTime - _lastTime > 20) { + _lastTime += 20; + newInt8(); + pollEvent(); + } } void LilliputEngine::newInt8() { - if (!_int8installed) - return; if (_byte12A06 == 0) { _byte12A06 = 2; @@ -218,6 +222,10 @@ void LilliputEngine::newInt8() { } --_byte12A06; // TODO: check 'out 20h, 20h' + + // hack for the title stars because _int8installed is not set at the good place for the moment + //if (!_int8installed) + // return; // if (_soundEnabled) warning("TODO: call sound function #1"); @@ -232,7 +240,7 @@ void LilliputEngine::newInt8() { --_sound_byte16F06; _byte12A04 ^= 1; - if (_byte12A09 != 1) + if (_byte12A09 != 1 && _int8installed) // hack for the title stars because _int8installed is not set at the good place for the moment displayFunction16(); } _byte12A08 = 0; @@ -709,7 +717,7 @@ void LilliputEngine::sub1638C() { void LilliputEngine::sub163F0(int var1, int var3) { debugC(2, kDebugEngine, "sub163F0(%d, %d)", var1, var3); - if ((var1 == _scriptHandler->_word12A00) && (var3 = _scriptHandler->_word12A02)) + if ((var1 == _scriptHandler->_word12A00) && (var3 == _scriptHandler->_word12A02)) return; int var2 = 0; @@ -1152,6 +1160,10 @@ Common::Error LilliputEngine::run() { loadRules(); + _lastTime = _system->getMillis(); + + + //TODO: Init sound/music player _scriptHandler->runScript(Common::MemoryReadStream(_initScript, _initScript_size)); @@ -1162,7 +1174,6 @@ Common::Error LilliputEngine::run() { handleGameScripts(); // To be removed when handled in the previous fonctions update(); - pollEvent(); } return Common::kNoError; diff --git a/engines/lilliput/lilliput.h b/engines/lilliput/lilliput.h index c1d8f55b1b..adda3930a6 100644 --- a/engines/lilliput/lilliput.h +++ b/engines/lilliput/lilliput.h @@ -259,6 +259,7 @@ public: protected: Common::EventManager *_eventMan; bool _shouldQuit; + int _lastTime; // Engine APIs Common::Error run(); diff --git a/engines/lilliput/script.cpp b/engines/lilliput/script.cpp index 4aab2f6b4b..576e738cbd 100644 --- a/engines/lilliput/script.cpp +++ b/engines/lilliput/script.cpp @@ -597,12 +597,21 @@ void LilliputScript::runMenuScript(Common::MemoryReadStream script) { _vm->update(); } +void LilliputScript::sub1863B() { + _vm->_arr18560[0]._field0 = 0; + _vm->_arr18560[1]._field0 = 0; + _vm->_arr18560[2]._field0 = 0; + _vm->_arr18560[3]._field0 = 0; + _word1855E = 0; +} + + void LilliputScript::sub185ED(byte index, byte subIndex) { debugC(2, kDebugScript, "sub185ED"); if (_vm->_arr18560[index]._field0 != 1) return; - _vm->displayFunction1(_vm->_bufferIdeogram, _vm->_arr18560[index]._field5[0], _vm->_arr18560[index]._field1, _vm->_arr18560[index]._field3); + _vm->displayFunction1(_vm->_bufferIdeogram, _vm->_arr18560[index]._field5[subIndex], _vm->_arr18560[index]._field1, _vm->_arr18560[index]._field3); } byte LilliputScript::compareValues(byte var1, int oper, int var2) { @@ -665,11 +674,13 @@ void LilliputScript::computeOperation(byte *bufPtr, int oper, int var2) { } } + + void LilliputScript::sub185B4_display() { - if (_byte12A04 == _byte1855D) + if (_vm->_byte12A04 == _byte1855D) return; - _byte1855D = _byte12A04; + _byte1855D = _vm->_byte12A04; assert(_word1855E < 8); int subIndex = _word1855E; @@ -874,6 +885,7 @@ int LilliputScript::getValue2() { } } + void LilliputScript::sub130B6() { debugC(1, kDebugScript, "sub130B6()"); assert(_vm->_word12F68_ERULES <= 20); @@ -1651,7 +1663,7 @@ void LilliputScript::OC_sub182EC() { warning("OC_sub182EC"); } void LilliputScript::OC_unkPaletteFunction_1() { - + sub1863B(); byte palette[768]; for (int fade = 256; fade >= 0; fade -= 8) { for (int i = 0; i < 768; i++) { diff --git a/engines/lilliput/script.h b/engines/lilliput/script.h index 6113fd8808..27140e6f41 100644 --- a/engines/lilliput/script.h +++ b/engines/lilliput/script.h @@ -87,6 +87,7 @@ private: byte handleOpcodeType1(int curWord); void handleOpcodeType2(int curWord); + void sub1863B(); void sub185ED(byte index, byte subIndex); void sub185B4_display(); void sub1823E(byte var1, byte var2, byte *curBufPtr); |