diff options
author | Strangerke | 2016-04-21 00:09:44 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-05-10 09:54:21 +0200 |
commit | 076d23fdb6494285cb54b6cbb0c0cd27d085a0db (patch) | |
tree | 5e4a074aa4fd22c310e75cfeeb598f5b5735c3e6 | |
parent | 4e8119b262df0a933d67646f561ba630cb9cf746 (diff) | |
download | scummvm-rg350-076d23fdb6494285cb54b6cbb0c0cd27d085a0db.tar.gz scummvm-rg350-076d23fdb6494285cb54b6cbb0c0cd27d085a0db.tar.bz2 scummvm-rg350-076d23fdb6494285cb54b6cbb0c0cd27d085a0db.zip |
GNAP: Refactor scene 10
-rw-r--r-- | engines/gnap/gnap.h | 8 | ||||
-rw-r--r-- | engines/gnap/scenes/scene10.cpp | 459 | ||||
-rw-r--r-- | engines/gnap/scenes/scene10.h | 50 | ||||
-rw-r--r-- | engines/gnap/scenes/scenecore.cpp | 9 |
4 files changed, 285 insertions, 241 deletions
diff --git a/engines/gnap/gnap.h b/engines/gnap/gnap.h index 4331029946..4b95dbcac6 100644 --- a/engines/gnap/gnap.h +++ b/engines/gnap/gnap.h @@ -603,14 +603,6 @@ public: void sceneXX_playRandomSound(int timerIndex); void playSequences(int fullScreenSpriteId, int sequenceId1, int sequenceId2, int sequenceId3); - // Scene 10 - int _s10_nextCookSequenceId, _s10_currCookSequenceId; - int scene10_init(); - void scene10_updateHotspots(); - void scene10_run(); - void scene10_updateAnimations(); - void scene10_updateAnimationsCb(); - // Scene 11 int _s11_billardBallCtr; int _s11_nextHookGuySequenceId, _s11_currHookGuySequenceId; diff --git a/engines/gnap/scenes/scene10.cpp b/engines/gnap/scenes/scene10.cpp index 311045db6c..9f987ba7bc 100644 --- a/engines/gnap/scenes/scene10.cpp +++ b/engines/gnap/scenes/scene10.cpp @@ -23,6 +23,7 @@ #include "gnap/gnap.h" #include "gnap/gamesys.h" #include "gnap/resource.h" +#include "gnap/scenes/scene10.h" namespace Gnap { @@ -47,95 +48,97 @@ enum { kASPlatWithBox = 4 }; -int GnapEngine::scene10_init() { - _gameSys->setAnimation(0, 0, 0); - _gameSys->setAnimation(0, 0, 1); - _gameSys->setAnimation(0, 0, 2); - return 0x10F; +Scene10::Scene10(GnapEngine *vm) : Scene(vm) { + _s10_nextCookSequenceId = -1; + _s10_currCookSequenceId = -1; } -void GnapEngine::scene10_updateHotspots() { - setHotspot(kHSPlatypus, 0, 0, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setHotspot(kHSExitBar, 0, 75, 85, 455, SF_EXIT_NW_CURSOR); - setHotspot(kHSExitBackdoor, 75, 590, 500, 599, SF_EXIT_D_CURSOR | SF_WALKABLE); - setHotspot(kHSCook, 370, 205, 495, 460, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setHotspot(kHSTongs, 250, 290, 350, 337, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setHotspot(kHSBox, 510, 275, 565, 330, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setHotspot(kHSOven, 690, 280, 799, 420, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setHotspot(kHSWalkArea1, 59, 0, 495, 460); - setHotspot(kHSWalkArea2, 495, 0, 650, 420); - setHotspot(kHSWalkArea3, 651, 0, 725, 400); - setHotspot(kHSWalkArea4, 725, 0, 799, 441); - setDeviceHotspot(kHSDevice, -1, -1, -1, -1); - _hotspotsCount = 12; +int Scene10::init() { + _vm->_gameSys->setAnimation(0, 0, 0); + _vm->_gameSys->setAnimation(0, 0, 1); + _vm->_gameSys->setAnimation(0, 0, 2); + return 0x10F; } -void GnapEngine::scene10_run() { +void Scene10::updateHotspots() { + _vm->setHotspot(kHSPlatypus, 0, 0, 0, 0, SF_WALKABLE | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHSExitBar, 0, 75, 85, 455, SF_EXIT_NW_CURSOR); + _vm->setHotspot(kHSExitBackdoor, 75, 590, 500, 599, SF_EXIT_D_CURSOR | SF_WALKABLE); + _vm->setHotspot(kHSCook, 370, 205, 495, 460, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHSTongs, 250, 290, 350, 337, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHSBox, 510, 275, 565, 330, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHSOven, 690, 280, 799, 420, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHSWalkArea1, 59, 0, 495, 460); + _vm->setHotspot(kHSWalkArea2, 495, 0, 650, 420); + _vm->setHotspot(kHSWalkArea3, 651, 0, 725, 400); + _vm->setHotspot(kHSWalkArea4, 725, 0, 799, 441); + _vm->setDeviceHotspot(kHSDevice, -1, -1, -1, -1); + _vm->_hotspotsCount = 12; +} +void Scene10::run() { _s10_currCookSequenceId = 0x103; - _gameSys->setAnimation(0x103, 100, 2); - _gameSys->insertSequence(0x103, 100, 0, 0, kSeqNone, 0, 0, 0); + _vm->_gameSys->setAnimation(0x103, 100, 2); + _vm->_gameSys->insertSequence(0x103, 100, 0, 0, kSeqNone, 0, 0, 0); _s10_nextCookSequenceId = 0x106; - if (!isFlag(kGFMudTaken)) - _gameSys->insertSequence(0x107, 100, 0, 0, kSeqNone, 0, 0, 0); + if (!_vm->isFlag(kGFMudTaken)) + _vm->_gameSys->insertSequence(0x107, 100, 0, 0, kSeqNone, 0, 0, 0); - queueInsertDeviceIcon(); + _vm->queueInsertDeviceIcon(); - if (_prevSceneNum == 9) { - initGnapPos(11, 8, kDirBottomLeft); - initPlatypusPos(12, 7, kDirUnk4); - endSceneInit(); - gnapWalkTo(9, 8, -1, 0x107BA, 1); - platypusWalkTo(9, 7, -1, 0x107D2, 1); + if (_vm->_prevSceneNum == 9) { + _vm->initGnapPos(11, 8, kDirBottomLeft); + _vm->initPlatypusPos(12, 7, kDirUnk4); + _vm->endSceneInit(); + _vm->gnapWalkTo(9, 8, -1, 0x107BA, 1); + _vm->platypusWalkTo(9, 7, -1, 0x107D2, 1); } else { - initGnapPos(-1, 7, kDirBottomRight); - initPlatypusPos(-2, 8, kDirNone); - endSceneInit(); - gnapWalkTo(1, 7, -1, 0x107B9, 1); - platypusWalkTo(1, 8, -1, 0x107C2, 1); + _vm->initGnapPos(-1, 7, kDirBottomRight); + _vm->initPlatypusPos(-2, 8, kDirNone); + _vm->endSceneInit(); + _vm->gnapWalkTo(1, 7, -1, 0x107B9, 1); + _vm->platypusWalkTo(1, 8, -1, 0x107C2, 1); } - _timers[4] = getRandom(80) + 150; - _timers[5] = getRandom(100) + 100; + _vm->_timers[4] = _vm->getRandom(80) + 150; + _vm->_timers[5] = _vm->getRandom(100) + 100; - while (!_sceneDone) { + while (!_vm->_sceneDone) { + if (!_vm->isSoundPlaying(0x1091E)) + _vm->playSound(0x1091E, true); - if (!isSoundPlaying(0x1091E)) - playSound(0x1091E, true); + if (!_vm->isSoundPlaying(0x1091A)) + _vm->playSound(0x1091A, true); - if (!isSoundPlaying(0x1091A)) - playSound(0x1091A, true); + _vm->updateMouseCursor(); - updateMouseCursor(); + _vm->testWalk(0, 0, -1, -1, -1, -1); - testWalk(0, 0, -1, -1, -1, -1); + _vm->updateCursorByHotspot(); - updateCursorByHotspot(); + _vm->_sceneClickedHotspot = _vm->getClickedHotspotId(); + _vm->updateGrabCursorSprite(0, 0); - _sceneClickedHotspot = getClickedHotspotId(); - updateGrabCursorSprite(0, 0); - - switch (_sceneClickedHotspot) { - + switch (_vm->_sceneClickedHotspot) { case kHSPlatypus: - if (_grabCursorSpriteIndex >= 0) { - playGnapImpossible(0, 0); + if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->playGnapImpossible(0, 0); } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: - if (isFlag(kGFMudTaken)) - playGnapMoan1(_platX, _platY); + if (_vm->isFlag(kGFMudTaken)) + _vm->playGnapMoan1(_vm->_platX, _vm->_platY); else - playGnapScratchingHead(_platX, _platY); + _vm->playGnapScratchingHead(_vm->_platX, _vm->_platY); break; case GRAB_CURSOR: - gnapKissPlatypus(10); + _vm->gnapKissPlatypus(10); break; case TALK_CURSOR: - playGnapBrainPulsating(_platX, _platY); - playPlatypusSequence(getPlatypusSequenceId()); + _vm->playGnapBrainPulsating(_vm->_platX, _vm->_platY); + _vm->playPlatypusSequence(_vm->getPlatypusSequenceId()); break; case PLAT_CURSOR: break; @@ -144,86 +147,86 @@ void GnapEngine::scene10_run() { break; case kHSExitBar: - _isLeavingScene = true; - gnapActionIdle(0x10C); - gnapWalkTo(0, 7, 0, 0x107AF, 1); - _gnapActionStatus = kASLeaveScene; - platypusWalkTo(0, 7, -1, 0x107CF, 1); - _newSceneNum = 11; + _vm->_isLeavingScene = true; + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(0, 7, 0, 0x107AF, 1); + _vm->_gnapActionStatus = kASLeaveScene; + _vm->platypusWalkTo(0, 7, -1, 0x107CF, 1); + _vm->_newSceneNum = 11; break; case kHSExitBackdoor: - _isLeavingScene = true; - gnapActionIdle(0x10C); - gnapWalkTo(2, 9, 0, 0x107AE, 1); - _gnapActionStatus = kASLeaveScene; - platypusWalkTo(3, 9, -1, 0x107C7, 1); - _newSceneNum = 9; + _vm->_isLeavingScene = true; + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(2, 9, 0, 0x107AE, 1); + _vm->_gnapActionStatus = kASLeaveScene; + _vm->platypusWalkTo(3, 9, -1, 0x107C7, 1); + _vm->_newSceneNum = 9; break; case kHSCook: - if (_grabCursorSpriteIndex >= 0) { - playGnapShowCurrItem(4, 8, 6, 0); - _gameSys->setAnimation(makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, 0); - _gnapActionStatus = kASAnnoyCook; + if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->playGnapShowCurrItem(4, 8, 6, 0); + _vm->_gameSys->setAnimation(makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, 0); + _vm->_gnapActionStatus = kASAnnoyCook; } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: - playGnapScratchingHead(6, 0); + _vm->playGnapScratchingHead(6, 0); break; case GRAB_CURSOR: - playGnapImpossible(0, 0); - _gnapIdleFacing = kDirBottomRight; + _vm->playGnapImpossible(0, 0); + _vm->_gnapIdleFacing = kDirBottomRight; break; case TALK_CURSOR: - _gnapIdleFacing = kDirUpRight; - gnapActionIdle(0x10C); - gnapWalkTo(4, 8, 0, getGnapSequenceId(gskBrainPulsating, 0, 0) | 0x10000, 1); - _gnapActionStatus = kASAnnoyCook; + _vm->_gnapIdleFacing = kDirUpRight; + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(4, 8, 0, _vm->getGnapSequenceId(gskBrainPulsating, 0, 0) | 0x10000, 1); + _vm->_gnapActionStatus = kASAnnoyCook; break; case PLAT_CURSOR: - gnapActionIdle(0x10C); - gnapUseDeviceOnPlatypuss(); - platypusWalkTo(4, 6, -1, -1, 1); - gnapWalkTo(4, 8, 0, 0x107BB, 1); - _gnapActionStatus = kASAnnoyCook; + _vm->gnapActionIdle(0x10C); + _vm->gnapUseDeviceOnPlatypuss(); + _vm->platypusWalkTo(4, 6, -1, -1, 1); + _vm->gnapWalkTo(4, 8, 0, 0x107BB, 1); + _vm->_gnapActionStatus = kASAnnoyCook; break; } } break; case kHSTongs: - if (_grabCursorSpriteIndex >= 0) { - playGnapShowCurrItem(3, 7, 4, 0); + if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->playGnapShowCurrItem(3, 7, 4, 0); } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: - if (isFlag(kGFMudTaken)) - playGnapMoan2(-1, -1); + if (_vm->isFlag(kGFMudTaken)) + _vm->playGnapMoan2(-1, -1); else - playGnapScratchingHead(4, 3); + _vm->playGnapScratchingHead(4, 3); break; case GRAB_CURSOR: - if (isFlag(kGFMudTaken)) - playGnapMoan2(-1, -1); + if (_vm->isFlag(kGFMudTaken)) + _vm->playGnapMoan2(-1, -1); else { - gnapActionIdle(0x10C); - gnapWalkTo(4, 8, 0, 0x107BB, 1); - _gnapActionStatus = kASAnnoyCook; + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(4, 8, 0, 0x107BB, 1); + _vm->_gnapActionStatus = kASAnnoyCook; } break; case TALK_CURSOR: - playGnapImpossible(0, 0); + _vm->playGnapImpossible(0, 0); break; case PLAT_CURSOR: - if (isFlag(kGFMudTaken)) - playGnapMoan2(-1, -1); + if (_vm->isFlag(kGFMudTaken)) + _vm->playGnapMoan2(-1, -1); else { - gnapActionIdle(0x10C); - gnapUseDeviceOnPlatypuss(); - platypusWalkTo(3, 7, -1, -1, 1); - gnapWalkTo(4, 8, 0, 0x107BB, 1); - _gnapActionStatus = kASAnnoyCook; + _vm->gnapActionIdle(0x10C); + _vm->gnapUseDeviceOnPlatypuss(); + _vm->platypusWalkTo(3, 7, -1, -1, 1); + _vm->gnapWalkTo(4, 8, 0, 0x107BB, 1); + _vm->_gnapActionStatus = kASAnnoyCook; } break; } @@ -231,34 +234,34 @@ void GnapEngine::scene10_run() { break; case kHSBox: - if (_grabCursorSpriteIndex >= 0) { - playGnapShowCurrItem(7, 6, 6, 0); + if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->playGnapShowCurrItem(7, 6, 6, 0); } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: - playGnapScratchingHead(7, 3); + _vm->playGnapScratchingHead(7, 3); break; case GRAB_CURSOR: - gnapActionIdle(0x10C); - gnapWalkTo(4, 8, 0, 0x107BB, 1); - _gnapActionStatus = kASAnnoyCook; + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(4, 8, 0, 0x107BB, 1); + _vm->_gnapActionStatus = kASAnnoyCook; break; case TALK_CURSOR: - playGnapImpossible(0, 0); + _vm->playGnapImpossible(0, 0); break; case PLAT_CURSOR: - if (isFlag(kGFMudTaken)) - playGnapMoan2(-1, -1); + if (_vm->isFlag(kGFMudTaken)) + _vm->playGnapMoan2(-1, -1); else { - invAdd(kItemTongs); - setFlag(kGFMudTaken); - gnapActionIdle(0x10C); - gnapUseDeviceOnPlatypuss(); - platypusWalkTo(7, 6, 1, 0x107D2, 1); - _platypusActionStatus = kASPlatWithBox; - _platypusFacing = kDirUnk4; - _largeSprite = _gameSys->createSurface(0xC3); - playGnapIdle(7, 6); + _vm->invAdd(kItemTongs); + _vm->setFlag(kGFMudTaken); + _vm->gnapActionIdle(0x10C); + _vm->gnapUseDeviceOnPlatypuss(); + _vm->platypusWalkTo(7, 6, 1, 0x107D2, 1); + _vm->_platypusActionStatus = kASPlatWithBox; + _vm->_platypusFacing = kDirUnk4; + _vm->_largeSprite = _vm->_gameSys->createSurface(0xC3); + _vm->playGnapIdle(7, 6); } break; } @@ -266,28 +269,28 @@ void GnapEngine::scene10_run() { break; case kHSOven: - if (_grabCursorSpriteIndex >= 0) { - playGnapShowCurrItem(9, 6, 10, 0); + if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->playGnapShowCurrItem(9, 6, 10, 0); } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: - playGnapSequence(getGnapSequenceId(gskDeflect, 10, 5) | 0x10000); + _vm->playGnapSequence(_vm->getGnapSequenceId(gskDeflect, 10, 5) | 0x10000); break; case GRAB_CURSOR: - gnapActionIdle(0x10C); - gnapWalkTo(9, 6, 0, 0x107BB, 1); - _gameSys->insertSequence(0x10E, 120, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 0, 0); - _gnapSequenceId = 0x10E; - _gnapId = 120; - _gnapIdleFacing = kDirUpRight; - _gnapSequenceDatNum = 0; - _gnapX = 9; - _gnapY = 6; - _timers[2] = 360; + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(9, 6, 0, 0x107BB, 1); + _vm->_gameSys->insertSequence(0x10E, 120, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); + _vm->_gnapSequenceId = 0x10E; + _vm->_gnapId = 120; + _vm->_gnapIdleFacing = kDirUpRight; + _vm->_gnapSequenceDatNum = 0; + _vm->_gnapX = 9; + _vm->_gnapY = 6; + _vm->_timers[2] = 360; break; case TALK_CURSOR: case PLAT_CURSOR: - playGnapImpossible(0, 0); + _vm->playGnapImpossible(0, 0); break; } } @@ -297,39 +300,38 @@ void GnapEngine::scene10_run() { case kHSWalkArea2: case kHSWalkArea3: case kHSWalkArea4: - gnapActionIdle(0x10C); - gnapWalkTo(-1, -1, -1, -1, 1); + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(-1, -1, -1, -1, 1); break; case kHSDevice: - if (_gnapActionStatus < 0) { - runMenu(); - scene10_updateHotspots(); + if (_vm->_gnapActionStatus < 0) { + _vm->runMenu(); + updateHotspots(); } break; default: - if (_mouseClickState._left) { - gnapActionIdle(0x10C); - gnapWalkTo(-1, -1, -1, -1, 1); - _mouseClickState._left = false; + if (_vm->_mouseClickState._left) { + _vm->gnapActionIdle(0x10C); + _vm->gnapWalkTo(-1, -1, -1, -1, 1); + _vm->_mouseClickState._left = false; } break; - } - scene10_updateAnimations(); + updateAnimations(); - if (!_isLeavingScene) { - updatePlatypusIdleSequence(); - updateGnapIdleSequence(); - if (!_timers[4]) { - _timers[4] = getRandom(80) + 150; - playSound(0x12B, false); + if (!_vm->_isLeavingScene) { + _vm->updatePlatypusIdleSequence(); + _vm->updateGnapIdleSequence(); + if (!_vm->_timers[4]) { + _vm->_timers[4] = _vm->getRandom(80) + 150; + _vm->playSound(0x12B, false); } - if (!_timers[5]) { - _timers[5] = getRandom(100) + 100; - int _gnapRandomValue = getRandom(4); + if (!_vm->_timers[5]) { + _vm->_timers[5] = _vm->getRandom(100) + 100; + int _gnapRandomValue = _vm->getRandom(4); if (_gnapRandomValue) { int sequenceId; if (_gnapRandomValue == 1) { @@ -339,32 +341,29 @@ void GnapEngine::scene10_run() { } else { sequenceId = 0x8A7; } - _gameSys->insertSequence(sequenceId | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); + _vm->_gameSys->insertSequence(sequenceId | 0x10000, 179, 0, 0, kSeqNone, 0, 0, 0); } } } - checkGameKeys(); + _vm->checkGameKeys(); - if (isKeyStatus1(8)) { - clearKeyStatus1(8); - runMenu(); - scene10_updateHotspots(); + if (_vm->isKeyStatus1(8)) { + _vm->clearKeyStatus1(8); + _vm->runMenu(); + updateHotspots(); } - gameUpdateTick(); - + _vm->gameUpdateTick(); } - } -void GnapEngine::scene10_updateAnimations() { - - if (_gameSys->getAnimationStatus(0) == 2) { - _gameSys->setAnimation(0, 0, 0); - switch (_gnapActionStatus) { +void Scene10::updateAnimations() { + if (_vm->_gameSys->getAnimationStatus(0) == 2) { + _vm->_gameSys->setAnimation(0, 0, 0); + switch (_vm->_gnapActionStatus) { case kASLeaveScene: - _sceneDone = true; + _vm->_sceneDone = true; break; case kASAnnoyCook: _s10_nextCookSequenceId = 0x105; @@ -372,57 +371,57 @@ void GnapEngine::scene10_updateAnimations() { } } - if (_gameSys->getAnimationStatus(1) == 2) { - _gameSys->setAnimation(0, 0, 1); - switch (_platypusActionStatus) { + if (_vm->_gameSys->getAnimationStatus(1) == 2) { + _vm->_gameSys->setAnimation(0, 0, 1); + switch (_vm->_platypusActionStatus) { case kASPlatWithBox: _s10_nextCookSequenceId = 0x109; break; } } - if (_gameSys->getAnimationStatus(2) == 2 && _s10_nextCookSequenceId != -1) { + if (_vm->_gameSys->getAnimationStatus(2) == 2 && _s10_nextCookSequenceId != -1) { switch (_s10_nextCookSequenceId) { case 0x109: - _platX = 4; - _platY = 8; - _gameSys->insertSequence(0x109, 100, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); - _gameSys->insertSequence(0x107C9, 160, - _platypusSequenceId | (_platypusSequenceDatNum << 16), _platypusId, - kSeqSyncWait, getSequenceTotalDuration(0x109) + getSequenceTotalDuration(0x10A) + getSequenceTotalDuration(0x10843), - 75 * _platX - _platGridX, 48 * _platY - _platGridY); - _gameSys->removeSequence(0x107, 100, true); + _vm->_platX = 4; + _vm->_platY = 8; + _vm->_gameSys->insertSequence(0x109, 100, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); + _vm->_gameSys->insertSequence(0x107C9, 160, + _vm->_platypusSequenceId | (_vm->_platypusSequenceDatNum << 16), _vm->_platypusId, + kSeqSyncWait, _vm->getSequenceTotalDuration(0x109) + _vm->getSequenceTotalDuration(0x10A) + _vm->getSequenceTotalDuration(0x10843), + 75 * _vm->_platX - _vm->_platGridX, 48 * _vm->_platY - _vm->_platGridY); + _vm->_gameSys->removeSequence(0x107, 100, true); _s10_currCookSequenceId = 0x109; _s10_nextCookSequenceId = 0x843; - _platypusSequenceId = 0x7C9; - _platypusId = 160; - _platypusFacing = kDirNone; - _platypusSequenceDatNum = 1; + _vm->_platypusSequenceId = 0x7C9; + _vm->_platypusId = 160; + _vm->_platypusFacing = kDirNone; + _vm->_platypusSequenceDatNum = 1; break; case 0x843: - hideCursor(); - _gameSys->insertSpriteDrawItem(_largeSprite, 0, 0, 300); - _gameSys->insertSequence(0x10843, 301, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); + _vm->hideCursor(); + _vm->_gameSys->insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); + _vm->_gameSys->insertSequence(0x10843, 301, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); _s10_currCookSequenceId = 0x843; _s10_nextCookSequenceId = 0x10A; break; case 0x10A: - _gameSys->insertSequence(_s10_nextCookSequenceId, 100, 0x10843, 301, kSeqSyncWait, 0, 0, 0); + _vm->_gameSys->insertSequence(_s10_nextCookSequenceId, 100, 0x10843, 301, kSeqSyncWait, 0, 0, 0); _s10_currCookSequenceId = _s10_nextCookSequenceId; _s10_nextCookSequenceId = 0x104; - showCursor(); - _gameSys->removeSpriteDrawItem(_largeSprite, 300); - delayTicksCursor(5); - deleteSurface(&_largeSprite); - setGrabCursorSprite(kItemTongs); - if (_platypusActionStatus == kASPlatWithBox) - _platypusActionStatus = -1; - if (_gnapX == 4 && _gnapY == 8) - gnapWalkStep(); + _vm->showCursor(); + _vm->_gameSys->removeSpriteDrawItem(_vm->_largeSprite, 300); + _vm->delayTicksCursor(5); + _vm->deleteSurface(&_vm->_largeSprite); + _vm->setGrabCursorSprite(kItemTongs); + if (_vm->_platypusActionStatus == kASPlatWithBox) + _vm->_platypusActionStatus = -1; + if (_vm->_gnapX == 4 && _vm->_gnapY == 8) + _vm->gnapWalkStep(); break; default: - _gameSys->insertSequence(_s10_nextCookSequenceId, 100, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); + _vm->_gameSys->insertSequence(_s10_nextCookSequenceId, 100, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); _s10_currCookSequenceId = _s10_nextCookSequenceId; break; } @@ -430,8 +429,8 @@ void GnapEngine::scene10_updateAnimations() { switch (_s10_currCookSequenceId) { case 0x106: { // TODO: Refactor into a if + a switch - int rnd = getRandom(7); - if (_gnapActionStatus >= 0 || _platypusActionStatus >= 0) + int rnd = _vm->getRandom(7); + if (_vm->_gnapActionStatus >= 0 || _vm->_platypusActionStatus >= 0) _s10_nextCookSequenceId = 0x106; else if (rnd == 0) _s10_nextCookSequenceId = 0x104; @@ -439,31 +438,31 @@ void GnapEngine::scene10_updateAnimations() { _s10_nextCookSequenceId = 0x103; else if (rnd == 2) { _s10_nextCookSequenceId = 0x106; - _gameSys->insertSequence(0x10D, 1, 0, 0, kSeqNone, 0, 0, 0); + _vm->_gameSys->insertSequence(0x10D, 1, 0, 0, kSeqNone, 0, 0, 0); } else _s10_nextCookSequenceId = 0x106; } break; case 0x103: - if (_gnapActionStatus >= 0 || _platypusActionStatus >= 0) + if (_vm->_gnapActionStatus >= 0 || _vm->_platypusActionStatus >= 0) _s10_nextCookSequenceId = 0x106; - else if (getRandom(7) == 0) + else if (_vm->getRandom(7) == 0) _s10_nextCookSequenceId = 0x104; else _s10_nextCookSequenceId = 0x106; break; case 0x104: - if (_gnapActionStatus >= 0 || _platypusActionStatus >= 0) + if (_vm->_gnapActionStatus >= 0 || _vm->_platypusActionStatus >= 0) _s10_nextCookSequenceId = 0x106; - else if (getRandom(7) == 0) + else if (_vm->getRandom(7) == 0) _s10_nextCookSequenceId = 0x103; else _s10_nextCookSequenceId = 0x106; break; case 0x105: { // TODO: Refactor into a if + a switch - int rnd = getRandom(7); - if (_gnapActionStatus >= 0 || _platypusActionStatus >= 0) + int rnd = _vm->getRandom(7); + if (_vm->_gnapActionStatus >= 0 || _vm->_platypusActionStatus >= 0) _s10_nextCookSequenceId = 0x106; else if (rnd == 0) _s10_nextCookSequenceId = 0x104; @@ -471,28 +470,28 @@ void GnapEngine::scene10_updateAnimations() { _s10_nextCookSequenceId = 0x103; else _s10_nextCookSequenceId = 0x106; - _timers[2] = getRandom(30) + 20; - _timers[3] = 300; - _gameSys->insertSequence(0x10C, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 0, 0); - _gnapSequenceId = 0x10C; - _gnapIdleFacing = kDirUpRight; - _gnapSequenceDatNum = 0; - _gnapActionStatus = -1; - _platypusActionStatus = -1; + _vm->_timers[2] = _vm->getRandom(30) + 20; + _vm->_timers[3] = 300; + _vm->_gameSys->insertSequence(0x10C, _vm->_gnapId, makeRid(_vm->_gnapSequenceDatNum, _vm->_gnapSequenceId), _vm->_gnapId, kSeqSyncWait, 0, 0, 0); + _vm->_gnapSequenceId = 0x10C; + _vm->_gnapIdleFacing = kDirUpRight; + _vm->_gnapSequenceDatNum = 0; + _vm->_gnapActionStatus = -1; + _vm->_platypusActionStatus = -1; } break; } if (_s10_currCookSequenceId == 0x843) - _gameSys->setAnimation(_s10_currCookSequenceId | 0x10000, 301, 2); + _vm->_gameSys->setAnimation(_s10_currCookSequenceId | 0x10000, 301, 2); else - _gameSys->setAnimation(_s10_currCookSequenceId, 100, 2); + _vm->_gameSys->setAnimation(_s10_currCookSequenceId, 100, 2); } } -void GnapEngine::scene10_updateAnimationsCb() { - if (_gameSys->getAnimationStatus(2) == 2) { - _gameSys->setAnimation(_s10_nextCookSequenceId, 100, 2); - _gameSys->insertSequence(_s10_nextCookSequenceId, 100, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); +void Scene10::updateAnimationsCb() { + if (_vm->_gameSys->getAnimationStatus(2) == 2) { + _vm->_gameSys->setAnimation(_s10_nextCookSequenceId, 100, 2); + _vm->_gameSys->insertSequence(_s10_nextCookSequenceId, 100, _s10_currCookSequenceId, 100, kSeqSyncWait, 0, 0, 0); _s10_currCookSequenceId = _s10_nextCookSequenceId; _s10_nextCookSequenceId = 0x106; } diff --git a/engines/gnap/scenes/scene10.h b/engines/gnap/scenes/scene10.h new file mode 100644 index 0000000000..987c059098 --- /dev/null +++ b/engines/gnap/scenes/scene10.h @@ -0,0 +1,50 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef GNAP_SCENE10_H +#define GNAP_SCENE10_H + +#include "gnap/debugger.h" +#include "gnap/scenes/scenecore.h" + +namespace Gnap { + +class GnapEngine; + +class Scene10: public Scene { +public: + Scene10(GnapEngine *vm); + ~Scene10() {} + + virtual int init(); + virtual void updateHotspots(); + virtual void run(); + virtual void updateAnimations(); + virtual void updateAnimationsCb(); + +private: + int _s10_nextCookSequenceId; + int _s10_currCookSequenceId; +}; + +} // End of namespace Gnap +#endif // GNAP_SCENE10_H diff --git a/engines/gnap/scenes/scenecore.cpp b/engines/gnap/scenes/scenecore.cpp index 3c0c89eddf..508c163fb8 100644 --- a/engines/gnap/scenes/scenecore.cpp +++ b/engines/gnap/scenes/scenecore.cpp @@ -35,6 +35,7 @@ #include "gnap/scenes/scene07.h" #include "gnap/scenes/scene08.h" #include "gnap/scenes/scene09.h" +#include "gnap/scenes/scene10.h" namespace Gnap { @@ -111,8 +112,9 @@ int GnapEngine::initSceneLogic() { initSceneGrid(21, 146, 11, 10); break; case 10: - backgroundId = scene10_init(); - scene10_updateHotspots(); + _scene = new Scene10(this); + backgroundId = _scene->init(); + _scene->updateHotspots(); _gameSys->setScaleValues(0, 500, 1, 1000); initSceneGrid(21, 146, 11, 10); break; @@ -430,7 +432,8 @@ void GnapEngine::runSceneLogic() { _newSceneNum = 10; break; case 10: - scene10_run(); + _scene->run(); + delete _scene; if (_newSceneNum == 55) _newSceneNum = 11; break; |