diff options
author | Paul Gilbert | 2011-10-08 11:40:04 +1100 |
---|---|---|
committer | Paul Gilbert | 2011-10-08 11:40:04 +1100 |
commit | 4192934e8ee0c230b0a8867ee9f9a65ec50cc7c7 (patch) | |
tree | ca3c4093d28203e4a3e9e08c36472c501060fa1c | |
parent | 420ecf38a64869ffd89f5b08d99dcddc73d987ad (diff) | |
download | scummvm-rg350-4192934e8ee0c230b0a8867ee9f9a65ec50cc7c7.tar.gz scummvm-rg350-4192934e8ee0c230b0a8867ee9f9a65ec50cc7c7.tar.bz2 scummvm-rg350-4192934e8ee0c230b0a8867ee9f9a65ec50cc7c7.zip |
TSAGE: Implemented Blue Force scene 820 - Microfiche Reader
-rw-r--r-- | engines/tsage/blue_force/blueforce_logic.cpp | 3 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_scenes8.cpp | 173 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_scenes8.h | 31 |
3 files changed, 206 insertions, 1 deletions
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index f7f0284ca2..38153d9a6d 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -193,7 +193,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) { // Lyle's Office return new Scene810(); case 820: - error("Scene group 8 not implemented"); + // Microfiche Reader + return new Scene820(); case 830: // Outside Boat Rentals return new Scene830(); diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp index 55274c6cab..ff1837b2d1 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.cpp +++ b/engines/tsage/blue_force/blueforce_scenes8.cpp @@ -1297,6 +1297,179 @@ void Scene810::dispatch() { } /*-------------------------------------------------------------------------- + * Scene 820 - Microfiche Reader + * + *--------------------------------------------------------------------------*/ + +bool Scene820::PowerButton::startAction(CursorType action, Event &event) { + Scene820 *scene = (Scene820 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(820, 5); + return true; + case CURSOR_USE: + scene->_sound1.play(69); + if (_flags & OBJFLAG_HIDING) { + scene->_pageNumber = 0; + show(); + BF_GLOBALS._scenePalette.loadPalette(821); + BF_GLOBALS._scenePalette.refresh(); + + SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, + SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END); + } else { + BF_GLOBALS._scenePalette.loadPalette(820); + BF_GLOBALS._scenePalette.refresh(); + + scene->_object4.remove(); + scene->_object5.remove(); + + SceneItem::display(0, 0); + hide(); + + BF_GLOBALS._sceneManager.changeScene(810); + } + return true; + default: + return NamedObject::startAction(action, event); + } +} + +bool Scene820::BackButton::startAction(CursorType action, Event &event) { + Scene820 *scene = (Scene820 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(820, 7); + return true; + case CURSOR_USE: + // WORKAROUND: The original game had a bug where you could see the microfiche text by directly + // using the paging buttons, but then you had to use the power button twice to 'turn on' the + // reader and then off again. This check prevents the paging buttons being used until the + // reader is properly turned on. + if (scene->_powerButton._flags & OBJFLAG_HIDING) + return true; + + scene->_sound1.play(72); + show(); + scene->_sceneMode = 8200; + scene->setAction(&scene->_sequenceManager, scene, 8200, NULL); + + if (scene->_pageNumber) + --scene->_pageNumber; + if (scene->_pageNumber == 3) { + scene->_object4.hide(); + scene->_object5.hide(); + } + + SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, + SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END); + return true; + default: + return NamedObject::startAction(action, event); + } +} + +bool Scene820::ForwardButton::startAction(CursorType action, Event &event) { + Scene820 *scene = (Scene820 *)BF_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(820, 6); + return true; + case CURSOR_USE: + // WORKAROUND: The original game had a bug where you could see the microfiche text by directly + // using the paging buttons, but then you had to use the power button twice to 'turn on' the + // reader and then off again. This check prevents the paging buttons being used until the + // reader is properly turned on. + if (scene->_powerButton._flags & OBJFLAG_HIDING) + return true; + + scene->_sound1.play(72); + show(); + scene->_sceneMode = 8200; + scene->setAction(&scene->_sequenceManager, scene, 8200, NULL); + + if (scene->_pageNumber < 4) + ++scene->_pageNumber; + + SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, + SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END); + + if (scene->_pageNumber == 4) { + scene->_object4.show(); + scene->_object5.show(); + } + + return true; + default: + return NamedObject::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +Scene820::Scene820(): SceneExt() { + _pageNumber = 0; +} + +void Scene820::synchronize(Serializer &s) { + SceneExt::synchronize(s); + s.syncAsSint16LE(_pageNumber); +} + +void Scene820::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(820); + + _stripManager.addSpeaker(&_gameTextSpeaker); + + _powerButton.postInit(); + _powerButton.setVisage(820); + _powerButton.setPosition(Common::Point(42, 163)); + _powerButton.hide(); + BF_GLOBALS._sceneItems.push_back(&_powerButton); + + _backButton.postInit(); + _backButton.setVisage(820); + _backButton.setStrip(2); + _backButton.setPosition(Common::Point(278, 155)); + _backButton.hide(); + BF_GLOBALS._sceneItems.push_back(&_backButton); + + _forwardButton.postInit(); + _forwardButton.setVisage(820); + _forwardButton.setStrip(3); + _forwardButton.setPosition(Common::Point(278, 164)); + _forwardButton.hide(); + BF_GLOBALS._sceneItems.push_back(&_forwardButton); + + _object4.postInit(); + _object4.setVisage(821); + _object4.setPosition(Common::Point(96, 130)); + _object4.hide(); + + _object5.postInit(); + _object5.setVisage(821); + _object5.setStrip(2); + _object5.setPosition(Common::Point(223, 130)); + _object5.hide(); + + BF_GLOBALS._player.enableControl(); + BF_GLOBALS._player._canWalk = false; + + _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 820, -1, -1, -1, 1, NULL); +} + +void Scene820::signal() { + if (_sceneMode == 8200) { + _forwardButton.hide(); + _backButton.hide(); + } +} + +/*-------------------------------------------------------------------------- * Scene 830 - Outside Boat Rentals * *--------------------------------------------------------------------------*/ diff --git a/engines/tsage/blue_force/blueforce_scenes8.h b/engines/tsage/blue_force/blueforce_scenes8.h index db106c07ea..5bdb9fac65 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.h +++ b/engines/tsage/blue_force/blueforce_scenes8.h @@ -239,6 +239,37 @@ public: virtual void dispatch(); }; +class Scene820: public SceneExt { + /* Objects */ + class PowerButton: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class ForwardButton: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class BackButton: public NamedObject { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + SequenceManager _sequenceManager; + ASoundExt _sound1; + SpeakerGameText _gameTextSpeaker; + PowerButton _powerButton; + BackButton _backButton; + ForwardButton _forwardButton; + NamedObject _object4, _object5; + NamedHotspot _item1; + int _pageNumber; + + Scene820(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + class Scene830: public PalettedScene { /* Items */ class SouthEastExit: public NamedHotspot { |