From 6693b22851dc7030922360e4275b73e2f9804cf0 Mon Sep 17 00:00:00 2001 From: Denis Kasak Date: Wed, 12 Aug 2009 04:18:45 +0000 Subject: * Split loop status and substatus into two different enums since they are two separate concepts * Fixed slight glitch where object titles (which normally disappear when objects are used/looked at) reappeared for a moment after the script has finished svn-id: r43305 --- engines/draci/game.cpp | 16 +++++++++------- engines/draci/game.h | 22 +++++++++++++++------- engines/draci/script.cpp | 16 ++++++++-------- 3 files changed, 32 insertions(+), 22 deletions(-) (limited to 'engines/draci') diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp index a1652ab732..7c55489677 100644 --- a/engines/draci/game.cpp +++ b/engines/draci/game.cpp @@ -174,7 +174,7 @@ void Game::start() { _persons[kDragonObject]._y = 0; } - setLoopSubstatus(kStatusOrdinary); + setLoopSubstatus(kSubstatusOrdinary); // Do the actual change changeRoom(_newRoom); @@ -281,7 +281,7 @@ void Game::loop() { int x = _vm->_mouse->getPosX(); int y = _vm->_mouse->getPosY(); - if (_loopStatus == kStatusDialogue && _loopSubstatus == kStatusOrdinary) { + if (_loopStatus == kStatusDialogue && _loopSubstatus == kSubstatusOrdinary) { // Find animation under cursor _animUnderCursor = _vm->_anims->getTopAnimationID(x, y); @@ -309,7 +309,7 @@ void Game::loop() { Animation *titleAnim = _vm->_anims->getAnimation(kTitleText); Text *title = reinterpret_cast(titleAnim->getFrame()); - if (_loopStatus == kStatusOrdinary && _loopSubstatus == kStatusOrdinary) { + if (_loopStatus == kStatusOrdinary && _loopSubstatus == kSubstatusOrdinary) { if(_vm->_mouse->isCursorOn()) { // Find the game object under the cursor // (to be more precise, one that corresponds to the animation under the cursor) @@ -333,6 +333,7 @@ void Game::loop() { _vm->_mouse->cursorOff(); titleAnim->markDirtyRect(surface); title->setText(""); + _objUnderCursor = kObjectNotFound; if (!obj->_imLook) { if (obj->_lookDir == -1) { @@ -359,6 +360,7 @@ void Game::loop() { _vm->_mouse->cursorOff(); titleAnim->markDirtyRect(surface); title->setText(""); + _objUnderCursor = kObjectNotFound; if (!obj->_imUse) { if (obj->_useDir == -1) { @@ -394,7 +396,7 @@ void Game::loop() { debug(8, "Anim under cursor: %d", _animUnderCursor); // Handle character talking (if there is any) - if (_loopSubstatus == kStatusTalk) { + if (_loopSubstatus == kSubstatusTalk) { Animation *speechAnim = _vm->_anims->getAnimation(kSpeechText); Text *speechFrame = reinterpret_cast(speechAnim->getFrame()); @@ -537,7 +539,7 @@ void Game::dialogueMenu(int dialogueID) { _dialogueExit = false; hit = dialogueDraw(); - debug(7, kDraciLogicDebugLevel, + debugC(7, kDraciLogicDebugLevel, "hit: %d, _lines[hit]: %d, lastblock: %d, dialogueLines: %d, dialogueExit: %d", hit, _lines[hit], _lastBlock, _dialogueLines, _dialogueExit); @@ -1111,7 +1113,7 @@ void Game::setLoopStatus(LoopStatus status) { _loopStatus = status; } -void Game::setLoopSubstatus(LoopStatus status) { +void Game::setLoopSubstatus(LoopSubstatus status) { _loopSubstatus = status; } @@ -1119,7 +1121,7 @@ LoopStatus Game::getLoopStatus() { return _loopStatus; } -LoopStatus Game::getLoopSubstatus() { +LoopSubstatus Game::getLoopSubstatus() { return _loopSubstatus; } diff --git a/engines/draci/game.h b/engines/draci/game.h index a712542e9e..31e27f9708 100644 --- a/engines/draci/game.h +++ b/engines/draci/game.h @@ -175,10 +175,18 @@ struct Room { GPL2Program _program; }; -enum LoopStatus { - kStatusGate, kStatusOrdinary, kStatusInventory, - kStatusDialogue, kStatusTalk, kStatusStrange, - kStatusFade +enum LoopStatus { + kStatusOrdinary, + kStatusGate, + kStatusInventory, + kStatusDialogue +}; + +enum LoopSubstatus { + kSubstatusOrdinary, + kSubstatusTalk, + kSubstatusFade, + kSubstatusStrange }; /** @@ -262,9 +270,9 @@ public: void setMarkedAnimationIndex(int index); void setLoopStatus(LoopStatus status); - void setLoopSubstatus(LoopStatus status); + void setLoopSubstatus(LoopSubstatus status); LoopStatus getLoopStatus(); - LoopStatus getLoopSubstatus(); + LoopSubstatus getLoopSubstatus(); bool shouldQuit() { return _shouldQuit; } void setQuit(bool quit) { _shouldQuit = quit; } @@ -321,7 +329,7 @@ public: Animation *_dialogueAnims[4]; LoopStatus _loopStatus; - LoopStatus _loopSubstatus; + LoopSubstatus _loopSubstatus; bool _shouldQuit; bool _shouldExitLoop; diff --git a/engines/draci/script.cpp b/engines/draci/script.cpp index 4dd5a826d7..b30a081027 100644 --- a/engines/draci/script.cpp +++ b/engines/draci/script.cpp @@ -346,11 +346,11 @@ void Script::play(Common::Queue ¶ms) { return; } - _vm->_game->setLoopStatus(kStatusStrange); + _vm->_game->setLoopSubstatus(kSubstatusStrange); _vm->_game->setExitLoop(true); _vm->_game->loop(); _vm->_game->setExitLoop(false); - _vm->_game->setLoopStatus(kStatusOrdinary); + _vm->_game->setLoopSubstatus(kSubstatusOrdinary); } void Script::load(Common::Queue ¶ms) { @@ -446,7 +446,7 @@ void Script::startPlay(Common::Queue ¶ms) { Animation *anim = _vm->_anims->getAnimation(animID); anim->registerCallback(&Animation::exitGameLoop); - _vm->_game->setLoopStatus(kStatusStrange); + _vm->_game->setLoopSubstatus(kSubstatusStrange); bool visible = (obj->_location == _vm->_game->getRoomNum() && obj->_visible); @@ -457,7 +457,7 @@ void Script::startPlay(Common::Queue ¶ms) { _vm->_game->loop(); _vm->_game->setExitLoop(false); _vm->_anims->stop(animID); - _vm->_game->setLoopStatus(kStatusOrdinary); + _vm->_game->setLoopSubstatus(kSubstatusOrdinary); anim->registerCallback(&Animation::doNothing); } @@ -596,9 +596,9 @@ void Script::walkOnPlay(Common::Queue ¶ms) { _vm->_game->walkHero(x, y); - _vm->_game->setLoopSubstatus(kStatusStrange); + _vm->_game->setLoopSubstatus(kSubstatusStrange); _vm->_game->loop(); - _vm->_game->setLoopSubstatus(kStatusOrdinary); + _vm->_game->setLoopSubstatus(kSubstatusOrdinary); _vm->_game->setExitLoop(false); } @@ -650,7 +650,7 @@ void Script::talk(Common::Queue ¶ms) { } // Set the loop substatus to an appropriate value - _vm->_game->setLoopSubstatus(kStatusTalk); + _vm->_game->setLoopSubstatus(kSubstatusTalk); // Record time _vm->_game->setSpeechTick(_vm->_system->getMillis()); @@ -673,7 +673,7 @@ void Script::talk(Common::Queue ¶ms) { speechFrame->setText(""); // Revert to "normal" loop status - _vm->_game->setLoopSubstatus(kStatusOrdinary); + _vm->_game->setLoopSubstatus(kSubstatusOrdinary); _vm->_game->setExitLoop(false); } -- cgit v1.2.3