diff options
author | Strangerke | 2016-04-21 20:17:33 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-05-10 09:54:21 +0200 |
commit | 2409d89eb597587e78f7453ec2f09c10e9b01465 (patch) | |
tree | b895eb67dc66145ce531d17a273ed109c9f50fbc /engines/gnap/scenes | |
parent | cc5bfede08504c433f56b2c91e25f409a47ee21a (diff) | |
download | scummvm-rg350-2409d89eb597587e78f7453ec2f09c10e9b01465.tar.gz scummvm-rg350-2409d89eb597587e78f7453ec2f09c10e9b01465.tar.bz2 scummvm-rg350-2409d89eb597587e78f7453ec2f09c10e9b01465.zip |
GNAP: Refactor scene 14
Diffstat (limited to 'engines/gnap/scenes')
-rw-r--r-- | engines/gnap/scenes/scene14.cpp | 176 | ||||
-rw-r--r-- | engines/gnap/scenes/scene14.h | 48 | ||||
-rw-r--r-- | engines/gnap/scenes/scenecore.cpp | 9 |
3 files changed, 141 insertions, 92 deletions
diff --git a/engines/gnap/scenes/scene14.cpp b/engines/gnap/scenes/scene14.cpp index 25db3a68ea..46e3c6d6be 100644 --- a/engines/gnap/scenes/scene14.cpp +++ b/engines/gnap/scenes/scene14.cpp @@ -24,6 +24,8 @@ #include "gnap/gamesys.h" #include "gnap/resource.h" +#include "gnap/scenes/scene14.h" + namespace Gnap { enum { @@ -34,160 +36,156 @@ enum { kHSDevice = 4 }; -int GnapEngine::scene14_init() { - _gameSys->setAnimation(0, 0, 0); - _gameSys->setAnimation(0, 0, 1); +Scene14::Scene14(GnapEngine *vm) : Scene(vm) { +} + +int Scene14::init() { + _vm->_gameSys->setAnimation(0, 0, 0); + _vm->_gameSys->setAnimation(0, 0, 1); return 0x27; } -void GnapEngine::scene14_updateHotspots() { - setHotspot(kHSPlatypus, 0, 0, 0, 0); - setHotspot(kHSExit, 0, 590, 799, 599, SF_EXIT_D_CURSOR); - setHotspot(kHSCoin, 330, 390, 375, 440, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setHotspot(kHSToilet, 225, 250, 510, 500, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); - setDeviceHotspot(kHSDevice, -1, -1, -1, -1); - if (isFlag(kGFNeedleTaken)) - _hotspots[kHSCoin]._flags = SF_DISABLED; - _hotspotsCount = 5; +void Scene14::updateHotspots() { + _vm->setHotspot(kHSPlatypus, 0, 0, 0, 0); + _vm->setHotspot(kHSExit, 0, 590, 799, 599, SF_EXIT_D_CURSOR); + _vm->setHotspot(kHSCoin, 330, 390, 375, 440, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setHotspot(kHSToilet, 225, 250, 510, 500, SF_PLAT_CURSOR | SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR); + _vm->setDeviceHotspot(kHSDevice, -1, -1, -1, -1); + if (_vm->isFlag(kGFNeedleTaken)) + _vm->_hotspots[kHSCoin]._flags = SF_DISABLED; + _vm->_hotspotsCount = 5; } -void GnapEngine::scene14_run() { - _largeSprite = nullptr; +void Scene14::run() { + _vm->_largeSprite = nullptr; - queueInsertDeviceIcon(); + _vm->queueInsertDeviceIcon(); - if (!isFlag(kGFNeedleTaken)) - _gameSys->insertSequence(0x23, 10, 0, 0, kSeqNone, 0, 0, 0); + if (!_vm->isFlag(kGFNeedleTaken)) + _vm->_gameSys->insertSequence(0x23, 10, 0, 0, kSeqNone, 0, 0, 0); - endSceneInit(); + _vm->endSceneInit(); - if (!isFlag(kGFNeedleTaken) && invHas(kItemTongs)) - _largeSprite = _gameSys->createSurface(1); + if (!_vm->isFlag(kGFNeedleTaken) && _vm->invHas(kItemTongs)) + _vm->_largeSprite = _vm->_gameSys->createSurface(1); - if (!isFlag(kGFNeedleTaken)) { - _gameSys->insertSequence(0x24, 10, 0x23, 10, kSeqSyncWait, 0, 0, 0); - _gnapSequenceId = 0x24; - _timers[2] = getRandom(40) + 50; + if (!_vm->isFlag(kGFNeedleTaken)) { + _vm->_gameSys->insertSequence(0x24, 10, 0x23, 10, kSeqSyncWait, 0, 0, 0); + _vm->_gnapSequenceId = 0x24; + _vm->_timers[2] = _vm->getRandom(40) + 50; } - while (!_sceneDone) { + while (!_vm->_sceneDone) { + _vm->updateMouseCursor(); + _vm->updateCursorByHotspot(); - updateMouseCursor(); - updateCursorByHotspot(); + _vm->_sceneClickedHotspot = _vm->getClickedHotspotId(); + _vm->updateGrabCursorSprite(0, 0); - _sceneClickedHotspot = getClickedHotspotId(); - updateGrabCursorSprite(0, 0); - - switch (_sceneClickedHotspot) { - + switch (_vm->_sceneClickedHotspot) { case kHSDevice: - if (_gnapActionStatus < 0) { - runMenu(); - scene14_updateHotspots(); + if (_vm->_gnapActionStatus < 0) { + _vm->runMenu(); + updateHotspots(); } break; case kHSExit: - _sceneDone = true; - _newSceneNum = 13; + _vm->_sceneDone = true; + _vm->_newSceneNum = 13; break; case kHSCoin: - if (_grabCursorSpriteIndex == kItemTongs) { - invAdd(kItemQuarter); - setFlag(kGFNeedleTaken); - setGrabCursorSprite(-1); - hideCursor(); - _gameSys->setAnimation(0x26, 10, 0); - _gameSys->insertSequence(0x26, 10, _gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); - } else if (_grabCursorSpriteIndex >= 0) { - playSound(0x108E9, false); + if (_vm->_grabCursorSpriteIndex == kItemTongs) { + _vm->invAdd(kItemQuarter); + _vm->setFlag(kGFNeedleTaken); + _vm->setGrabCursorSprite(-1); + _vm->hideCursor(); + _vm->_gameSys->setAnimation(0x26, 10, 0); + _vm->_gameSys->insertSequence(0x26, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); + } else if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->playSound(0x108E9, false); } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: - playSound(0x108E9, false); + _vm->playSound(0x108E9, false); break; case GRAB_CURSOR: - _gameSys->insertSequence(0x25, 10, _gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); - _gameSys->insertSequence(0x23, 10, 0x25, 10, kSeqSyncWait, 0, 0, 0); - _gnapSequenceId = 0x23; + _vm->_gameSys->insertSequence(0x25, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); + _vm->_gameSys->insertSequence(0x23, 10, 0x25, 10, kSeqSyncWait, 0, 0, 0); + _vm->_gnapSequenceId = 0x23; break; case TALK_CURSOR: - playSound((getRandom(5) + 0x8D5) | 0x10000, false); + _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - _gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _gnapGridX, 576 - _gnapGridY); + _vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); break; } } break; case kHSToilet: - if (_grabCursorSpriteIndex >= 0) { - _gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _gnapGridX, 576 - _gnapGridY); + if (_vm->_grabCursorSpriteIndex >= 0) { + _vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); } else { - switch (_verbCursor) { + switch (_vm->_verbCursor) { case LOOK_CURSOR: case GRAB_CURSOR: - playSound(0x108B1, false); + _vm->playSound(0x108B1, false); break; case TALK_CURSOR: - playSound((getRandom(5) + 0x8D5) | 0x10000, false); + _vm->playSound((_vm->getRandom(5) + 0x8D5) | 0x10000, false); break; case PLAT_CURSOR: - _gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _gnapGridX, 576 - _gnapGridY); + _vm->_gameSys->insertSequence(0x107A8, 1, 0, 0, kSeqNone, 0, 900 - _vm->_gnapGridX, 576 - _vm->_gnapGridY); break; } } break; default: - _mouseClickState._left = false; + _vm->_mouseClickState._left = false; break; - } - scene14_updateAnimations(); - - checkGameKeys(); + updateAnimations(); + _vm->checkGameKeys(); - if (!isFlag(kGFNeedleTaken) && !_timers[2]) { - _gameSys->insertSequence(0x24, 10, _gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); - _gnapSequenceId = 0x24; - _timers[2] = getRandom(40) + 50; + if (!_vm->isFlag(kGFNeedleTaken) && !_vm->_timers[2]) { + _vm->_gameSys->insertSequence(0x24, 10, _vm->_gnapSequenceId, 10, kSeqSyncWait, 0, 0, 0); + _vm->_gnapSequenceId = 0x24; + _vm->_timers[2] = _vm->getRandom(40) + 50; } - if (isKeyStatus1(8)) { - clearKeyStatus1(8); - runMenu(); - scene14_updateHotspots(); + if (_vm->isKeyStatus1(8)) { + _vm->clearKeyStatus1(8); + _vm->runMenu(); + updateHotspots(); } - gameUpdateTick(); + _vm->gameUpdateTick(); } - if (_largeSprite) - deleteSurface(&_largeSprite); - + if (_vm->_largeSprite) + _vm->deleteSurface(&_vm->_largeSprite); } -void GnapEngine::scene14_updateAnimations() { - - if (_gameSys->getAnimationStatus(0) == 2) { - _gameSys->setAnimation(0, 0, 0); - _gameSys->insertSpriteDrawItem(_largeSprite, 0, 0, 300); - _gameSys->setAnimation(0x10843, 301, 1); - _gameSys->insertSequence(0x10843, 301, 0x26, 10, kSeqSyncWait, 0, 0, 0); +void Scene14::updateAnimations() { + if (_vm->_gameSys->getAnimationStatus(0) == 2) { + _vm->_gameSys->setAnimation(0, 0, 0); + _vm->_gameSys->insertSpriteDrawItem(_vm->_largeSprite, 0, 0, 300); + _vm->_gameSys->setAnimation(0x10843, 301, 1); + _vm->_gameSys->insertSequence(0x10843, 301, 0x26, 10, kSeqSyncWait, 0, 0, 0); } - if (_gameSys->getAnimationStatus(1) == 2) { - _gameSys->setAnimation(0, 0, 1); - _sceneDone = true; - _newSceneNum = 13; - _grabCursorSpriteIndex = kItemQuarter; + if (_vm->_gameSys->getAnimationStatus(1) == 2) { + _vm->_gameSys->setAnimation(0, 0, 1); + _vm->_sceneDone = true; + _vm->_newSceneNum = 13; + _vm->_grabCursorSpriteIndex = kItemQuarter; } - } } // End of namespace Gnap diff --git a/engines/gnap/scenes/scene14.h b/engines/gnap/scenes/scene14.h new file mode 100644 index 0000000000..32f0907cb8 --- /dev/null +++ b/engines/gnap/scenes/scene14.h @@ -0,0 +1,48 @@ +/* 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_SCENE14_H +#define GNAP_SCENE14_H + +#include "gnap/debugger.h" +#include "gnap/scenes/scenecore.h" + +namespace Gnap { + +class GnapEngine; + +class Scene14: public Scene { +public: + Scene14(GnapEngine *vm); + ~Scene14() {} + + virtual int init(); + virtual void updateHotspots(); + virtual void run(); + virtual void updateAnimations(); + virtual void updateAnimationsCb() {}; + +private: +}; + +} // End of namespace Gnap +#endif // GNAP_SCENE14_H diff --git a/engines/gnap/scenes/scenecore.cpp b/engines/gnap/scenes/scenecore.cpp index c5ba9d26df..9016d8a7c0 100644 --- a/engines/gnap/scenes/scenecore.cpp +++ b/engines/gnap/scenes/scenecore.cpp @@ -39,6 +39,7 @@ #include "gnap/scenes/scene11.h" #include "gnap/scenes/scene12.h" #include "gnap/scenes/scene13.h" +#include "gnap/scenes/scene14.h" namespace Gnap { @@ -143,8 +144,9 @@ int GnapEngine::initSceneLogic() { initSceneGrid(21, 146, 11, 10); break; case 14: - backgroundId = scene14_init(); - scene14_updateHotspots(); + _scene = new Scene14(this); + backgroundId = _scene->init(); + _scene->updateHotspots(); _gameSys->setScaleValues(0, 500, 1, 1000); break; case 15: @@ -462,7 +464,8 @@ void GnapEngine::runSceneLogic() { _newSceneNum = 11; break; case 14: - scene14_run(); + _scene->run(); + delete _scene; if (_newSceneNum == 55) _newSceneNum = 13; break; |