diff options
author | Strangerke | 2011-12-11 23:34:27 +0100 |
---|---|---|
committer | Strangerke | 2011-12-11 23:34:27 +0100 |
commit | cbe97db8f076e5a09b7f57791ddd44bfaae616ef (patch) | |
tree | def4d72c84a9c3671589341da67cfe9acf237bd1 /engines | |
parent | 6f6d137726d8d80f158f92ff5d8f868a0df267dd (diff) | |
download | scummvm-rg350-cbe97db8f076e5a09b7f57791ddd44bfaae616ef.tar.gz scummvm-rg350-cbe97db8f076e5a09b7f57791ddd44bfaae616ef.tar.bz2 scummvm-rg350-cbe97db8f076e5a09b7f57791ddd44bfaae616ef.zip |
TSAGE: R2R - Implement scene 2500
Diffstat (limited to 'engines')
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_logic.cpp | 4 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes2.cpp | 104 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes2.h | 22 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_speakers.cpp | 53 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_speakers.h | 28 |
5 files changed, 209 insertions, 2 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index cb85a9d10f..dca3dcead5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -122,9 +122,11 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Another bedroom return new Scene2450(); case 2455: - // Mze: Inside crevasse + // Maze: Inside crevasse return new Scene2455(); case 2500: + // Maze: Large Cave + return new Scene2500(); case 2525: case 2530: case 2535: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index aeee3cdedf..18fd6e6bde 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2398,6 +2398,110 @@ void Scene2455::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2500 - Maze: Large Cave + * + *--------------------------------------------------------------------------*/ + +void Scene2500::Exit1::changeScene() { + Scene2500 *scene = (Scene2500 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(20, 105); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2500::postInit(SceneObjectList *OwnerList) { + loadScene(2500); + SceneExt::postInit(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 3100) + R2_GLOBALS._v58CE2 = 0; + + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._sceneManager._previousScene = 2000; + + _exit1.setDetails(Rect(30, 50, 85, 105), EXITCURSOR_W, 2000); + _exit1.setDest(Common::Point(84, 104)); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(11); + R2_GLOBALS._player._moveDiff = Common::Point(2, 1); + } else { + R2_GLOBALS._player.setVisage(21); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(21, 3, 1); + _actor1.setDetails(9002, 1, -1, -1, 1, NULL); + } else { + _actor1.setup(2008, 3, 1); + _actor1.changeZoom(50); + _actor1.setDetails(9001, 0, -1, -1, 1, NULL); + } + _actor1.setPosition(Common::Point(141, 94)); + } + + _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + _sceneMode = 10; + R2_GLOBALS._player.setPosition(Common::Point(20, 105)); + Common::Point pt(95, 105); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 3100) { + _sceneMode = 2500; + _actor2.postInit(); + _actor3.postInit(); + setAction(&_sequenceManager, this, 2500, &R2_GLOBALS._player, &_actor2, &_actor3, NULL); + } else { + R2_GLOBALS._player.setPosition(Common::Point(160, 150)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2500; +} + +void Scene2500::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 20: + R2_GLOBALS._player.disableControl(); + _sceneMode = 2501; + setAction(&_sequenceManager, this, 2501, &R2_GLOBALS._player, &_actor2, &_actor3, NULL); + break; + case 2500: + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(900, this); + break; + case 2501: + g_globals->_sceneManager.changeScene(1000); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 81e8f58ace..82898a45dd 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -361,6 +361,28 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene2500 : public SceneExt { + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SpeakerQuinn2500 _quinnSpeaker; + SpeakerSeeker2500 _seekerSpeaker; + SpeakerMiranda2500 _mirandaSpeaker; + SpeakerWebbster2500 _webbsterSpeaker; + NamedHotspot _item1; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 29a564e672..7f39e3d630 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -682,6 +682,57 @@ SpeakerCaretaker2450::SpeakerCaretaker2450() { _numFrames = 0; } -} // End of namespace Ringworld2 +/*--------------------------------------------------------------------------*/ + +SpeakerQuinn2500::SpeakerQuinn2500() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +SpeakerSeeker2500::SpeakerSeeker2500() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +SpeakerMiranda2500::SpeakerMiranda2500() { + // Not in uppercase in the original + _speakerName = "Miranda"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +SpeakerWebbster2500::SpeakerWebbster2500() { + // Not in uppercase in the original + _speakerName = "Webbster"; + _color1 = 27; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +} // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 1a7f9510be..e6a805f31b 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -175,6 +175,34 @@ public: virtual Common::String getClassName() { return "SpeakerCaretaker2450"; } }; + +class SpeakerQuinn2500 : public VisualSpeaker { +public: + SpeakerQuinn2500(); + + virtual Common::String getClassName() { return "SpeakerQuinn2500"; } +}; + +class SpeakerSeeker2500 : public VisualSpeaker { +public: + SpeakerSeeker2500(); + + virtual Common::String getClassName() { return "SpeakerSeeker2500"; } +}; + +class SpeakerMiranda2500 : public VisualSpeaker { +public: + SpeakerMiranda2500(); + + virtual Common::String getClassName() { return "SpeakerMiranda2500"; } +}; + +class SpeakerWebbster2500 : public VisualSpeaker { +public: + SpeakerWebbster2500(); + + virtual Common::String getClassName() { return "SpeakerWebbster2500"; } +}; } // End of namespace Ringworld2 } // End of namespace TsAGE |