From 9a2bc3c5720e807978fa8a302b5b3c532fb62d30 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 19 May 2016 07:59:07 +0200 Subject: GNAP: Add several checks on _gameDone in order to quit the game quickly --- engines/gnap/character.cpp | 11 ++++++----- engines/gnap/gnap.cpp | 17 ++++++----------- engines/gnap/menu.cpp | 3 +-- engines/gnap/scenes/arcade.cpp | 28 +++++++++++++--------------- engines/gnap/scenes/group0.cpp | 8 ++++---- engines/gnap/scenes/group1.cpp | 31 +++++++++++++++---------------- engines/gnap/scenes/group2.cpp | 27 +++++++++++++++------------ engines/gnap/scenes/group3.cpp | 2 +- engines/gnap/scenes/group4.cpp | 6 +++--- engines/gnap/scenes/group5.cpp | 24 ++++++++---------------- 10 files changed, 72 insertions(+), 85 deletions(-) (limited to 'engines') diff --git a/engines/gnap/character.cpp b/engines/gnap/character.cpp index 46b5dc712d..706cb987fb 100644 --- a/engines/gnap/character.cpp +++ b/engines/gnap/character.cpp @@ -481,7 +481,7 @@ void PlayerGnap::useJointOnPlatypus() { plat._idleFacing = kDirNone; playSequence(0x107B5); walkStep(); - while (_vm->_gameSys->getAnimationStatus(0) != 2) { + while (_vm->_gameSys->getAnimationStatus(0) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); _vm->gameUpdateTick(); } @@ -511,7 +511,7 @@ void PlayerGnap::kissPlatypus(int callback) { plat._sequenceId = 0x7CB; plat._idleFacing = kDirNone; playSequence(0x107B5); - while (_vm->_gameSys->getAnimationStatus(0) != 2) { + while (_vm->_gameSys->getAnimationStatus(0) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); _vm->doCallback(callback); _vm->gameUpdateTick(); @@ -1120,7 +1120,7 @@ bool PlayerGnap::doPlatypusAction(int gridX, int gridY, int platSequenceId, int if (!_vm->isPointBlocked(checkPt) && (_pos != checkPt)) { walkTo(checkPt, 0, 0x107B9, 1); - while (_vm->_gameSys->getAnimationStatus(0) != 2) { + while (_vm->_gameSys->getAnimationStatus(0) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); _vm->doCallback(callback); _vm->gameUpdateTick(); @@ -1129,7 +1129,7 @@ bool PlayerGnap::doPlatypusAction(int gridX, int gridY, int platSequenceId, int if (_pos == plat._pos + Common::Point(gridX, gridY)) { _vm->_gameSys->setAnimation(platSequenceId, plat._id, 1); plat.playSequence(platSequenceId); - while (_vm->_gameSys->getAnimationStatus(1) != 2) { + while (_vm->_gameSys->getAnimationStatus(1) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); _vm->doCallback(callback); _vm->gameUpdateTick(); @@ -1145,8 +1145,9 @@ bool PlayerGnap::doPlatypusAction(int gridX, int gridY, int platSequenceId, int void PlayerGnap::useDisguiseOnPlatypus() { _vm->_gameSys->setAnimation(0x10846, _id, 0); playSequence(0x10846); - while (_vm->_gameSys->getAnimationStatus(0) != 2) + while (_vm->_gameSys->getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); + _vm->_newSceneNum = 47; _vm->_isLeavingScene = true; _vm->_sceneDone = true; diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 435d0c7be6..9af8128c06 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -241,7 +241,6 @@ void GnapEngine::updateEvents() { void GnapEngine::gameUpdateTick() { updateEvents(); - // TODO Check _gameDone in the various game loops if (shouldQuit()) { _gameDone = true; _sceneDone = true; @@ -307,13 +306,12 @@ void GnapEngine::resumeGame() { } void GnapEngine::updatePause() { - while (_isPaused) { + while (_isPaused && !_gameDone) { gameUpdateTick(); if (isKeyStatus1(Common::KEYCODE_p)) { clearKeyStatus1(Common::KEYCODE_p); resumeGame(); } - //_system->delayMillis(100); } } @@ -557,7 +555,7 @@ void GnapEngine::showFullScreenSprite(int resourceId) { setGrabCursorSprite(-1); addFullScreenSprite(resourceId, 256); while (!_mouseClickState._left && !isKeyStatus1(Common::KEYCODE_ESCAPE) && - !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29)) { + !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29) && !_gameDone) { gameUpdateTick(); } _mouseClickState._left = false; @@ -737,8 +735,6 @@ void GnapEngine::mainLoop() { deleteSurface(&_backgroundSurface); _dat->close(1); - // TODO freeMenuSprite(); - // TODO freeFont(); } void GnapEngine::initScene() { @@ -829,7 +825,6 @@ void GnapEngine::checkGameKeys() { pauseGame(); updatePause(); } - // TODO? Debug input } void GnapEngine::startSoundTimerA(int timerIndex) { @@ -911,14 +906,14 @@ void GnapEngine::updateIdleTimer() { void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { if (dir == 1) { - for (int y = 300; y < 600; y += 50) { + for (int y = 300; y < 600 && !_gameDone; y += 50) { _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); gameUpdateTick(); _system->delayMillis(50); } } else { - for (int y = 0; y < 300; y += 50) { + for (int y = 0; y < 300 && !_gameDone; y += 50) { _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); gameUpdateTick(); @@ -1000,13 +995,13 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 25), 48 * (_gnap->_pos.y - 8)); _gnap->_sequenceId = sequenceId2; _gnap->_sequenceDatNum = 0; - while (_gameSys->getAnimationStatus(0) != 2) + while (_gameSys->getAnimationStatus(0) != 2 && !_gameDone) gameUpdateTick(); hideCursor(); addFullScreenSprite(fullScreenSpriteId, 255); _gameSys->setAnimation(sequenceId1, 256, 0); _gameSys->insertSequence(sequenceId1, 256, 0, 0, kSeqNone, 0, 0, 0); - while (_gameSys->getAnimationStatus(0) != 2) + while (_gameSys->getAnimationStatus(0) != 2 && !_gameDone) gameUpdateTick(); _gameSys->setAnimation(sequenceId3, _gnap->_id, 0); _gameSys->insertSequence(sequenceId3, _gnap->_id, diff --git a/engines/gnap/menu.cpp b/engines/gnap/menu.cpp index 2196bb6409..d7eaca02b4 100644 --- a/engines/gnap/menu.cpp +++ b/engines/gnap/menu.cpp @@ -427,9 +427,8 @@ void GnapEngine::updateMenuStatusMainMenu() { _gameSys->insertDirtyRect(dirtyRect); } - while (!_mouseClickState._left && !isKeyStatus1(28) && !isKeyStatus1(30) && !isKeyStatus1(29) && !_timers[2]) { + while (!_mouseClickState._left && !isKeyStatus1(28) && !isKeyStatus1(30) && !isKeyStatus1(29) && !_timers[2] && !_gameDone) gameUpdateTick(); - } playSound(0x108F5, false); _mouseClickState._left = false; diff --git a/engines/gnap/scenes/arcade.cpp b/engines/gnap/scenes/arcade.cpp index 80c7c656c6..84662507f3 100644 --- a/engines/gnap/scenes/arcade.cpp +++ b/engines/gnap/scenes/arcade.cpp @@ -718,10 +718,12 @@ bool Scene50::updateEnergyBars(int newLeftBarPos, int newRightBarPos) { } void Scene50::waitForAnim(int animationIndex) { - while (_vm->_gameSys->getAnimationStatus(animationIndex) != 2) { + GameSys& gameSys = *_vm->_gameSys; + + while (gameSys.getAnimationStatus(animationIndex) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); - } - _vm->_gameSys->setAnimation(0, 0, animationIndex); + + gameSys.setAnimation(0, 0, animationIndex); } int Scene50::checkInput() { @@ -945,7 +947,7 @@ void Scene50::run() { _vm->_timers[5] = 15; - while (!_fightDone) { + while (!_fightDone && !_vm->_gameDone) { /* TODO if (sceneXX_sub_4466B1()) _fightDone = true; @@ -1458,8 +1460,7 @@ bool Scene51::isJumping(int sequenceId) { } void Scene51::waitForAnim(int animationIndex) { - while (_vm->_gameSys->getAnimationStatus(animationIndex) != 2) { - // pollMessages(); + while (_vm->_gameSys->getAnimationStatus(animationIndex) != 2 && _vm->_gameDone) { updateItemAnimations(); _vm->gameUpdateTick(); } @@ -1605,10 +1606,9 @@ void Scene51::winMinigame() { void Scene51::playCashAppearAnim() { _vm->_gameSys->setAnimation(0xC8, 252, 0); _vm->_gameSys->insertSequence(0xC8, 252, 0, 0, kSeqNone, 0, -20, -20); - while (_vm->_gameSys->getAnimationStatus(0) != 2) { + + while (_vm->_gameSys->getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); - // checkGameAppStatus(); - } } void Scene51::updateCash(int amount) { @@ -1726,8 +1726,7 @@ void Scene51::run() { isIdle = false; } - while (_vm->isKeyStatus2(Common::KEYCODE_RIGHT) && _platypusNextSequenceId != 0x96) { - // pollMessages(); + while (_vm->isKeyStatus2(Common::KEYCODE_RIGHT) && _platypusNextSequenceId != 0x96 && !_vm->_gameDone) { if (_platypusNextSequenceId == 0xB6) _platypusNextSequenceId = 0x76; updateItemAnimations(); @@ -1780,8 +1779,7 @@ void Scene51::run() { _vm->gameUpdateTick(); } - while (_vm->isKeyStatus2(Common::KEYCODE_LEFT) && _platypusNextSequenceId != 0xB6) { - // pollMessages(); + while (_vm->isKeyStatus2(Common::KEYCODE_LEFT) && _platypusNextSequenceId != 0xB6 && !_vm->_gameDone) { updateItemAnimations(); if (startWalk) { _platypusNextSequenceId = 0xA5; @@ -1879,7 +1877,7 @@ void Scene52::updateHotspots() { } void Scene52::update() { - for (int rowNum = 0; rowNum < 7; ++rowNum) { + for (int rowNum = 0; rowNum < 7 && !_vm->_gameDone; ++rowNum) { _vm->gameUpdateTick(); if (_vm->_gameSys->getAnimationStatus(_alienRowAnims[rowNum]) == 2) { updateAlienRow(rowNum); @@ -1936,7 +1934,7 @@ void Scene52::update() { loseShip(); if (_shipsLeft != 0) { _vm->_timers[3] = 40; - while (_vm->_timers[3]) { + while (_vm->_timers[3] && !_vm->_gameDone) { updateAlienCannons(); if (_shipCannonFiring) updateShipCannon(); diff --git a/engines/gnap/scenes/group0.cpp b/engines/gnap/scenes/group0.cpp index 25e0aaebe0..dfc6d7a739 100644 --- a/engines/gnap/scenes/group0.cpp +++ b/engines/gnap/scenes/group0.cpp @@ -1209,7 +1209,7 @@ void Scene03::updateAnimations() { _vm->addFullScreenSprite(0x106, 255); gameSys.setAnimation(0x1C9, 256, 1); gameSys.insertSequence(0x1C9, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(1) != 2) + while (gameSys.getAnimationStatus(1) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->removeFullScreenSprite(); gameSys.setAnimation(0x1BA, 99, 1); @@ -1224,12 +1224,12 @@ void Scene03::updateAnimations() { gnap.playBrainPulsating(); gameSys.insertSequence(0x1BF, 99, plat._sequenceId | (plat._sequenceDatNum << 16), 99, kSeqSyncExists, 0, 0, 0); gameSys.setAnimation(0x1BF, 99, 1); - while (gameSys.getAnimationStatus(1) != 2) + while (gameSys.getAnimationStatus(1) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->addFullScreenSprite(0x106, 255); gameSys.setAnimation(0x1C9, 256, 1); gameSys.insertSequence(0x1C9, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(1) != 2) + while (gameSys.getAnimationStatus(1) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->removeFullScreenSprite(); gameSys.setAnimation(0x1BA, 99, 1); @@ -2191,7 +2191,7 @@ void Scene05::updateAnimations() { _nextChickenSequenceId = 0x14B; break; case kAS05GrabLadder: - while (gameSys.isSequenceActive(0x149, 39)) + while (gameSys.isSequenceActive(0x149, 39) && !_vm->_gameDone) _vm->gameUpdateTick(); gameSys.insertSequence(0x14E, gnap._id + 1, 0, 0, kSeqNone, 0, 0, 0); gameSys.insertSequence(0x14D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); diff --git a/engines/gnap/scenes/group1.cpp b/engines/gnap/scenes/group1.cpp index f785c443f1..7b1e1e3625 100644 --- a/engines/gnap/scenes/group1.cpp +++ b/engines/gnap/scenes/group1.cpp @@ -1488,7 +1488,7 @@ void Scene13::showScribble() { _vm->_largeSprite = gameSys.createSurface(0x6F); gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); while (!_vm->_mouseClickState._left && !_vm->isKeyStatus1(Common::KEYCODE_ESCAPE) && - !_vm->isKeyStatus1(Common::KEYCODE_SPACE) && !_vm->isKeyStatus1(29)) + !_vm->isKeyStatus1(Common::KEYCODE_SPACE) && !_vm->isKeyStatus1(29) && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->_mouseClickState._left = false; _vm->clearKeyStatus1(Common::KEYCODE_ESCAPE); @@ -2365,7 +2365,7 @@ void Scene17::platHangUpPhone() { plat._actionStatus = -1; gameSys.setAnimation(0x257, 254, 4); gameSys.insertSequence(0x257, 254, _currPhoneSequenceId, 254, kSeqSyncExists, 0, 0, 0); - while (gameSys.getAnimationStatus(4) != 2) + while (gameSys.getAnimationStatus(4) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); gameSys.setAnimation(0x25B, plat._id, 1); gameSys.insertSequence(0x25B, plat._id, plat._sequenceId | (plat._sequenceDatNum << 16), plat._id, kSeqSyncWait, 0, 0, 0); @@ -2374,7 +2374,7 @@ void Scene17::platHangUpPhone() { _currPhoneSequenceId = -1; _nextPhoneSequenceId = -1; _vm->clearFlag(kGFPlatypusTalkingToAssistant); - while (gameSys.getAnimationStatus(1) != 2) + while (gameSys.getAnimationStatus(1) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); gnap._actionStatus = savedGnapActionStatus; _vm->updateMouseCursor(); @@ -3272,7 +3272,7 @@ void Scene18::putDownGarbageCan(int animationIndex) { PlayerGnap& gnap = *_vm->_gnap; if (animationIndex >= 0) { - while (gameSys.getAnimationStatus(animationIndex) != 2) + while (gameSys.getAnimationStatus(animationIndex) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); } if (gnap._idleFacing != kDirNone && gnap._idleFacing != kDirBottomRight && gnap._idleFacing != kDirUpRight) @@ -3296,7 +3296,7 @@ void Scene18::putDownGarbageCan(int animationIndex) { gameSys.insertSequence(0x1FB, 19, 0, 0, kSeqNone, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); gameSys.setAnimation(0x1FA, 19, 4); gameSys.insertSequence(0x1FA, 19, 507, 19, kSeqSyncWait, 0, 15 * (5 * _vm->_s18GarbageCanPos - 40), 0); - while (gameSys.getAnimationStatus(4) != 2) + while (gameSys.getAnimationStatus(4) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); } @@ -3311,7 +3311,7 @@ void Scene18::platEndPhoning(bool platFl) { if (_currPhoneSequenceId != -1) { gameSys.setAnimation(0x21E, 254, 3); gameSys.insertSequence(0x21E, 254, _currPhoneSequenceId, 254, kSeqSyncExists, 0, 0, 0); - while (gameSys.getAnimationStatus(3) != 2) + while (gameSys.getAnimationStatus(3) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); } gameSys.removeSequence(0x21F, 254, true); @@ -3352,7 +3352,7 @@ void Scene18::closeHydrantValve() { void Scene18::waitForGnapAction() { PlayerGnap& gnap = *_vm->_gnap; - while (gnap._actionStatus >= 0) { + while (gnap._actionStatus >= 0 && !_vm->_gameDone) { updateAnimations(); _vm->gameUpdateTick(); } @@ -3890,7 +3890,7 @@ void Scene18::updateAnimations() { gameSys.removeSequence(0x20C, 19, true); gameSys.setAnimation(0x217, 39, 5); gameSys.insertSequence(0x217, 39, 0x216, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(5) != 2) + while (gameSys.getAnimationStatus(5) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->playSound(0x22B, true); gameSys.insertSequence(0x20E, 39, 0, 0, kSeqNone, 0, 0, 0); @@ -3927,7 +3927,7 @@ void Scene18::updateAnimations() { _cowboyHatSurface = _vm->addFullScreenSprite(0x1D2, 255); gameSys.setAnimation(0x218, 256, 0); gameSys.insertSequence(0x218, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->_newSceneNum = 18; _vm->invAdd(kItemCowboyHat); @@ -3992,7 +3992,7 @@ void Scene18::updateAnimations() { gameSys.removeSequence(0x20B, 19, true); gameSys.setAnimation(0x213, 39, 5); gameSys.insertSequence(0x214, 39, 0x213, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(5) != 2) + while (gameSys.getAnimationStatus(5) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->playSound(0x22B, true); gameSys.insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0); @@ -4008,7 +4008,7 @@ void Scene18::updateAnimations() { gameSys.removeSequence(0x20B, 19, true); gameSys.setAnimation(0x211, 39, 5); gameSys.insertSequence(0x212, 39, 0x211, 39, kSeqLoop | kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(5) != 2) + while (gameSys.getAnimationStatus(5) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->playSound(0x22B, true); gameSys.insertSequence(0x20D, 39, 0, 0, kSeqNone, 0, 0, 0); @@ -4411,10 +4411,9 @@ void Scene19::updateAnimations() { _pictureSurface = _vm->addFullScreenSprite(0xF, 255); gameSys.setAnimation(0x61, 256, 0); gameSys.insertSequence(0x61, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) { - // checkGameAppStatus(); + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); - } + _vm->setFlag(kGFUnk27); _vm->showCursor(); _vm->_newSceneNum = 17; @@ -4454,9 +4453,9 @@ void Scene19::updateAnimations() { _currShopAssistantSequenceId = _nextShopAssistantSequenceId; _nextShopAssistantSequenceId = -1; _vm->_timers[5] = 10; - while (_vm->_timers[5]) { + while (_vm->_timers[5] && !_vm->_gameDone) _vm->gameUpdateTick(); - } + gnap.playIdle(Common::Point(6, 2)); gnap._actionStatus = -1; break; diff --git a/engines/gnap/scenes/group2.cpp b/engines/gnap/scenes/group2.cpp index 380bb0ba67..2bee320b72 100644 --- a/engines/gnap/scenes/group2.cpp +++ b/engines/gnap/scenes/group2.cpp @@ -205,10 +205,9 @@ void Scene20::run() { _vm->endSceneInit(); gameSys.setAnimation(0x182, 140, 0); gameSys.insertSequence(0x182, 140, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) { - // checkGameAppStatus(); + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); - } + gnap.initPos(11, 8, kDirBottomLeft); plat.initPos(11, 9, kDirUnk4); gnap.walkTo(Common::Point(5, 8), -1, 0x107BA, 1); @@ -623,7 +622,7 @@ void Scene20::updateAnimations() { _vm->addFullScreenSprite(0x12C, 255); gameSys.setAnimation(0x181, 256, 0); gameSys.insertSequence(0x181, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->removeFullScreenSprite(); _vm->showCursor(); @@ -1088,9 +1087,9 @@ void Scene22::run() { gameSys.drawSpriteToBackground(0, 0, 0x44); gameSys.setAnimation(storeDetectiveSeqId, 256, 4); gameSys.insertSequence(storeDetectiveSeqId, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(4) != 2) { + while (gameSys.getAnimationStatus(4) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); - } + _vm->_sceneDone = true; _vm->_newSceneNum = 20; _caughtBefore = true; @@ -1316,8 +1315,9 @@ void Scene23::run() { gnap.walkTo(Common::Point(2, 7), -1, 0x107B9, 1); } else { gnap.walkTo(Common::Point(2, 7), 0, 0x107B9, 1); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); + _vm->playSequences(0x48, 0xBA, 0xBB, 0xBC); _vm->setFlag(kGFUnk24); } @@ -1800,7 +1800,7 @@ void Scene25::playAnims(int index) { gameSys.insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); _vm->delayTicksCursor(5); while (!_vm->_mouseClickState._left && !_vm->isKeyStatus1(Common::KEYCODE_ESCAPE) && !_vm->isKeyStatus1(Common::KEYCODE_SPACE) && - !_vm->isKeyStatus1(29)) { + !_vm->isKeyStatus1(29) && !_vm->_gameDone) { _vm->gameUpdateTick(); } _vm->_mouseClickState._left = false; @@ -2767,7 +2767,7 @@ void Scene28::run() { _nextClownSequenceId = -1; _vm->_timers[4] = _vm->getRandom(20) + 80; gnap._actionStatus = kAS28GnapWaiting; - while (gameSys.getAnimationStatus(3) != 2) { + while (gameSys.getAnimationStatus(3) != 2 && !_vm->_gameDone) { _vm->gameUpdateTick(); _vm->updateMouseCursor(); } @@ -3001,8 +3001,9 @@ void Scene28::updateAnimations() { _vm->addFullScreenSprite(0xF6, 255); gameSys.setAnimation(0x120, 256, 0); gameSys.insertSequence(0x120, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); + _vm->removeFullScreenSprite(); _vm->showCursor(); _vm->setGrabCursorSprite(kItemHorn); @@ -3381,10 +3382,12 @@ void Scene29::updateAnimations() { _currMonkeySequenceId = 0xE6; _nextMonkeySequenceId = -1; _vm->_timers[5] = 30; - while (_vm->_timers[5]) + while (_vm->_timers[5] && !_vm->_gameDone) _vm->gameUpdateTick(); + _vm->_plat->walkTo(Common::Point(0, 8), 1, 0x107CF, 1); - while (gameSys.getAnimationStatus(1) != 2) + + while (gameSys.getAnimationStatus(1) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); } else if (_nextMonkeySequenceId == -1) { switch (_vm->getRandom(6)) { diff --git a/engines/gnap/scenes/group3.cpp b/engines/gnap/scenes/group3.cpp index b700d6e2f4..6c93057346 100644 --- a/engines/gnap/scenes/group3.cpp +++ b/engines/gnap/scenes/group3.cpp @@ -238,7 +238,7 @@ void Scene30::updateAnimations() { gameSys.removeSequence(0x105, gnap._id, true); gameSys.setAnimation(0x102, 256, 0); gameSys.insertSequence(0x102, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); gameSys.setAnimation(0x103, gnap._id, 0); gameSys.insertSequence(0x103, gnap._id, 0, 0, kSeqNone, 0, 0, 0); diff --git a/engines/gnap/scenes/group4.cpp b/engines/gnap/scenes/group4.cpp index 810e4bfdfc..7a5de8d37e 100644 --- a/engines/gnap/scenes/group4.cpp +++ b/engines/gnap/scenes/group4.cpp @@ -1139,7 +1139,7 @@ void Scene42::updateAnimations() { _vm->addFullScreenSprite(0x13E, 255); gameSys.setAnimation(0x151, 256, 0); gameSys.insertSequence(0x151, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); _vm->removeFullScreenSprite(); _vm->showCursor(); @@ -2189,7 +2189,7 @@ void Scene45::run() { _vm->setGrabCursorSprite(-1); gameSys.setAnimation(0x9D, gnap._id, 0); gameSys.insertSequence(0x9D, gnap._id, makeRid(gnap._sequenceDatNum, gnap._sequenceId), gnap._id, kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) { + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) { _vm->gameUpdateTick(); if (gameSys.getAnimationStatus(2) == 2) { gameSys.setAnimation(0, 0, 2); @@ -2211,7 +2211,7 @@ void Scene45::run() { _vm->addFullScreenSprite(0x8A, 255); gameSys.setAnimation(0xA0, 256, 0); gameSys.insertSequence(0xA0, 256, 0, 0, kSeqNone, 0, 0, 0); - while (gameSys.getAnimationStatus(0) != 2) + while (gameSys.getAnimationStatus(0) != 2 && !_vm->_gameDone) _vm->gameUpdateTick(); gameSys.setAnimation(0x107BD, gnap._id, 0); gameSys.insertSequence(0x107BD, gnap._id, diff --git a/engines/gnap/scenes/group5.cpp b/engines/gnap/scenes/group5.cpp index 2788a43ac1..a359da21db 100644 --- a/engines/gnap/scenes/group5.cpp +++ b/engines/gnap/scenes/group5.cpp @@ -89,8 +89,7 @@ int Scene53::pressPhoneNumberButton(int phoneNumber, int buttonNum) { } gnap._actionStatus = 6; - while (gameSys.getAnimationStatus(6) != 2) { - // checkGameAppStatus(); + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); _vm->gameUpdateTick(); } @@ -141,9 +140,8 @@ void Scene53::runRandomCall() { } gnap._actionStatus = 1; - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } gnap._actionStatus = -1; @@ -159,9 +157,8 @@ void Scene53::runChitChatLine() { gameSys.insertSequence(0x6E, 1, 0, 0, kSeqNone, 16, 0, 0); gnap._actionStatus = 1; - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } gnap._actionStatus = -1; @@ -225,18 +222,16 @@ void Scene53::runChitChatLine() { gameSys.setAnimation(sequenceId, 1, 6); gameSys.insertSequence(sequenceId, 1, 0, 0, kSeqNone, 16, 0, 0); gnap._actionStatus = 1; - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } gnap._actionStatus = -1; gameSys.setAnimation(0x72, 1, 6); gameSys.insertSequence(0x72, 1, 0, 0, kSeqNone, 16, 0, 0); gnap._actionStatus = 1; - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } gnap._actionStatus = -1; @@ -250,9 +245,8 @@ void Scene53::runChitChatLine() { if (_vm->isFlag(kGFSpringTaken)) { gameSys.setAnimation(0x73, 40, 6); gameSys.insertSequence(0x73, 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } _currHandSequenceId = 0x73; @@ -317,9 +311,8 @@ void Scene53::run() { if (_vm->isFlag(kGFSpringTaken)) { gameSys.setAnimation(0x73, 40, 6); gameSys.insertSequence(0x73, 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } _currHandSequenceId = 0x73; @@ -359,9 +352,8 @@ void Scene53::run() { if (_vm->isFlag(kGFSpringTaken)) { gameSys.setAnimation(0x73, 40, 6); gameSys.insertSequence(0x73, 40, _currHandSequenceId, 40, kSeqSyncWait, 0, 0, 0); - while (gameSys.getAnimationStatus(6) != 2) { + while (gameSys.getAnimationStatus(6) != 2 && !_vm->_gameDone) { _vm->updateMouseCursor(); - // checkGameAppStatus(); _vm->gameUpdateTick(); } _currHandSequenceId = 0x73; -- cgit v1.2.3