From 6d0bb19a51ac2996e8563f176ae2f2af1925369e Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Thu, 7 Apr 2011 00:08:47 +0200 Subject: [PATCH] KYRA: Cleanup static variable usage in LoK. --- engines/kyra/gui_lok.cpp | 7 +- engines/kyra/gui_lok.h | 1 + engines/kyra/kyra_lok.cpp | 12 ++ engines/kyra/kyra_lok.h | 13 ++ engines/kyra/scene_lok.cpp | 17 +-- engines/kyra/sequences_lok.cpp | 255 ++++++++++++++++----------------- engines/kyra/timer_lok.cpp | 9 +- 7 files changed, 164 insertions(+), 150 deletions(-) diff --git a/engines/kyra/gui_lok.cpp b/engines/kyra/gui_lok.cpp index b7952eb81e19..3560478a1b30 100644 --- a/engines/kyra/gui_lok.cpp +++ b/engines/kyra/gui_lok.cpp @@ -564,7 +564,6 @@ int GUI_LoK::resumeGame(Button *button) { void GUI_LoK::setupSavegames(Menu &menu, int num) { Common::InSaveFile *in; - static char savenames[5][35]; uint8 startSlot; assert(num <= 5); @@ -583,11 +582,11 @@ void GUI_LoK::setupSavegames(Menu &menu, int num) { KyraEngine_LoK::SaveHeader header; for (int i = startSlot; i < num && uint(_savegameOffset + i) < _saveSlots.size(); i++) { if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header))) { - Common::strlcpy(savenames[i], header.description.c_str(), ARRAYSIZE(savenames[0])); + Common::strlcpy(_savegameNames[i], header.description.c_str(), ARRAYSIZE(_savegameNames[0])); - Util::convertISOToDOS(savenames[i]); + Util::convertISOToDOS(_savegameNames[i]); - menu.item[i].itemString = savenames[i]; + menu.item[i].itemString = _savegameNames[i]; menu.item[i].enabled = 1; menu.item[i].saveSlot = _saveSlots[i + _savegameOffset]; delete in; diff --git a/engines/kyra/gui_lok.h b/engines/kyra/gui_lok.h index 05dd1533b17d..e84693374141 100644 --- a/engines/kyra/gui_lok.h +++ b/engines/kyra/gui_lok.h @@ -166,6 +166,7 @@ class GUI_LoK : public GUI { uint8 _toplevelMenu; int _savegameOffset; char _savegameName[35]; + char _savegameNames[5][35]; const char *_specialSavegameString; Button::Callback _scrollUpFunctor; diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp index 7526216066dd..d7ec6ada7197 100644 --- a/engines/kyra/kyra_lok.cpp +++ b/engines/kyra/kyra_lok.cpp @@ -92,10 +92,22 @@ KyraEngine_LoK::KyraEngine_LoK(OSystem *system, const GameFlags &flags) memset(_panPagesTable, 0, sizeof(_panPagesTable)); memset(_sceneAnimTable, 0, sizeof(_sceneAnimTable)); _currHeadShape = 0; + _currentHeadFrameTableIndex = 0; _speechPlayTime = 0; _seqPlayerFlag = false; + memset(&_characterFacingZeroCount, 0, sizeof(_characterFacingZeroCount)); + memset(&_characterFacingFourCount, 0, sizeof(_characterFacingFourCount)); + memset(&_itemBkgBackUp, 0, sizeof(_itemBkgBackUp)); + + _beadStateTimer1 = _beadStateTimer2 = 0; + memset(&_beadState1, 0, sizeof(_beadState1)); + _beadState1.x = -1; + memset(&_beadState2, 0, sizeof(_beadState2)); + + _malcolmFrame = 0; + _malcolmTimer1 = _malcolmTimer2 = 0; } KyraEngine_LoK::~KyraEngine_LoK() { diff --git a/engines/kyra/kyra_lok.h b/engines/kyra/kyra_lok.h index dfbf5bddd8db..d1ff24ad859a 100644 --- a/engines/kyra/kyra_lok.h +++ b/engines/kyra/kyra_lok.h @@ -447,6 +447,9 @@ class KyraEngine_LoK : public KyraEngine_v1 { uint16 _currentChatPartnerBackupFrame; uint16 _currentCharAnimFrame; + int _characterFacingZeroCount[8]; + int _characterFacingFourCount[8]; + int8 *_sceneAnimTable[50]; uint8 _itemHtDat[145]; @@ -471,6 +474,7 @@ class KyraEngine_LoK : public KyraEngine_v1 { int8 _charSayUnk2; int8 _charSayUnk3; int8 _currHeadShape; + int _currentHeadFrameTableIndex; int8 _disabledTalkAnimObject; int8 _enabledTalkAnimObject; uint8 _currSentenceColor[3]; @@ -498,6 +502,15 @@ class KyraEngine_LoK : public KyraEngine_v1 { Button *_buttonList; GUI_LoK *_gui; + uint16 _malcolmFrame; + uint32 _malcolmTimer1; + uint32 _malcolmTimer2; + + uint32 _beadStateTimer1; + uint32 _beadStateTimer2; + BeadState _beadState1; + BeadState _beadState2; + struct KyragemState { uint16 nextOperation; uint16 rOffset; diff --git a/engines/kyra/scene_lok.cpp b/engines/kyra/scene_lok.cpp index f7ada5d623c2..3abfe03fff09 100644 --- a/engines/kyra/scene_lok.cpp +++ b/engines/kyra/scene_lok.cpp @@ -314,38 +314,35 @@ void KyraEngine_LoK::setCharacterPositionHelper(int character, int *facingTable) } } - static uint8 facingIsZero[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - static uint8 facingIsFour[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - if (facing == 0) { - ++facingIsZero[character]; + ++_characterFacingZeroCount[character]; } else { bool resetTables = false; if (facing != 7) { if (facing - 1 != 0) { if (facing != 4) { if (facing == 3 || facing == 5) { - if (facingIsFour[character] > 2) + if (_characterFacingFourCount[character] > 2) facing = 4; resetTables = true; } } else { - ++facingIsFour[character]; + ++_characterFacingFourCount[character]; } } else { - if (facingIsZero[character] > 2) + if (_characterFacingZeroCount[character] > 2) facing = 0; resetTables = true; } } else { - if (facingIsZero[character] > 2) + if (_characterFacingZeroCount[character] > 2) facing = 0; resetTables = true; } if (resetTables) { - facingIsZero[character] = 0; - facingIsFour[character] = 0; + _characterFacingZeroCount[character] = 0; + _characterFacingFourCount[character] = 0; } } diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index c4bdc29f571e..23af24064d5a 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -1483,53 +1483,49 @@ bool KyraEngine_LoK::seq_skipSequence() const { } int KyraEngine_LoK::handleMalcolmFlag() { - static uint16 frame = 0; - static uint32 timer1 = 0; - static uint32 timer2 = 0; - switch (_malcolmFlag) { case 1: - frame = 0; + _malcolmFrame = 0; _malcolmFlag = 2; - timer2 = 0; + _malcolmTimer2 = 0; // Fall through to the next case case 2: - if (_system->getMillis() >= timer2) { - _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0); + if (_system->getMillis() >= _malcolmTimer2) { + _finalA->displayFrame(_malcolmFrame, 0, 8, 46, 0, 0, 0); _screen->updateScreen(); - timer2 = _system->getMillis() + 8 * _tickLength; - ++frame; - if (frame > 13) { + _malcolmTimer2 = _system->getMillis() + 8 * _tickLength; + ++_malcolmFrame; + if (_malcolmFrame > 13) { _malcolmFlag = 3; - timer1 = _system->getMillis() + 180 * _tickLength; + _malcolmTimer1 = _system->getMillis() + 180 * _tickLength; } } break; case 3: - if (_system->getMillis() < timer1) { - if (_system->getMillis() >= timer2) { - frame = _rnd.getRandomNumberRng(14, 17); - _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0); + if (_system->getMillis() < _malcolmTimer1) { + if (_system->getMillis() >= _malcolmTimer2) { + _malcolmFrame = _rnd.getRandomNumberRng(14, 17); + _finalA->displayFrame(_malcolmFrame, 0, 8, 46, 0, 0, 0); _screen->updateScreen(); - timer2 = _system->getMillis() + 8 * _tickLength; + _malcolmTimer2 = _system->getMillis() + 8 * _tickLength; } } else { _malcolmFlag = 4; - frame = 18; + _malcolmFrame = 18; } break; case 4: - if (_system->getMillis() >= timer2) { - _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0); + if (_system->getMillis() >= _malcolmTimer2) { + _finalA->displayFrame(_malcolmFrame, 0, 8, 46, 0, 0, 0); _screen->updateScreen(); - timer2 = _system->getMillis() + 8 * _tickLength; - ++frame; - if (frame > 25) { - frame = 26; + _malcolmTimer2 = _system->getMillis() + 8 * _tickLength; + ++_malcolmFrame; + if (_malcolmFrame > 25) { + _malcolmFrame = 26; _malcolmFlag = 5; _beadStateVar = 1; } @@ -1537,13 +1533,13 @@ int KyraEngine_LoK::handleMalcolmFlag() { break; case 5: - if (_system->getMillis() >= timer2) { - _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0); + if (_system->getMillis() >= _malcolmTimer2) { + _finalA->displayFrame(_malcolmFrame, 0, 8, 46, 0, 0, 0); _screen->updateScreen(); - timer2 = _system->getMillis() + 8 * _tickLength; - ++frame; - if (frame > 31) { - frame = 32; + _malcolmTimer2 = _system->getMillis() + 8 * _tickLength; + ++_malcolmFrame; + if (_malcolmFrame > 31) { + _malcolmFrame = 32; _malcolmFlag = 6; } } @@ -1551,14 +1547,14 @@ int KyraEngine_LoK::handleMalcolmFlag() { case 6: if (_unkEndSeqVar4) { - if (frame <= 33 && _system->getMillis() >= timer2) { - _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0); + if (_malcolmFrame <= 33 && _system->getMillis() >= _malcolmTimer2) { + _finalA->displayFrame(_malcolmFrame, 0, 8, 46, 0, 0, 0); _screen->updateScreen(); - timer2 = _system->getMillis() + 8 * _tickLength; - ++frame; - if (frame > 33) { + _malcolmTimer2 = _system->getMillis() + 8 * _tickLength; + ++_malcolmFrame; + if (_malcolmFrame > 33) { _malcolmFlag = 7; - frame = 32; + _malcolmFrame = 32; _unkEndSeqVar5 = 0; } } @@ -1568,20 +1564,20 @@ int KyraEngine_LoK::handleMalcolmFlag() { case 7: if (_unkEndSeqVar5 == 1) { _malcolmFlag = 8; - frame = 34; + _malcolmFrame = 34; } else if (_unkEndSeqVar5 == 2) { _malcolmFlag = 3; - timer1 = _system->getMillis() + 180 * _tickLength; + _malcolmTimer1 = _system->getMillis() + 180 * _tickLength; } break; case 8: - if (_system->getMillis() >= timer2) { - _finalA->displayFrame(frame, 0, 8, 46, 0, 0, 0); + if (_system->getMillis() >= _malcolmTimer2) { + _finalA->displayFrame(_malcolmFrame, 0, 8, 46, 0, 0, 0); _screen->updateScreen(); - timer2 = _system->getMillis() + 8 * _tickLength; - ++frame; - if (frame > 37) { + _malcolmTimer2 = _system->getMillis() + 8 * _tickLength; + ++_malcolmFrame; + if (_malcolmFrame > 37) { _malcolmFlag = 0; _deathHandler = 8; return 1; @@ -1593,10 +1589,10 @@ int KyraEngine_LoK::handleMalcolmFlag() { snd_playSoundEffect(12); snd_playSoundEffect(12); for (int i = 0; i < 18; ++i) { - timer2 = _system->getMillis() + 4 * _tickLength; + _malcolmTimer2 = _system->getMillis() + 4 * _tickLength; _finalC->displayFrame(i, 0, 16, 50, 0, 0, 0); _screen->updateScreen(); - delayUntil(timer2); + delayUntil(_malcolmTimer2); } snd_playWanderScoreViaMap(51, 1); delay(60 * _tickLength); @@ -1609,16 +1605,16 @@ int KyraEngine_LoK::handleMalcolmFlag() { _screen->bitBlitRects(); assert(_veryClever); _text->printTalkTextMessage(_veryClever[0], 60, 31, 5, 0, 2); - timer2 = _system->getMillis() + 180 * _tickLength; + _malcolmTimer2 = _system->getMillis() + 180 * _tickLength; _malcolmFlag = 11; } break; case 11: - if (_system->getMillis() >= timer2) { + if (_system->getMillis() >= _malcolmTimer2) { _text->restoreTalkTextMessageBkgd(2, 0); _malcolmFlag = 3; - timer1 = _system->getMillis() + 180 * _tickLength; + _malcolmTimer1 = _system->getMillis() + 180 * _tickLength; } break; @@ -1630,16 +1626,12 @@ int KyraEngine_LoK::handleMalcolmFlag() { } int KyraEngine_LoK::handleBeadState() { - static uint32 timer1 = 0; - static uint32 timer2 = 0; - static BeadState beadState1 = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - static BeadState beadState2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - static const int table1[] = { -1, -2, -4, -5, -6, -7, -6, -5, -4, -2, -1, 0, 1, 2, 4, 5, 6, 7, 6, 5, 4, 2, 1, 0, 0 }; + static const int table2[] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 5, 4, 4, @@ -1651,120 +1643,120 @@ int KyraEngine_LoK::handleBeadState() { switch (_beadStateVar) { case 0: - if (beadState1.x != -1 && _endSequenceBackUpRect) { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + if (_beadState1.x != -1 && _endSequenceBackUpRect) { + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); } - beadState1.x = -1; - beadState1.tableIndex = 0; - timer1 = 0; - timer2 = 0; + _beadState1.x = -1; + _beadState1.tableIndex = 0; + _beadStateTimer1 = 0; + _beadStateTimer2 = 0; _lastDisplayedPanPage = 0; return 1; case 1: - if (beadState1.x != -1) { + if (_beadState1.x != -1) { if (_endSequenceBackUpRect) { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); } - beadState1.x = -1; - beadState1.tableIndex = 0; + _beadState1.x = -1; + _beadState1.tableIndex = 0; } _beadStateVar = 2; break; case 2: - if (_system->getMillis() >= timer1) { + if (_system->getMillis() >= _beadStateTimer1) { int x = 0, y = 0; - timer1 = _system->getMillis() + 4 * _tickLength; - if (beadState1.x == -1) { + _beadStateTimer1 = _system->getMillis() + 4 * _tickLength; + if (_beadState1.x == -1) { assert(_panPagesTable); - beadState1.width2 = _animator->fetchAnimWidth(_panPagesTable[19], 256); - beadState1.width = ((beadState1.width2 + 7) >> 3) + 1; - beadState1.height = _animator->fetchAnimHeight(_panPagesTable[19], 256); + _beadState1.width2 = _animator->fetchAnimWidth(_panPagesTable[19], 256); + _beadState1.width = ((_beadState1.width2 + 7) >> 3) + 1; + _beadState1.height = _animator->fetchAnimHeight(_panPagesTable[19], 256); if (!_endSequenceBackUpRect) { - _endSequenceBackUpRect = new uint8[(beadState1.width * beadState1.height) << 3]; + _endSequenceBackUpRect = new uint8[(_beadState1.width * _beadState1.height) << 3]; assert(_endSequenceBackUpRect); - memset(_endSequenceBackUpRect, 0, ((beadState1.width * beadState1.height) << 3) * sizeof(uint8)); + memset(_endSequenceBackUpRect, 0, ((_beadState1.width * _beadState1.height) << 3) * sizeof(uint8)); } - x = beadState1.x = 60; - y = beadState1.y = 40; - initBeadState(x, y, x, 25, 8, &beadState2); + x = _beadState1.x = 60; + y = _beadState1.y = 40; + initBeadState(x, y, x, 25, 8, &_beadState2); } else { - if (processBead(beadState1.x, beadState1.y, x, y, &beadState2)) { + if (processBead(_beadState1.x, _beadState1.y, x, y, &_beadState2)) { _beadStateVar = 3; - timer2 = _system->getMillis() + 240 * _tickLength; + _beadStateTimer2 = _system->getMillis() + 240 * _tickLength; _unkEndSeqVar4 = 0; - beadState1.dstX = beadState1.x; - beadState1.dstY = beadState1.y; + _beadState1.dstX = _beadState1.x; + _beadState1.dstY = _beadState1.y; return 0; } else { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); - beadState1.x = x; - beadState1.y = y; + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); + _beadState1.x = x; + _beadState1.y = y; } } - _screen->copyRegionToBuffer(_screen->_curPage, x, y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); + _screen->copyRegionToBuffer(_screen->_curPage, x, y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); _screen->drawShape(2, _panPagesTable[_lastDisplayedPanPage++], x, y, 0, 0); if (_lastDisplayedPanPage > 17) _lastDisplayedPanPage = 0; - _screen->addBitBlitRect(x, y, beadState1.width2, beadState1.height); + _screen->addBitBlitRect(x, y, _beadState1.width2, _beadState1.height); } break; case 3: - if (_system->getMillis() >= timer1) { - timer1 = _system->getMillis() + 4 * _tickLength; - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + if (_system->getMillis() >= _beadStateTimer1) { + _beadStateTimer1 = _system->getMillis() + 4 * _tickLength; + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); - beadState1.x = beadState1.dstX + table1[beadState1.tableIndex]; - beadState1.y = beadState1.dstY + table2[beadState1.tableIndex]; - _screen->copyRegionToBuffer(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); + _beadState1.x = _beadState1.dstX + table1[_beadState1.tableIndex]; + _beadState1.y = _beadState1.dstY + table2[_beadState1.tableIndex]; + _screen->copyRegionToBuffer(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); - _screen->drawShape(2, _panPagesTable[_lastDisplayedPanPage++], beadState1.x, beadState1.y, 0, 0); + _screen->drawShape(2, _panPagesTable[_lastDisplayedPanPage++], _beadState1.x, _beadState1.y, 0, 0); if (_lastDisplayedPanPage >= 17) _lastDisplayedPanPage = 0; - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); - ++beadState1.tableIndex; - if (beadState1.tableIndex > 24) - beadState1.tableIndex = 0; + ++_beadState1.tableIndex; + if (_beadState1.tableIndex > 24) + _beadState1.tableIndex = 0; _unkEndSeqVar4 = 1; - if (_system->getMillis() > timer2 && _malcolmFlag == 7 && !_unkAmuletVar && !_text->printed()) { + if (_system->getMillis() > _beadStateTimer2 && _malcolmFlag == 7 && !_unkAmuletVar && !_text->printed()) { snd_playSoundEffect(0x0B); if (_currentCharacter->x1 > 233 && _currentCharacter->x1 < 305 && _currentCharacter->y1 > 85 && _currentCharacter->y1 < 105 && (_brandonStatusBit & 0x20)) { - beadState1.unk8 = 290; - beadState1.unk9 = 40; + _beadState1.unk8 = 290; + _beadState1.unk9 = 40; _beadStateVar = 5; } else { _beadStateVar = 4; - beadState1.unk8 = _currentCharacter->x1 - 4; - beadState1.unk9 = _currentCharacter->y1 - 30; + _beadState1.unk8 = _currentCharacter->x1 - 4; + _beadState1.unk9 = _currentCharacter->y1 - 30; } if (_text->printed()) _text->restoreTalkTextMessageBkgd(2, 0); - initBeadState(beadState1.x, beadState1.y, beadState1.unk8, beadState1.unk9, 12, &beadState2); + initBeadState(_beadState1.x, _beadState1.y, _beadState1.unk8, _beadState1.unk9, 12, &_beadState2); _lastDisplayedPanPage = 18; } } break; case 4: - if (_system->getMillis() >= timer1) { + if (_system->getMillis() >= _beadStateTimer1) { int x = 0, y = 0; - timer1 = _system->getMillis() + _tickLength; - if (processBead(beadState1.x, beadState1.y, x, y, &beadState2)) { + _beadStateTimer1 = _system->getMillis() + _tickLength; + if (processBead(_beadState1.x, _beadState1.y, x, y, &_beadState2)) { if (_brandonStatusBit & 20) { _unkEndSeqVar5 = 2; _beadStateVar = 6; @@ -1775,27 +1767,27 @@ int KyraEngine_LoK::handleBeadState() { _beadStateVar = 0; } } else { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); - beadState1.x = x; - beadState1.y = y; - _screen->copyRegionToBuffer(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); + _beadState1.x = x; + _beadState1.y = y; + _screen->copyRegionToBuffer(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); _screen->drawShape(2, _panPagesTable[_lastDisplayedPanPage++], x, y, 0, 0); if (_lastDisplayedPanPage > 17) { _lastDisplayedPanPage = 0; } - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); } } break; case 5: - if (_system->getMillis() >= timer1) { - timer1 = _system->getMillis() + _tickLength; + if (_system->getMillis() >= _beadStateTimer1) { + _beadStateTimer1 = _system->getMillis() + _tickLength; int x = 0, y = 0; - if (processBead(beadState1.x, beadState1.y, x, y, &beadState2)) { - if (beadState2.dstX == 290) { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); + if (processBead(_beadState1.x, _beadState1.y, x, y, &_beadState2)) { + if (_beadState2.dstX == 290) { + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); uint32 nextRun = 0; for (int i = 0; i < 8; ++i) { nextRun = _system->getMillis() + _tickLength; @@ -1810,38 +1802,39 @@ int KyraEngine_LoK::handleBeadState() { _screen->updateScreen(); delayUntil(nextRun); } - initBeadState(beadState1.x, beadState1.y, 63, 60, 12, &beadState2); + initBeadState(_beadState1.x, _beadState1.y, 63, 60, 12, &_beadState2); } else { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); - beadState1.x = -1; - beadState1.tableIndex = 0; + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); + _beadState1.x = -1; + _beadState1.tableIndex = 0; _beadStateVar = 0; _malcolmFlag = 9; } } else { - _screen->copyBlockToPage(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); - beadState1.x = x; - beadState1.y = y; - _screen->copyRegionToBuffer(_screen->_curPage, beadState1.x, beadState1.y, beadState1.width << 3, beadState1.height, _endSequenceBackUpRect); + _screen->copyBlockToPage(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); + _beadState1.x = x; + _beadState1.y = y; + _screen->copyRegionToBuffer(_screen->_curPage, _beadState1.x, _beadState1.y, _beadState1.width << 3, _beadState1.height, _endSequenceBackUpRect); _screen->drawShape(2, _panPagesTable[_lastDisplayedPanPage++], x, y, 0, 0); if (_lastDisplayedPanPage > 17) _lastDisplayedPanPage = 0; - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); } } break; case 6: - _screen->drawShape(2, _panPagesTable[19], beadState1.x, beadState1.y, 0, 0); - _screen->addBitBlitRect(beadState1.x, beadState1.y, beadState1.width2, beadState1.height); + _screen->drawShape(2, _panPagesTable[19], _beadState1.x, _beadState1.y, 0, 0); + _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); _beadStateVar = 0; break; default: break; } + return 0; } diff --git a/engines/kyra/timer_lok.cpp b/engines/kyra/timer_lok.cpp index 6f4948c279da..85b98be724b2 100644 --- a/engines/kyra/timer_lok.cpp +++ b/engines/kyra/timer_lok.cpp @@ -75,7 +75,6 @@ void KyraEngine_LoK::setupTimers() { } void KyraEngine_LoK::timerUpdateHeadAnims(int timerNum) { - static int8 currentFrame = 0; static const int8 frameTable[] = { 4, 5, 4, 5, 4, 5, 0, 1, 4, 5, 4, 4, 6, 4, 8, 1, @@ -85,11 +84,11 @@ void KyraEngine_LoK::timerUpdateHeadAnims(int timerNum) { if (_talkingCharNum < 0) return; - _currHeadShape = frameTable[currentFrame]; - currentFrame++; + _currHeadShape = frameTable[_currentHeadFrameTableIndex]; + ++_currentHeadFrameTableIndex; - if (frameTable[currentFrame] == -1) - currentFrame = 0; + if (frameTable[_currentHeadFrameTableIndex] == -1) + _currentHeadFrameTableIndex = 0; _animator->animRefreshNPC(0); _animator->animRefreshNPC(_talkingCharNum);