From 29d0078b7009ccbf0ee406faaf441787f42e73c9 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 13 Mar 2011 16:15:09 +0100 Subject: TSAGE: Add detection for "First Wave" ringworld (english) --- engines/tsage/detection_tables.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index eac11c3e07..429d6aecdb 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -41,7 +41,20 @@ static const tSageGameDescription gameDescriptions[] = { GType_Ringworld, GF_CD }, - + // Ringworld First Wave English CD version + { + { + "ring", + "CD", + AD_ENTRY1s("ring.rlb", "0a25b4ee58d44a54425c0b47e5096bbc", 37847618), + Common::EN_ANY, + Common::kPlatformPC, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_Ringworld, + GF_CD + }, // Ringworld English Floppy version { { -- cgit v1.2.3 From 6ddfd24c26edabf00b2020b79351dfff372ab269 Mon Sep 17 00:00:00 2001 From: strangerke Date: Wed, 16 Mar 2011 21:28:13 +0100 Subject: TSAGE: Implement scene7600 --- engines/tsage/ringworld_logic.cpp | 11 +++ engines/tsage/ringworld_logic.h | 7 ++ engines/tsage/ringworld_scenes8.cpp | 134 ++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes8.h | 66 ++++++++++++++++++ 4 files changed, 218 insertions(+) create mode 100644 engines/tsage/ringworld_scenes8.cpp create mode 100644 engines/tsage/ringworld_scenes8.h diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 5b86929772..db615b75f9 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -30,6 +30,7 @@ #include "tsage/ringworld_scenes1.h" #include "tsage/ringworld_scenes2.h" #include "tsage/ringworld_scenes3.h" +#include "tsage/ringworld_scenes8.h" namespace tSage { @@ -102,6 +103,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 6 */ /* Scene group 8 */ + case 7600: return new Scene7600(); /* Scene group 10 */ @@ -330,6 +332,15 @@ SpeakerCText::SpeakerCText() { /*--------------------------------------------------------------------------*/ +SpeakerEText::SpeakerEText() { + _speakerName = "ETEXT"; + _textPos = Common::Point(20, 20); + _colour1 = 22; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + SpeakerHText::SpeakerHText() { _speakerName = "HTEXT"; _textPos = Common::Point(160, 40); diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h index fd48dec0b6..c3e87483e8 100644 --- a/engines/tsage/ringworld_logic.h +++ b/engines/tsage/ringworld_logic.h @@ -146,6 +146,13 @@ public: virtual Common::String getClassName() { return "SpeakerCText"; } }; +class SpeakerEText: public ScreenSpeaker { +public: + SpeakerEText(); + + virtual Common::String getClassName() { return "SpeakerEText"; } +}; + class SpeakerHText: public ScreenSpeaker { public: SpeakerHText(); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp new file mode 100644 index 0000000000..490ddf3409 --- /dev/null +++ b/engines/tsage/ringworld_scenes8.cpp @@ -0,0 +1,134 @@ +/* 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. + * + * $URL: https://scummvm-misc.svn.sourceforge.net/svnroot/scummvm-misc/trunk/engines/tsage/scene_logic.cpp $ + * $Id: scene_logic.cpp 232 2011-02-12 11:56:38Z dreammaster $ + * + */ + +#include "tsage/ringworld_scenes8.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 7600 + * + *--------------------------------------------------------------------------*/ + +void Scene7600::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(120); + break; + case 1: { + PlayerMover *mover = new PlayerMover(); + Common::Point pt(389, 57); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_sceneManager.changeScene(7700); + break; + } +} + +void Scene7600::Action2::signal() { + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(-30, 195); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: + _globals->_sceneManager.changeScene(2320); + remove(); + break; + } +} + +void Scene7600::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(100, 0, 200, 100); + + _object2.postInit(); + _object2.setVisage(7601); + _object2.setStrip(1); + _object2.animate(ANIM_MODE_2, 0); + _object2.setPosition(Common::Point(48, 135)); + _object2.setPriority2(1); + + _object3.postInit(); + _object3.setVisage(7601); + _object3.setStrip(2); + _object3.animate(ANIM_MODE_2, 0); + _object3.setPosition(Common::Point(158, 136)); + _object3.setPriority2(1); + + _object4.postInit(); + _object4.setVisage(7601); + _object4.setStrip(3); + _object4.animate(ANIM_MODE_2, 0); + _object4.setPosition(Common::Point(293, 141)); + _object4.setPriority2(1); + + _object5.postInit(); + _object5.setVisage(7601); + _object5.setStrip(4); + _object5.animate(ANIM_MODE_2, 0); + _object5.setPosition(Common::Point(405, 143)); + _object5.setPriority2(1); + + _object6.postInit(); + _object6.setVisage(7601); + _object6.setStrip(5); + _object6.animate(ANIM_MODE_2, 0); + _object6.setPosition(Common::Point(379, 191)); + _object6.setPriority2(1); + + _globals->_player.postInit(); + _globals->_player.setVisage(2333); + _globals->_player.animate(ANIM_MODE_1, 0); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setStrip(1); + _globals->_player._moveDiff = Common::Point(16, 16); + _globals->_player.changeZoom(-1); + _globals->_player.disableControl(); + + if (_globals->_sceneManager._previousScene == 7700) { + _globals->_player.setPosition(Common::Point(389, 57)); + setAction(&_action2); + } else { + _globals->_player.setPosition(Common::Point(-50, 195)); + setAction(&_action1); + } + _sceneBounds.centre(_globals->_player._position.x, _globals->_player._position.y); + loadScene(7600); + _soundHandler2.startSound(255); + _soundHandler1.startSound(251); +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h new file mode 100644 index 0000000000..05a7f09a5f --- /dev/null +++ b/engines/tsage/ringworld_scenes8.h @@ -0,0 +1,66 @@ +/* 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. + * + * $URL: https://scummvm-misc.svn.sourceforge.net/svnroot/scummvm-misc/trunk/engines/tsage/scene_logic.h $ + * $Id: scene_logic.h 232 2011-02-12 11:56:38Z dreammaster $ + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES8_H +#define TSAGE_RINGWORLD_SCENES8_H + +#include "common/scummsys.h" +#include "tsage/ringworld_logic.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class Scene7600: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + +public: + Action1 _action1; + Action2 _action2; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SoundHandler _soundHandler1; + SoundHandler _soundHandler2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +} // End of namespace tSage + +#endif -- cgit v1.2.3 From 03f9f0e740c79d67c74b044a30d1dc79491fcaed Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 19 Mar 2011 00:05:38 +0100 Subject: TSAGE: Scene 7000 (imperfect) --- engines/tsage/ringworld_logic.cpp | 41 +++ engines/tsage/ringworld_logic.h | 15 + engines/tsage/ringworld_scenes8.cpp | 607 +++++++++++++++++++++++++++++++++++- engines/tsage/ringworld_scenes8.h | 76 +++++ 4 files changed, 738 insertions(+), 1 deletion(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index db615b75f9..6fb55d112e 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -103,6 +103,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 6 */ /* Scene group 8 */ + case 7000: return new Scene7000(); case 7600: return new Scene7600(); /* Scene group 10 */ @@ -350,6 +351,46 @@ SpeakerHText::SpeakerHText() { /*--------------------------------------------------------------------------*/ +SpeakerSKText::SpeakerSKText(): ScreenSpeaker() { + _speakerName = "SKTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTRE; + _colour1 = 9; + _hideObjects = false; +}; + +/*--------------------------------------------------------------------------*/ + +SpeakerSKL::SpeakerSKL(): AnimatedSpeaker() { + _speakerName = "SKL"; + _newSceneNumber = 7011; + _textPos = Common::Point(10, 30); + _colour1 = 10; +} + +void SpeakerSKL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7013); + _object1.setStrip2(2); + _object1._frame = 1; + _object1.setPriority2(255); + _object1.changeZoom(100); + _object1.setPosition(Common::Point(203, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7013); + _object2.setStrip2(1); + _object2.setPriority2(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(197, 80)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} +/*--------------------------------------------------------------------------*/ + SpeakerQL::SpeakerQL(): AnimatedSpeaker() { _speakerName = "QL"; _newSceneNumber = 2610; diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h index c3e87483e8..27b71885cd 100644 --- a/engines/tsage/ringworld_logic.h +++ b/engines/tsage/ringworld_logic.h @@ -160,6 +160,21 @@ public: virtual Common::String getClassName() { return "SpeakerHText"; } }; +class SpeakerSKText: public ScreenSpeaker { +public: + SpeakerSKText(); + + virtual Common::String getClassName() { return "SpeakerSKText"; } +}; + +class SpeakerSKL: public AnimatedSpeaker { +public: + SpeakerSKL(); + + virtual Common::String getClassName() { return "SpeakerQL"; } + virtual void setText(const Common::String &msg); +}; + class SpeakerQL: public AnimatedSpeaker { public: SpeakerQL(); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 490ddf3409..4e0791d05f 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -30,6 +30,608 @@ namespace tSage { +/*-------------------------------------------------------------------------- + * Scene 7000 + * + *--------------------------------------------------------------------------*/ + +void Scene7000::Action1::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + setAction(&scene->_action6); + break; + case 2: + scene->_soundHandler.startSound(252, 0, 127); + scene->_object8.remove(); + scene->_object1.postInit(); + scene->_object1.setVisage(7003); + scene->_object1.animate(ANIM_MODE_5, this); + scene->_object1.setPosition(Common::Point(151, 182), 0); + scene->_object1.setPriority2(205); + _globals->_sceneItems.push_front(&scene->_object1); + break; + case 3: + scene->_object1.setStrip(4); + scene->_object1.animate(ANIM_MODE_8, 0, 0); + scene->_stripManager.start(7005, this); + break; + case 4: + scene->_object1.animate(ANIM_MODE_2, 0); + setDelay(3); + break; + case 5: + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action2::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + _globals->_player.addMover(0, 0); + _globals->_player.setVisage(7006); + _globals->_player.setStrip(1); + _globals->_player.setFrame(1); + _globals->_player.setPosition(Common::Point(_globals->_player._position.x, _globals->_player._position.y + 13)); + _globals->_player.changeZoom(68); + _globals->_player.animate(ANIM_MODE_5, this); + scene->_object1.remove(); + break; + case 2: + _globals->_sceneManager.changeScene(7100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action3::dispatch() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + Action::dispatch(); + if (_actionIndex == 4) + scene->_object4.setPosition(Common::Point(scene->_object3._position.x, scene->_object3._position.y)); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action3::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + scene->setZoomPercents(10, 10, 62, 100); + scene->_object4.postInit(); + scene->_object4.setVisage(5001); + scene->_object4.setStrip2(2); + scene->_object4.animate(ANIM_MODE_8, 0, 0); + scene->_object4.setPosition(Common::Point(10, 18), 0); + scene->_object4.setPriority2(10); + scene->_object4.changeZoom(100); + scene->_object4.flag100(); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(107, 65); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object3.setPriority2(10); + scene->_object4.setPosition(Common::Point(scene->_object3._position.x, scene->_object3._position.y + 15), 0); + scene->_object4.unflag100(); + setDelay(30); + break; + case 3: { + NpcMover *mover = new NpcMover(); + Common::Point pt(107, 92); + scene->_object3.addMover(mover, &pt, this); + break; + } + case 4: + scene->_object4.remove(); + _globals->_sceneManager.changeScene(2100); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action4::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 1: + scene->_object1.flag100(); + setDelay(300); + break; + case 2: + _globals->_soundHandler.startSound(252, 0, 127); + scene->_object1.unflag100(); + scene->_object1.setStrip(3); + scene->_object1.setFrame(1); + scene->_object1.animate(ANIM_MODE_5, this); + break; + case 3: + scene->_object1.setStrip(1); + scene->_object1.animate(ANIM_MODE_8, 0, 0); + _globals->setFlag(81); + _globals->_player.enableControl(); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action5::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + NpcMover *playerMover = new NpcMover(); + Common::Point pt(88, 121); + _globals->_player.addMover(playerMover, &pt, this); + break; + } + case 1: + _globals->_player.checkAngle(&scene->_object1); + _globals->_soundHandler.startSound(252, 0, 127); + scene->_object1.setStrip(2); + scene->_stripManager.start(7015, this); + break; + case 2: + scene->_object1.setStrip(1); + scene->_object1.setFrame(4); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 3: { + scene->_object1.remove(); + NpcMover *mover = new NpcMover(); + Common::Point pt(31, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 4: { + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: { + _globals->_player.setPriority2(10); + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: { + NpcMover *mover = new NpcMover(); + Common::Point pt(41, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 7: + _globals->clearFlag(36); + _globals->clearFlag(37); + _globals->clearFlag(72); + _globals->clearFlag(13); + _globals->_sceneManager.changeScene(2100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action6::signal() { + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: { + NpcMover *mover = new NpcMover(); + Common::Point pt(12, 91); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 2: { + NpcMover *mover = new NpcMover(); + Common::Point pt(8, 91); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: { + NpcMover *mover = new NpcMover(); + Common::Point pt(31, 96); + _globals->_player.addMover(mover, &pt, this); + _globals->_player.setPriority2(-1); + break; + } + case 4: { + NpcMover *mover = new NpcMover(); + Common::Point pt(83, 117); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: { + NpcMover *mover = new NpcMover(); + Common::Point pt(95, 121); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: + _globals->_player.setStrip(3); + _globals->_player.setFrame(1); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Action7::signal() { + switch (_actionIndex++) { + case 0: + _globals->_player.disableControl(); + setDelay(3); + break; + case 1: + setDelay(3); + break; + case 2: { + NpcMover *mover = new NpcMover(); + Common::Point pt(31, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: { + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 94); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 4: { + _globals->_player.setPriority2(10); + NpcMover *mover = new NpcMover(); + Common::Point pt(11, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: { + NpcMover *mover = new NpcMover(); + Common::Point pt(41, 89); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 6: + if (_globals->getFlag(13)) + _globals->_sceneManager.changeScene(2280); + else + _globals->_sceneManager.changeScene(2320); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::SceneItem1::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display(7000, 2, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + + SceneItem::doAction(action); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::Object1::doAction(int action) { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_TRANSLATOR: + _globals->_player.disableControl(); + _globals->_inventory._translator._sceneNumber = 7000; + if (_globals->_inventory._waldos._sceneNumber == 7000) { + if (_globals->_inventory._jar._sceneNumber == 7000) { + scene->_sceneMode = 7012; + scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, 0, 0); + } else { + scene->_sceneMode = 7015; + scene->setAction(&scene->_sequenceManager, scene, 7017, &_globals->_player, 0, 0); + } + } else { + if (_globals->_inventory._jar._sceneNumber == 7000) { + scene->_sceneMode = 7011; + scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, 0, 0); + } else { + scene->_sceneMode = 7004; + scene->setAction(&scene->_sequenceManager, scene, 7004, &_globals->_player, this, 0, 0); + } + } + break; + case OBJECT_WALDOS: + _globals->_player.disableControl(); + _globals->_inventory._waldos._sceneNumber = 7000; + if (_globals->_inventory._translator._sceneNumber == 7000) { + if (_globals->_inventory._jar._sceneNumber == 7000) { + scene->_sceneMode = 7015; + scene->setAction(&scene->_sequenceManager, scene, 7015, &_globals->_player, 0, 0); + } else { + scene->_sceneMode = 7006; + scene->setAction(&scene->_sequenceManager, scene, 7006, &_globals->_player, 0, 0); + } + } else { + scene->_sceneMode = 7009; + scene->setAction(&scene->_sequenceManager, scene, 7009, &_globals->_player, 0, 0); + } + break; + case OBJECT_JAR: + _globals->_player.disableControl(); + _globals->_inventory._jar._sceneNumber = 7000; + if (_globals->_inventory._translator._sceneNumber == 7000) { + if (_globals->_inventory._waldos._sceneNumber == 7000) { + scene->_sceneMode = 7007; + scene->setAction(&scene->_sequenceManager, scene, 7007, &_globals->_player, &scene->_object1, 0, 0); + } else { + scene->_sceneMode = 7015; + scene->setAction(&scene->_sequenceManager, scene, 7016, &_globals->_player, 0, 0); + } + } else { + scene->_sceneMode = 7008; + scene->setAction(&scene->_sequenceManager, scene, 7008, &_globals->_player, 0, 0); + } + break; + case CURSOR_LOOK: + if (_globals->getFlag(81)) + SceneItem::display(7000, 1, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + else + SceneItem::display(7000, 0, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (_globals->getFlag(81)) { + _globals->_inventory._stasisBox._sceneNumber = 1; + _globals->_player.disableControl(); + scene->setAction(&scene->_action5); + } else { + SceneItem::display(7000, 5, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } + break; + case CURSOR_TALK: + if (_globals->getFlag(81)) { + _globals->_inventory._stasisBox._sceneNumber = 1; + _globals->_player.disableControl(); + scene->setAction(&scene->_action5); + } else if (_globals->getFlag(52)) { + scene->_sceneMode = 7005; + scene->setAction(&scene->_sequenceManager, scene, 7013, 0, 0); + } else if (_globals->getFlag(13)) { + _globals->_sceneManager._sceneNumber = 7002; + scene->setAction(&scene->_sequenceManager, scene, 7014, 0, 0); + } else { + _globals->_sceneManager._sceneNumber = 7002; + scene->setAction(&scene->_sequenceManager, scene, 7002, 0, 0); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::dispatch() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + + if (!_action) { + if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 8) { + if (!_globals->getFlag(13)) { + _globals->_player.disableControl(); + _globals->_player.addMover(0); + SceneItem::display(7000, 3, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + _sceneMode = 7001; + setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); + } else if (!_globals->getFlag(52)) { + setAction(&_action2); + } else { + _globals->_player.disableControl(); + _sceneMode = 7003; + setAction(&scene->_sequenceManager, this, 7003, &_globals->_player, 0); + } + } + if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 9) + scene->setAction(&scene->_action5); + } + Scene::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::postInit(SceneObjectList *OwnerList) { + loadScene(7000); + Scene::postInit(); + setZoomPercents(93, 25, 119, 55); + _stripManager.addSpeaker(&_speakerSKText); + _stripManager.addSpeaker(&_speakerSKL); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerQL); + _stripManager.addSpeaker(&_speakerQR); + + _speakerSKText._npc = &_object1; + _speakerQText._npc = &_globals->_player; + + _object5.postInit(); + _object5.setVisage(7001); + _object5.setStrip2(1); + _object5.animate(ANIM_MODE_2, 0); + _object5.setPosition(Common::Point(49, 147), 0); + _object5.setPriority2(1); + + _object6.postInit(); + _object6.setVisage(7001); + _object6.setStrip2(2); + _object6.animate(ANIM_MODE_2, 0); + _object6.setPosition(Common::Point(160, 139), 0); + _object6.setPriority2(1); + + _object7.postInit(); + _object7.setVisage(7001); + _object7.setStrip2(3); + _object7.animate(ANIM_MODE_2, 0); + _object7.setPosition(Common::Point(272, 129), 0); + _object7.setPriority2(1); + + _object8.postInit(); + _object8.setVisage(7001); + _object8.setStrip2(4); + _object8.animate(ANIM_MODE_2, 0); + _object8.setPosition(Common::Point(176, 175), 0); + _object8.setPriority2(1); + + if (_globals->getFlag(72)) { + _object3.postInit(); + _object3.setVisage(5001); + _object3.setStrip2(1); + _object3.animate(ANIM_MODE_2, 0); + _object3.setPosition(Common::Point(107, 92), 0); + _object3.changeZoom(100); + _object3.setPriority2(10); + + _object1.postInit(); + _object1.setVisage(7003); + if (_globals->getFlag(81)) + _object1.setStrip(4); + else + _object1.setStrip(2); + _object1.setPosition(Common::Point(87, 129), 0); + _object1._numFrames = 4; + _object1.changeZoom(45); + _object1.animate(ANIM_MODE_8, 0, 0); + _globals->_sceneItems.addItems(&_object1, 0); + } + _soundHandler.startSound(251, 0, 127); + if (_globals->_sceneManager._previousScene == 2100) { + if (_globals->getFlag(72)) { + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, 0); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(57, 94), 0); + _globals->_player.changeZoom(-1); + _globals->_player.setPriority2(10); + if (_globals->getFlag(81)) { + setAction(&_action4); + } else { + _object1.setPosition(Common::Point(151, 182), 0); + setAction(&_action1); + } + } else { + _globals->_soundHandler.startSound(250, 0, 127); + _globals->setFlag(72); + + _object3.postInit(); + _object3.setVisage(5001); + _object3.setStrip2(1); + _object3.animate(ANIM_MODE_1, 0); + _object3.setPosition(Common::Point(307, 0), 0); + _object3.changeZoom(-1); + setAction(&_action3); + } + } else if (_globals->_sceneManager._previousScene == 2280) { + _globals->_player.postInit(); + _globals->_player.setVisage(2170); + _globals->_player.animate(ANIM_MODE_1, 0); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(57, 94), 0); + _globals->_player.changeZoom(-1); + _globals->_player.setPriority2(10); + _globals->_player.disableControl(); + _sceneMode = 7001; + setAction(&_action6); + if (!_globals->getFlag(81)) { + _object1.setPosition(Common::Point(151, 182), 0); + _object1.changeZoom(100); + } + _object8.remove(); + _object9.remove(); + } else if (_globals->_sceneManager._previousScene == 2320) { + _globals->_player.postInit(); + _globals->_player.setVisage(0); + _globals->_player.animate(ANIM_MODE_1, 0); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(57, 94), 0); + _globals->_player.changeZoom(-1); + _globals->_player.setPriority2(10); + setAction(&_action6); + } else { + _globals->setFlag(72); + + _object3.postInit(); + _object3.setVisage(5001); + _object3.setStrip2(1); + _object3.setPosition(Common::Point(307, 0), 0); + _soundHandler.startSound(151, 0, 127); + _soundHandler.proc5(1); + _globals->_soundHandler.startSound(250, 0, 127); + setAction(&_action3); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7000::signal() { + Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; + switch (_sceneMode) { + case 7001: + case 7002: + case 7004: + case 7009: + _globals->_player.enableControl(); + break; + case 7003: + _sceneMode = 7001; + setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); + break; + case 7011: + _sceneMode = 7005; + setAction(&scene->_sequenceManager, this, 7005, &_globals->_player, NULL); + break; + case 7012: + _sceneMode = 7005; + setAction(&scene->_sequenceManager, this, 7012, &_globals->_player, NULL); + break; + case 7015: + setAction(&_action4); + break; + } +} + + /*-------------------------------------------------------------------------- * Scene 7600 * @@ -52,6 +654,8 @@ void Scene7600::Action1::signal() { } } +/*--------------------------------------------------------------------------*/ + void Scene7600::Action2::signal() { switch (_actionIndex++) { case 0: @@ -70,6 +674,8 @@ void Scene7600::Action2::signal() { } } +/*--------------------------------------------------------------------------*/ + void Scene7600::postInit(SceneObjectList *OwnerList) { Scene::postInit(); setZoomPercents(100, 0, 200, 100); @@ -130,5 +736,4 @@ void Scene7600::postInit(SceneObjectList *OwnerList) { _soundHandler2.startSound(255); _soundHandler1.startSound(251); } - } // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index 05a7f09a5f..63fe6f5495 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -35,6 +35,82 @@ namespace tSage { +class Scene7000: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + class Action3: public Action { + public: + virtual void dispatch(); + virtual void signal(); + }; + class Action4: public Action { + public: + virtual void signal(); + }; + class Action5: public Action { + public: + virtual void signal(); + }; + class Action6: public Action { + public: + virtual void signal(); + }; + class Action7: public Action { + public: + virtual void signal(); + }; + + /* Objects */ + class Object1: public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Items */ + class SceneItem1: public SceneItem { + public: + virtual void doAction(int action); + }; + +public: + SoundHandler _soundHandler; + SequenceManager _sequenceManager; + SpeakerSKText _speakerSKText; + SpeakerSKL _speakerSKL; + SpeakerQL _speakerQL; + SpeakerQR _speakerQR; + SpeakerQText _speakerQText; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + SceneObject _object9; + SceneObject _object10; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + SceneItem1 _sceneItem1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene7600: public Scene { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From bda0d536228fe7749fb36924ffae49167627b4d7 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 19 Mar 2011 00:06:49 +0100 Subject: TSAGE: fix compilation on GCC --- engines/tsage/module.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 56265021d0..dc7667bab7 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -14,6 +14,7 @@ MODULE_OBJS := \ ringworld_scenes1.o \ ringworld_scenes2.o \ ringworld_scenes3.o \ + ringworld_scenes8.o \ saveload.o \ scenes.o \ sound.o \ -- cgit v1.2.3 From c1abad7a7905061f4e66a2411b77dba7c53a19e3 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 19 Mar 2011 20:11:37 +0100 Subject: TSAGE: Implement scene 7200, fix some bugs in scene 7000 --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes8.cpp | 177 +++++++++++++++++++++++++++++++++++- engines/tsage/ringworld_scenes8.h | 28 ++++++ 3 files changed, 202 insertions(+), 4 deletions(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 6fb55d112e..0e0b96b022 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -104,6 +104,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 8 */ case 7000: return new Scene7000(); + case 7200: return new Scene7200(); case 7600: return new Scene7600(); /* Scene group 10 */ diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 4e0791d05f..4f42d8b0c2 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -44,7 +44,7 @@ void Scene7000::Action1::signal() { setDelay(3); break; case 1: - setAction(&scene->_action6); + setAction(&scene->_action6, this); break; case 2: scene->_soundHandler.startSound(252, 0, 127); @@ -462,7 +462,7 @@ void Scene7000::dispatch() { } } if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 9) - scene->setAction(&scene->_action5); + scene->setAction(&scene->_action7); } Scene::dispatch(); } @@ -571,7 +571,7 @@ void Scene7000::postInit(SceneObjectList *OwnerList) { _globals->_player.setPriority2(10); _globals->_player.disableControl(); _sceneMode = 7001; - setAction(&_action6); + setAction(&_action6, this); if (!_globals->getFlag(81)) { _object1.setPosition(Common::Point(151, 182), 0); _object1.changeZoom(100); @@ -587,7 +587,8 @@ void Scene7000::postInit(SceneObjectList *OwnerList) { _globals->_player.setPosition(Common::Point(57, 94), 0); _globals->_player.changeZoom(-1); _globals->_player.setPriority2(10); - setAction(&_action6); + _sceneMode = 7001; + setAction(&_action6, this); } else { _globals->setFlag(72); @@ -632,6 +633,174 @@ void Scene7000::signal() { } +/*-------------------------------------------------------------------------- + * Scene 7200 + * + *--------------------------------------------------------------------------*/ + +void Scene7200::Action1::signal() { + Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(15); + break; + case 1: { + PlayerMover *mover1 = new PlayerMover(); + Common::Point pt1(165, 147); + scene->_swimmer.addMover(mover1, &pt1, this); + Common::Point pt2(207, 138); + PlayerMover *mover2 = new PlayerMover(); + _globals->_player.addMover(mover2, &pt2, this); + break; + } + case 2: + break; + case 3: + _globals->_sceneManager.changeScene(7300); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7200::Action2::signal() { + Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; + +printf("Action %d\n", _actionIndex); + + switch (_actionIndex++) { + case 0: + setDelay(3); + break; + case 1: { + scene->_object2.setPriority2(25); + scene->_object3.setPriority2(25); + scene->_object4.setPriority2(25); + scene->_object2.setStrip(1); + scene->_object3.setStrip(1); + scene->_object4.setStrip(1); + NpcMover *mover1 = new NpcMover(); + Common::Point pt1(54, 90); + scene->_object2.addMover(mover1, &pt1, this); + NpcMover *mover2 = new NpcMover(); + Common::Point pt2(56, 85); + scene->_object3.addMover(mover2, &pt2, 0); + NpcMover *mover3 = new NpcMover(); + Common::Point pt3(54, 80); + scene->_object4.addMover(mover3, &pt3, 0); + break; + } + case 2: { + scene->_object2.setPriority2(160); + scene->_object3.setPriority2(160); + scene->_object4.setPriority2(160); + scene->_object2.setStrip(2); + scene->_object3.setStrip(2); + scene->_object4.setStrip(2); + NpcMover *mover1 = new NpcMover(); + Common::Point pt1(10, 89); + scene->_object2.addMover(mover1, &pt1, this); + NpcMover *mover2 = new NpcMover(); + Common::Point pt2(12, 84); + scene->_object3.addMover(mover2, &pt2, 0); + NpcMover *mover3 = new NpcMover(); + Common::Point pt3(10, 79); + scene->_object4.addMover(mover3, &pt3, 0); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7200::postInit(SceneObjectList *OwnerList) { + loadScene(7200); + Scene::postInit(); + _object2.postInit(); + _object2.setVisage(7160); + _object2.animate(ANIM_MODE_2, 0); + _object2.setZoom(10); + _object2.setPosition(Common::Point(53, 88), 0); + _object2.setAction(&_action2); + + _object3.postInit(); + _object3.setVisage(7160); + _object3.animate(ANIM_MODE_2, 0); + _object3.setZoom(10); + _object3.setPosition(Common::Point(55, 83), 0); + + _object4.postInit(); + _object4.setVisage(7160); + _object4.animate(ANIM_MODE_2, 0); + _object4.setZoom(10); + _object4.setPosition(Common::Point(57, 78), 0); + + _object5.postInit(); + _object5.setVisage(7201); + _object5.setPosition(Common::Point(300, 172), 0); + _object5.setPriority(172); + _object5.animate(ANIM_MODE_2, 0); + _object5._numFrames = 3; + + _object6.postInit(); + _object6.setVisage(7201); + _object6.setStrip2(3); + _object6.setPosition(Common::Point(144, 97), 0); + _object6.setPriority(199); + _object6.animate(ANIM_MODE_2, 0); + _object6._numFrames = 3; + + _object7.postInit(); + _object7.setVisage(7201); + _object7.setStrip2(4); + _object7.setPosition(Common::Point(115, 123), 0); + _object7.setPriority(199); + _object7.animate(ANIM_MODE_2, 0); + _object7._numFrames = 3; + + _object8.postInit(); + _object8.setVisage(7201); + _object8.setStrip2(6); + _object8.setPosition(Common::Point(140, 173), 0); + _object8.setPriority(199); + _object8.animate(ANIM_MODE_2, 0); + _object8._numFrames = 3; + + _object9.postInit(); + _object9.setVisage(7201); + _object9.setStrip2(7); + _object9.setPosition(Common::Point(215, 196), 0); + _object9.setPriority(199); + _object9.animate(ANIM_MODE_2, 0); + _object9._numFrames = 3; + + // Orange swimmer + _globals->_player.postInit(); + _globals->_player.setVisage(7110); + _globals->_player.animate(ANIM_MODE_1, 0); + _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setZoom(50); + _globals->_player.setPosition(Common::Point(-18, 16), 0); + _globals->_player.disableControl(); + + _swimmer.postInit(); + _swimmer.setVisage(7101); + _swimmer.animate(ANIM_MODE_1, 0); + _swimmer.setObjectWrapper(new SceneObjectWrapper()); + _swimmer.setZoom(50); + _swimmer.setPosition(Common::Point(-8, 16), 0); + + setAction(&_action1); + _soundHandler.startSound(271, 0, 127); +} + /*-------------------------------------------------------------------------- * Scene 7600 * diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index 63fe6f5495..e6a5aa98e0 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -111,6 +111,34 @@ public: virtual void dispatch(); }; +class Scene7200: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + +public: + Action1 _action1; + Action2 _action2; + SceneObject _swimmer; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + SceneObject _object9; + SoundHandler _soundHandler; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + class Scene7600: public Scene { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From bdafdbd485b9776738b571bb33e4d168d4d7cd7d Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 20 Mar 2011 14:30:26 +0100 Subject: TSAGE: Implement scene 7300 --- engines/tsage/ringworld_logic.cpp | 91 ++++++++++++++ engines/tsage/ringworld_logic.h | 46 +++++-- engines/tsage/ringworld_scenes8.cpp | 239 ++++++++++++++++++++++++++++++++---- engines/tsage/ringworld_scenes8.h | 41 +++++++ 4 files changed, 386 insertions(+), 31 deletions(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 0e0b96b022..067a613bb6 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -105,6 +105,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 8 */ case 7000: return new Scene7000(); case 7200: return new Scene7200(); + case 7300: return new Scene7300(); case 7600: return new Scene7600(); /* Scene group 10 */ @@ -283,6 +284,54 @@ void SpeakerGText::removeText() { /*--------------------------------------------------------------------------*/ +SpeakerPOR::SpeakerPOR() { + _speakerName = "POR"; + _newSceneNumber = 7221; + _textPos = Common::Point(10, 30); + _colour1 = 41; +} + +void SpeakerPOR::SpeakerAction1::signal(){ + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(60) + 60); + break; + case 1: + static_cast(_owner)->animate(ANIM_MODE_5, this, NULL); + break; + case 2: + setDelay(_globals->_randomSource.getRandomNumber(10)); + _actionIndex = 0; + break; + default: + break; + } +} + +void SpeakerPOR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7223); + _object1.setStrip2(2); + _object1.setPosition(Common::Point(191, 166), 0); + _object1.animate(ANIM_MODE_7, 0, 0); + + _object2.postInit(&_objectList); + _object2.setVisage(7223); + _object2.setPosition(Common::Point(159, 86), 0); + _object2.setAction(&_speakerAction, 0); + + _object3.postInit(&_objectList); + _object3.setVisage(7223); + _object3.setStrip(3); + _object3.setPosition(Common::Point(119, 107), 0); + _object3.setPriority2(199); + _object3.setAction(&_action2); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + SpeakerOText::SpeakerOText(): SpeakerGText() { _speakerName = "OTEXT"; _textWidth = 240; @@ -314,6 +363,16 @@ SpeakerSText::SpeakerSText(): ScreenSpeaker() { /*--------------------------------------------------------------------------*/ +SpeakerPOText::SpeakerPOText(): ScreenSpeaker() { + _speakerName = "POTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTRE; + _colour1 = 41; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + SpeakerMText::SpeakerMText() { _speakerName = "MTEXT"; _colour1 = 11; @@ -529,6 +588,38 @@ void SpeakerQR::setText(const Common::String &msg) { /*--------------------------------------------------------------------------*/ +SpeakerQU::SpeakerQU() { + _speakerName = "QU"; + _newSceneNumber = 7020; + _textPos = Common::Point(160, 30); + _colour1 = 35; + _textMode = ALIGN_CENTRE; +} + +void SpeakerQU::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7021); + _object1.setStrip2(2); + _object1.setPriority2(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(116, 120), 0); + _object1.animate(ANIM_MODE_7, 0, 0); + + _object2.postInit(&_objectList); + _object2.setVisage(7021); + _object2.setStrip2(1); + _object2.setPriority2(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(111, 84), 0); + _object2.setAction(&_speakerAction, 0); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + SpeakerCR::SpeakerCR() { _speakerName = "CR"; _newSceneNumber = 9010; diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h index 27b71885cd..012ba8b2ba 100644 --- a/engines/tsage/ringworld_logic.h +++ b/engines/tsage/ringworld_logic.h @@ -111,6 +111,21 @@ public: virtual void removeText(); }; +class SpeakerPOR: public AnimatedSpeaker { + class SpeakerAction1: public SpeakerAction { + public: + virtual void signal(); + }; + +public: + SceneObject _object3; + SpeakerAction1 _action2; +public: + SpeakerPOR(); + virtual Common::String getClassName() { return "SpeakerPOR"; } + virtual void setText(const Common::String &msg); +}; + class SpeakerOText: public SpeakerGText { public: SpeakerOText(); @@ -118,6 +133,13 @@ public: virtual Common::String getClassName() { return "SpeakerOText"; } }; +class SpeakerPOText: public ScreenSpeaker { +public: + SpeakerPOText(); + + virtual Common::String getClassName() { return "SpeakerPOText"; } +}; + class SpeakerSText: public ScreenSpeaker { public: SpeakerSText(); @@ -167,6 +189,22 @@ public: virtual Common::String getClassName() { return "SpeakerSKText"; } }; +class SpeakerQR: public AnimatedSpeaker { +public: + SpeakerQR(); + + virtual Common::String getClassName() { return "SpeakerQR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerQU: public AnimatedSpeaker { +public: + SpeakerQU(); + + virtual Common::String getClassName() { return "SpeakerQU"; } + virtual void setText(const Common::String &msg); +}; + class SpeakerSKL: public AnimatedSpeaker { public: SpeakerSKL(); @@ -201,14 +239,6 @@ public: virtual void setText(const Common::String &msg); }; -class SpeakerQR: public AnimatedSpeaker { -public: - SpeakerQR(); - - virtual Common::String getClassName() { return "SpeakerQR"; } - virtual void setText(const Common::String &msg); -}; - class SpeakerCR: public AnimatedSpeaker { public: SpeakerCR(); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 4f42d8b0c2..538a510366 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -608,27 +608,27 @@ void Scene7000::postInit(SceneObjectList *OwnerList) { void Scene7000::signal() { Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; switch (_sceneMode) { - case 7001: - case 7002: - case 7004: - case 7009: - _globals->_player.enableControl(); - break; - case 7003: - _sceneMode = 7001; - setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); - break; - case 7011: - _sceneMode = 7005; - setAction(&scene->_sequenceManager, this, 7005, &_globals->_player, NULL); - break; - case 7012: - _sceneMode = 7005; - setAction(&scene->_sequenceManager, this, 7012, &_globals->_player, NULL); - break; - case 7015: - setAction(&_action4); - break; + case 7001: + case 7002: + case 7004: + case 7009: + _globals->_player.enableControl(); + break; + case 7003: + _sceneMode = 7001; + setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL); + break; + case 7011: + _sceneMode = 7005; + setAction(&scene->_sequenceManager, this, 7005, &_globals->_player, NULL); + break; + case 7012: + _sceneMode = 7005; + setAction(&scene->_sequenceManager, this, 7012, &_globals->_player, NULL); + break; + case 7015: + setAction(&_action4); + break; } } @@ -668,8 +668,6 @@ void Scene7200::Action1::signal() { void Scene7200::Action2::signal() { Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene; -printf("Action %d\n", _actionIndex); - switch (_actionIndex++) { case 0: setDelay(3); @@ -801,6 +799,201 @@ void Scene7200::postInit(SceneObjectList *OwnerList) { _soundHandler.startSound(271, 0, 127); } +/*-------------------------------------------------------------------------- + * Scene 7300 + * + *--------------------------------------------------------------------------*/ + +void Scene7300::Action1::signal() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + case 1: + case 3: + setDelay(30); + break; + case 2: + scene->_stripManager.start(7300, this); + break; + case 4: { + NpcMover *mover = new NpcMover(); + Common::Point pt(102, 122); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 5: + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); + break; + case 6: + _globals->_player.setStrip(3); + _globals->_player._numFrames = 5; + _globals->_player.animate(ANIM_MODE_2, this); + if (_globals->_inventory._translator._sceneNumber == 1) + scene->_stripManager.start(7310, this); + else + scene->_stripManager.start(7305, this); + break; + case 7: + setDelay(3); + _globals->_soundHandler.proc1(0); + break; + case 8: + _globals->_sceneManager.changeScene(2280); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::Action2::signal() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + NpcMover *mover1 = new NpcMover(); + Common::Point pt(_globals->_randomSource.getRandomNumber(203), _globals->_randomSource.getRandomNumber(96)); + scene->_object3.addMover(mover1, &pt, this); + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::Action3::signal() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + NpcMover *mover1 = new NpcMover(); + Common::Point pt(_globals->_randomSource.getRandomNumber(76), _globals->_randomSource.getRandomNumber(78)); + scene->_object1.addMover(mover1, &pt, this); + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::Action4::signal() { + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::dispatch() { + Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene; + scene->_object4.setPosition(Common::Point(scene->_object3._position.x + 15, scene->_object3._position.y + 61)); + scene->_object2.setPosition(Common::Point(scene->_object1._position.x + 1, scene->_object1._position.y - 31)); + + Scene::dispatch(); +} + +/*--------------------------------------------------------------------------*/ + +void Scene7300::postInit(SceneObjectList *OwnerList) { + loadScene(7300); + + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + _globals->setFlag(52); + _globals->setFlag(24); + _globals->setFlag(109); + + _stripManager.addSpeaker(&_speakerPOR); + _stripManager.addSpeaker(&_speakerPOText); + _stripManager.addSpeaker(&_speakerSKText); + _stripManager.addSpeaker(&_speakerQU); + + _speakerSKText.setTextPos(Common::Point(100, 20)); + _speakerPOText.setTextPos(Common::Point(100, 160)); + + _object4.postInit(); + _object4.setVisage(7311); + _object4.setStrip(1); + _object4.setFrame(1); + _object4.setPosition(Common::Point(218, 157), 0); + + _object3.postInit(); + _object3.setVisage(7311); + _object3.setStrip(2); + _object3.setFrame(1); + _object3.setPosition(Common::Point(203, 96), 0); + _object3._numFrames = 2; + _object3._moveDiff = Common::Point(1, 1); + _object3.animate(ANIM_MODE_8, 0, 0); + _object3._field7A = 2; + _object3.setAction(&_action2); + + _globals->_player.postInit(); + _globals->_player.setVisage(7305); + _globals->_player.animate(ANIM_MODE_1, 0); + _globals->_player.setPosition(Common::Point(-100, 100), 0); + _globals->_player.disableControl(); + + _object1.postInit(); + _object1.setVisage(7312); + _object1.animate(ANIM_MODE_1, 0); + _object1._moveDiff = Common::Point(1, 1); + _object1.setPosition(Common::Point(76, 78), 0); + _object1._field7A = 1; + _object1.setAction(&_action3); + + _object2.postInit(); + _object2.setVisage(7312); + _object2.setStrip(2); + _object2.animate(ANIM_MODE_2, 0); + _object2.setPosition(Common::Point(77, 47), 0); + _object2.setPriority2(190); + + _object5.postInit(); + _object5.setVisage(7300); + _object5.setPosition(Common::Point(106, 45), 0); + _object5.animate(ANIM_MODE_2, 0); + _object5._numFrames = 5; + + _object6.postInit(); + _object6.setVisage(7300); + _object6.setStrip2(2); + _object6.setPosition(Common::Point(283, 193), 0); + _object6.animate(ANIM_MODE_2, 0); + _object6._numFrames = 3; + + _object7.postInit(); + _object7.setVisage(7300); + _object7.setStrip(4); + _object7.setPosition(Common::Point(295, 77), 0); + _object7.animate(ANIM_MODE_2, 0); + _object7._numFrames = 3; + + _object8.postInit(); + _object8.setVisage(7300); + _object8.setStrip(5); + _object8.setPosition(Common::Point(1, 147), 0); + _object8.animate(ANIM_MODE_2, 0); + _object8._numFrames = 2; + + setAction(&_action1); + _globals->_soundHandler.startSound(272, 0, 127); +} + /*-------------------------------------------------------------------------- * Scene 7600 * diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index e6a5aa98e0..be389e6db3 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -139,6 +139,47 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; +class Scene7300: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + class Action3: public Action { + public: + virtual void signal(); + }; + class Action4: public Action { + public: + virtual void signal(); + }; + +public: + SpeakerPOR _speakerPOR; + SpeakerPOText _speakerPOText; + SpeakerSKText _speakerSKText; + SpeakerQU _speakerQU; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void dispatch(); +}; + class Scene7600: public Scene { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From 3ed9e9f5754c47897c79717ffbd4f403a0358bd3 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 20 Mar 2011 23:48:22 +0100 Subject: TSAGE: Implement scene 7100. There's a problem with _object1 and _action11: a NPC doesn't start --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes8.cpp | 484 ++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes8.h | 82 ++++++ 3 files changed, 567 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 067a613bb6..7d6980045f 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -104,6 +104,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 8 */ case 7000: return new Scene7000(); + case 7100: return new Scene7100(); case 7200: return new Scene7200(); case 7300: return new Scene7300(); case 7600: return new Scene7600(); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 538a510366..3e620652fc 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -633,6 +633,490 @@ void Scene7000::signal() { } +/*-------------------------------------------------------------------------- + * Scene 7100 + * + *--------------------------------------------------------------------------*/ + +void Scene7100::Action3::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + Common::Point pt(433, 308); + NpcMover *mover = new NpcMover(); + scene->_object4.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object4.remove(); + remove(); + break; + } +} + +void Scene7100::Action4::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(1) + 1); + break; + case 1: { + scene->_object5.setStrip(3); + Common::Point pt(85, 52); + NpcMover *mover = new NpcMover(); + scene->_object5.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object5.setStrip(4); + Common::Point pt(20, 52); + NpcMover *mover = new NpcMover(); + scene->_object5.addMover(mover, &pt, this); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + break; + } +} + +void Scene7100::Action5::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + Common::Point pt(59, 151); + NpcMover *mover = new NpcMover(); + scene->_object9.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object9.setStrip2(1); + Common::Point pt(127, 144); + NpcMover *mover = new NpcMover(); + scene->_object9.addMover(mover, &pt, this); + break; + } + case 3: { + scene->_object9.setStrip2(2); + scene->_object9.setPriority2(180); + Common::Point pt(8, 181); + NpcMover *mover = new NpcMover(); + scene->_object9.addMover(mover, &pt, this); + break; + } + case 4: { + scene->_object9.remove(); + remove(); + } + } +} + +void Scene7100::Action6::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + scene->_object10.setPriority2(8); + scene->_object10.setPosition(Common::Point(155, 187), 0); + + scene->_object11.setPriority2(8); + scene->_object11.setPosition(Common::Point(155, 190), 0); + + scene->_object12.setPriority2(8); + scene->_object12.setPosition(Common::Point(151, 193), 0); + break; + case 1: { + Common::Point pt1(167, 187); + NpcMover *mover1 = new NpcMover(); + scene->_object10.addMover(mover1, &pt1, this); + + Common::Point pt2(165, 185); + NpcMover *mover2 = new NpcMover(); + scene->_object11.addMover(mover2, &pt2, 0); + + Common::Point pt3(163, 183); + NpcMover *mover3 = new NpcMover(); + scene->_object12.addMover(mover3, &pt3, 0); + break; + } + case 2: { + scene->_object10.setStrip2(6); + Common::Point pt1(91, 187); + NpcMover *mover1 = new NpcMover(); + scene->_object10.addMover(mover1, &pt1, this); + + scene->_object11.setStrip2(6); + scene->_object11.setPriority2(50); + Common::Point pt2(89, 185); + NpcMover *mover2 = new NpcMover(); + scene->_object11.addMover(mover2, &pt2, 0); + + scene->_object12.setStrip2(6); + scene->_object12.setPriority2(50); + Common::Point pt3(87, 183); + NpcMover *mover3 = new NpcMover(); + scene->_object12.addMover(mover3, &pt3, 0); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + break; + } +} + +void Scene7100::Action7::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + scene->_object13.setStrip2(8); + Common::Point pt(324, 87); + NpcMover *mover = new NpcMover(); + scene->_object13.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object13.setStrip2(2); + Common::Point pt(524, 104); + NpcMover *mover = new NpcMover(); + scene->_object13.addMover(mover, &pt, 0); + break; + } + case 3: + _actionIndex = 0; + setDelay(1); + break; + } +} + +void Scene7100::Action8::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + scene->_object17.setStrip2(4); + scene->_object18.setStrip2(4); + scene->_object19.setStrip2(4); + + Common::Point pt1(482, 153); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(480, 146); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, 0); + + Common::Point pt3(470, 153); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, 0); + break; + } + case 2: { + scene->_object17.setStrip2(3); + scene->_object18.setStrip2(3); + scene->_object19.setStrip2(3); + + Common::Point pt1(506, 186); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(502, 179); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, 0); + + Common::Point pt3(495, 184); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, 0); + break; + } + case 3: { + scene->_object17.setStrip2(4); + scene->_object18.setStrip2(4); + scene->_object19.setStrip2(4); + + Common::Point pt1(386, 167); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(379, 161); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, 0); + + Common::Point pt3(373, 167); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, 0); + break; + } + case 4: { + scene->_object17.setStrip2(3); + scene->_object18.setStrip2(3); + scene->_object19.setStrip2(3); + + Common::Point pt1(479, 193); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(473, 187); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, 0); + + Common::Point pt3(466, 192); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, 0); + break; + } + case 5: { + Common::Point pt1(552, 183); + NpcMover *mover1 = new NpcMover(); + scene->_object17.addMover(mover1, &pt1, this); + + Common::Point pt2(552, 178); + NpcMover *mover2 = new NpcMover(); + scene->_object18.addMover(mover2, &pt2, 0); + + Common::Point pt3(541, 183); + NpcMover *mover3 = new NpcMover(); + scene->_object19.addMover(mover3, &pt3, 0); + + _actionIndex = 0; + break; + } + } +} + +void Scene7100::Action9::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1); + break; + case 1: { + scene->_object24.setStrip2(1); + Common::Point pt(64, 159); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 2: { + scene->_object24.setStrip2(2); + scene->_object24.setPriority2(160); + Common::Point pt(34, 159); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 3: { + scene->_object24.setStrip2(1); + Common::Point pt(64, 159); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 4: { + scene->_object24.setStrip2(2); + scene->_object24.setPriority2(180); + Common::Point pt(-12, 182); + NpcMover *mover = new NpcMover(); + scene->_object24.addMover(mover, &pt, this); + break; + } + case 5: { + _actionIndex = 0; + setDelay(1); + break; + } + } +} + +void Scene7100::Action10::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(1000); + break; + case 1: { + Common::Point pt(610, -60); + NpcMover *mover = new NpcMover(); + scene->_object25.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object25.remove(); + remove(); + break; + } +} + +void Scene7100::Action11::signal() { + Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(30); + break; + case 1: { + Common::Point pt(154, 175); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + ObjectMover2 *mover2 = new ObjectMover2(); + scene->_object1.addMover(mover2, 25, 35, &_globals->_player); + break; + } + case 2: { + Common::Point pt(700, 155); + NpcMover *mover = new NpcMover(); + _globals->_player.addMover(mover, &pt, this); + break; + } + case 3: + _globals->_sceneManager.changeScene(7200); + remove(); + break; + } +} + +void Scene7100::postInit(SceneObjectList *OwnerList) { + loadScene(7100); + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + _object2.postInit(); + _object2.setVisage(7161); + _object2.animate(ANIM_MODE_2, 0); + _object2.setPosition(Common::Point(10, 140), 0); + _object2._numFrames = 1; + _object2.setPriority2(180); + _object2.setAction(&_action1, 0); + + _object3.postInit(); + _object3.setVisage(7161); + _object3.animate(ANIM_MODE_2, 0); + _object3.setPosition(Common::Point(34, 115), 0); + _object3._numFrames = 1; + _object3.setPriority2(180); + _object3.setAction(&_action2, 0); + + _object4.postInit(); + _object4.setVisage(7164); + _object4.animate(ANIM_MODE_2, 0); + _object4.setPosition(Common::Point(-10, 159), 0); + _object4._numFrames = 2; + _object4.setPriority2(250); + _object4.setAction(&_action3, 0); + + _object5.postInit(); + _object5.setVisage(7162); + _object5.setStrip(3); + _object5.animate(ANIM_MODE_2, 0); + _object5.setPosition(Common::Point(20, 52), 0); + _object5.setAction(&_action4, 0); + + _object9.postInit(); + _object9.setVisage(7160); + _object5.setStrip(2); + _object9.animate(ANIM_MODE_2, 0); + _object9.setPosition(Common::Point(110, 168), 0); + _object9._numFrames = 2; + _object9.setPriority2(16); + _object9.setAction(&_action5, 0); + + _object13.postInit(); + _object13.setVisage(7161); + _object13.setStrip(8); + _object13.animate(ANIM_MODE_2, 0); + _object13.setPosition(Common::Point(524, 104), 0); + _object13._numFrames = 5; + _object13.setPriority2(250); + _object13.setAction(&_action7, 0); + + _object17.postInit(); + _object17.setVisage(7160); + _object17.setStrip(3); + _object17.animate(ANIM_MODE_2, 0); + _object17.setPosition(Common::Point(552, 183), 0); + _object17._numFrames = 4; + _object17._moveDiff.x = 12; + _object17._moveDiff.y = 12; + _object17.setAction(&_action8, 0); + + _object18.postInit(); + _object18.setVisage(7160); + _object18.setStrip(3); + _object18.animate(ANIM_MODE_2, 0); + _object18.setPosition(Common::Point(552, 178), 0); + _object18._numFrames = 4; + _object18._moveDiff.x = 12; + _object18._moveDiff.y = 12; + + _object19.postInit(); + _object19.setVisage(7160); + _object19.setStrip(3); + _object19.animate(ANIM_MODE_2, 0); + _object19.setPosition(Common::Point(541, 183), 0); + _object19._numFrames = 4; + _object19._moveDiff.x = 12; + _object19._moveDiff.y = 12; + + _object24.postInit(); + _object24.setVisage(7162); + _object24.setStrip(1); + _object24.animate(ANIM_MODE_2, 0); + _object24.setPosition(Common::Point(-12, 182), 0); + _object24._numFrames = 4; + _object24.setPriority2(180); + _object24.setAction(&_action9, 0); + + _object25.postInit(); + _object25.setVisage(7163); + _object25.animate(ANIM_MODE_2, 0); + _object25.setPosition(Common::Point(551, 145), 0); + _object25._numFrames = 5; + _object25.setPriority2(160); + _object25.setAction(&_action10, 0); + + // Swimmer 1 + _globals->_player.postInit(); + _globals->_player.setVisage(7101); + _globals->_player.animate(ANIM_MODE_2, 0); + _globals->_player._moveDiff.x = 4; + _globals->_player._moveDiff.y = 2; + _globals->_player.setPosition(Common::Point(135, 135), 0); + _globals->_player.setPriority2(200); + _globals->_player.disableControl(); + + // Swimmer 2 + _object1.postInit(); + _object1.setVisage(7110); + _object1.animate(ANIM_MODE_1, 0); + _object1._moveDiff.x = 4; + _object1._moveDiff.y = 2; + _object1.setPosition(Common::Point(100, 100), 0); + + setAction(&_action11); + _soundHandler1.startSound(270, 0, 127); + _soundHandler2.startSound(275, 0, 127); + _globals->_soundHandler.startSound(270, 0, 127); +} /*-------------------------------------------------------------------------- * Scene 7200 * diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index be389e6db3..81c79a690e 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -111,6 +111,88 @@ public: virtual void dispatch(); }; +class Scene7100: public Scene { + /* Actions */ + class Action3: public Action { + public: + virtual void signal(); + }; + class Action4: public Action { + public: + virtual void signal(); + }; + class Action5: public Action { + public: + virtual void signal(); + }; + class Action6: public Action { + public: + virtual void signal(); + }; + class Action7: public Action { + public: + virtual void signal(); + }; + class Action8: public Action { + public: + virtual void signal(); + }; + class Action9: public Action { + public: + virtual void signal(); + }; + class Action10: public Action { + public: + virtual void signal(); + }; + class Action11: public Action { + public: + virtual void signal(); + }; + +public: + SoundHandler _soundHandler1; + SoundHandler _soundHandler2; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneObject _object7; + SceneObject _object8; + SceneObject _object9; + SceneObject _object10; + SceneObject _object11; + SceneObject _object12; + SceneObject _object13; + SceneObject _object14; + SceneObject _object15; + SceneObject _object16; + SceneObject _object17; + SceneObject _object18; + SceneObject _object19; + SceneObject _object20; + SceneObject _object21; + SceneObject _object22; + SceneObject _object23; + SceneObject _object24; + SceneObject _object25; + Action _action1; + Action _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Action9 _action9; + Action10 _action10; + Action11 _action11; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + class Scene7200: public Scene { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From 3ca8360b28005464a20986c8f7847675600df14f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 17 Mar 2011 22:49:14 +1100 Subject: TSAGE: Changed walk_regions debugger command to work in scrolling screens --- engines/tsage/debugger.cpp | 12 +++++++++++- engines/tsage/debugger.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index ff3f6e3031..52a1a5f877 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -36,6 +36,7 @@ Debugger::Debugger(): GUI::Debugger() { DCmd_Register("continue", WRAP_METHOD(Debugger, Cmd_Exit)); DCmd_Register("scene", WRAP_METHOD(Debugger, Cmd_Scene)); DCmd_Register("walk_regions", WRAP_METHOD(Debugger, Cmd_WalkRegions)); + DCmd_Register("item", WRAP_METHOD(Debugger, Cmd_Item)); } static int strToInt(const char *s) { @@ -93,7 +94,8 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) { LineSliceSet sliceSet = wr.getLineSlices(yp); for (uint idx = 0; idx < sliceSet.items.size(); ++idx) - destSurface.hLine(sliceSet.items[idx].xs, yp, sliceSet.items[idx].xe, colour); + destSurface.hLine(sliceSet.items[idx].xs - _globals->_sceneOffset.x, yp, + sliceSet.items[idx].xe - _globals->_sceneOffset.x, colour); } } @@ -106,4 +108,12 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) { return false; } +/** + * Give a specified item to the player + */ +bool Debugger::Cmd_Item(int argc, const char **argv) { + _globals->_inventory._infoDisk._sceneNumber = 1; + return true; +} + } // End of namespace tSage diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h index 94f4babc62..ffd7c3263a 100644 --- a/engines/tsage/debugger.h +++ b/engines/tsage/debugger.h @@ -39,6 +39,7 @@ public: protected: bool Cmd_Scene(int argc, const char **argv); bool Cmd_WalkRegions(int argc, const char **argv); + bool Cmd_Item(int argc, const char **argv); }; } // End of namespace tSage -- cgit v1.2.3 From 370adb55eb9ed844296c3c48f262e33841648164 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 17 Mar 2011 22:57:24 +1100 Subject: TSAGE: Bugfixes for player movement in wide-screen scenes --- engines/tsage/core.cpp | 10 ++++++---- engines/tsage/scenes.cpp | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 07548224ed..7749e89580 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2160,8 +2160,8 @@ void SceneObject::updateScreen() { if (srcRect.isValidRect()) { Rect destRect = srcRect; - destRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y); destRect.translate(-sceneBounds.left, -sceneBounds.top); + srcRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y); _globals->_screenSurface.copyFrom(_globals->_sceneManager._scene->_backSurface, srcRect, destRect); } @@ -2194,8 +2194,10 @@ void SceneObjectList::draw() { } else { // If there is a scroll follower, check whether it has moved off-screen if (_globals->_scrollFollower) { - const Common::Point &objPos = _globals->_scrollFollower->_position; const Rect &scrollerRect = _globals->_sceneManager._scrollerRect; + Common::Point objPos( + _globals->_scrollFollower->_position.x - _globals->_sceneManager._scene->_sceneBounds.left, + _globals->_scrollFollower->_position.y - _globals->_sceneManager._scene->_sceneBounds.top); int loadCount = 0; if (objPos.x >= scrollerRect.right) { @@ -2568,8 +2570,8 @@ void Player::process(Event &event) { (_position != event.mousePos) && _globals->_sceneObjects->contains(this)) { PlayerMover *newMover = new PlayerMover(); - Common::Point destPos(event.mousePos.x - _globals->_sceneManager._scene->_sceneBounds.left, - event.mousePos.y - _globals->_sceneManager._scene->_sceneBounds.top); + Common::Point destPos(event.mousePos.x + _globals->_sceneManager._scene->_sceneBounds.left, + event.mousePos.y + _globals->_sceneManager._scene->_sceneBounds.top); addMover(newMover, &destPos, NULL); event.handled = true; diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index e0ef87f66b..cc5ccb333a 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -344,10 +344,10 @@ void Scene::refreshBackground(int xAmount, int yAmount) { int yHalfOffset = (_backgroundBounds.height() / 100) == 3 ? 0 : _sceneBounds.top / 100; // Set the limits and increment amounts - int yInc = (xAmount < 0) ? -1 : 1; + int xInc = (xAmount < 0) ? -1 : 1; int xSection = (xAmount < 0) ? 15 : 0; int xSectionEnd = (xAmount < 0) ? -1 : 16; - int xInc = (yAmount < 0) ? -1 : 1; + int yInc = (yAmount < 0) ? -1 : 1; int ySection = (yAmount < 0) ? 15 : 0; int ySectionEnd = (yAmount < 0) ? -1 : 16; bool changedFlag = false; -- cgit v1.2.3 From 5e2eab6e4fff391022ef355a6df6050f7190bc0a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 18 Mar 2011 22:58:36 +1100 Subject: TSAGE: Corrected background scrolling on wide-screen scenes --- engines/tsage/globals.cpp | 4 ++-- engines/tsage/globals.h | 2 +- engines/tsage/graphics.cpp | 4 ++-- engines/tsage/scenes.cpp | 50 ++++++++++++++++++++++++---------------------- engines/tsage/scenes.h | 1 - 5 files changed, 31 insertions(+), 30 deletions(-) diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 11e8af1ffc..2bf47a3ed7 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -63,7 +63,7 @@ Globals::Globals(): _sceneObjects = &_sceneObjectsInstance; _sceneObjects_queue.push_front(_sceneObjects); - _stru_4642E = Common::Point(-1, -1); + _prevSceneOffset = Common::Point(-1, -1); _sceneListeners.push_back(&_soundHandler); _sceneListeners.push_back(&_sequenceManager._soundHandler); } @@ -95,7 +95,7 @@ void Globals::synchronise(Serialiser &s) { s.syncAsByte(_flags[i]); s.syncAsSint16LE(_sceneOffset.x); s.syncAsSint16LE(_sceneOffset.y); - s.syncAsSint16LE(_stru_4642E.x); s.syncAsSint16LE(_stru_4642E.y); + s.syncAsSint16LE(_prevSceneOffset.x); s.syncAsSint16LE(_prevSceneOffset.y); SYNC_POINTER(_scrollFollower); s.syncAsSint32LE(_stripNum); } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 243fb1eae9..c06c073691 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -65,7 +65,7 @@ public: Region _paneRegions[2]; int _paneRefreshFlag[2]; Common::Point _sceneOffset; - Common::Point _stru_4642E; + Common::Point _prevSceneOffset; SceneObject *_scrollFollower; SequenceManager _sequenceManager; Common::RandomSource _randomSource; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 93bb7ea63f..93ac9f07d7 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -405,8 +405,8 @@ void GfxSurface::loadScreenSection(Graphics::Surface &dest, int xHalf, int yHalf int screenNum = _globals->_sceneManager._scene->_activeScreenNumber; Rect updateRect(0, 0, 160, 100); updateRect.translate(xHalf * 160, yHalf * 100); - int xHalfCount = (dest.w + 159) / 160; - int yHalfCount = (dest.h + 99) / 100; + int xHalfCount = (_globals->_sceneManager._scene->_backgroundBounds.right + 159) / 160; + int yHalfCount = (_globals->_sceneManager._scene->_backgroundBounds.bottom + 99) / 100; if (xSection < xHalfCount && ySection < yHalfCount) { int rlbNum = xSection * yHalfCount + ySection; diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index cc5ccb333a..fab5afff71 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -167,8 +167,8 @@ void SceneManager::setBackSurface() { _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT); _globals->_sceneManager._scrollerRect = Rect(0, 30, SCREEN_WIDTH, SCREEN_HEIGHT - 30); } else { - // Double-size size creation - _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH * 2, SCREEN_HEIGHT); + // Wide screen needs extra space to allow for scrolling + _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH * 3 / 2, SCREEN_HEIGHT); _globals->_sceneManager._scrollerRect = Rect(80, 0, SCREEN_WIDTH - 80, SCREEN_HEIGHT); } } else { @@ -235,7 +235,7 @@ void Scene::synchronise(Serialiser &s) { _oldSceneBounds.synchronise(s); for (int i = 0; i < 256; ++i) - s.syncAsSint16LE(_enabledSections[i]); + s.syncAsUint16LE(_enabledSections[i]); for (int i = 0; i < 256; ++i) s.syncAsSint16LE(_zoomPercents[i]); } @@ -325,10 +325,10 @@ void Scene::loadBackground(int xAmount, int yAmount) { if ((_backgroundBounds.height() / 100) == 3) _globals->_sceneOffset.y = 0; - if ((_globals->_sceneOffset.x != _globals->_stru_4642E.y) || - (_globals->_sceneOffset.y != _globals->_stru_4642E.y)) { + if ((_globals->_sceneOffset.x != _globals->_prevSceneOffset.x) || + (_globals->_sceneOffset.y != _globals->_prevSceneOffset.y)) { // Change has happend, so refresh background - _globals->_stru_4642E = _globals->_sceneOffset; + _globals->_prevSceneOffset = _globals->_sceneOffset; refreshBackground(xAmount, yAmount); } } @@ -345,35 +345,43 @@ void Scene::refreshBackground(int xAmount, int yAmount) { // Set the limits and increment amounts int xInc = (xAmount < 0) ? -1 : 1; - int xSection = (xAmount < 0) ? 15 : 0; + int xSectionStart = (xAmount < 0) ? 15 : 0; int xSectionEnd = (xAmount < 0) ? -1 : 16; int yInc = (yAmount < 0) ? -1 : 1; - int ySection = (yAmount < 0) ? 15 : 0; + int ySectionStart = (yAmount < 0) ? 15 : 0; int ySectionEnd = (yAmount < 0) ? -1 : 16; bool changedFlag = false; - for (int yp = ySection; yp < ySectionEnd; yp += yInc) { - for (int xp = xSection; xp < xSectionEnd; xp += xInc) { + for (int yp = ySectionStart; yp != ySectionEnd; yp += yInc) { + for (int xp = xSectionStart; xp != xSectionEnd; xp += xInc) { if ((yp < yHalfOffset) || (yp >= (yHalfOffset + yHalfCount)) || (xp < xHalfOffset) || (xp >= (xHalfOffset + xHalfCount))) { // Flag section as enabled _enabledSections[xp * 16 + yp] = 0xffff; } else { - // Check if the section is enabled - if (_enabledSections[xp * 16 + yp] || ((xAmount == 0) && (yAmount == 0))) { + // Check if the section is already loaded +// if (_enabledSections[xp * 16 + yp] || ((xAmount == 0) && (yAmount == 0))) { Graphics::Surface s = _backSurface.lockSurface(); GfxSurface::loadScreenSection(s, xp - xHalfOffset, yp - yHalfOffset, xp, yp); _backSurface.unlockSurface(); changedFlag = true; - } else { +/* } else { int yv = _enabledSections[xp * 16 + yp] == ((xp - xHalfOffset) << 4) ? 0 : 1; if (yv != (yp - yHalfOffset)) { - int xSectionTemp = _enabledSections[xp * 16 + yp] >> 4; - int ySectionTemp = _enabledSections[xp * 16 + yp] & 0xffff; - - reuseSection(xp - xHalfOffset, yp - yHalfOffset, xSectionTemp, ySectionTemp); + // Copy an existing 160x100 screen section previously loaded + int xSectionSrc = xp - xHalfOffset; + int ySectionSrc = yp - yHalfOffset; + int xSectionDest = _enabledSections[xp * 16 + yp] >> 4; + int ySectionDest = _enabledSections[xp * 16 + yp] & 0xffff; + + Rect srcBounds(xSectionSrc * 160, ySectionSrc * 100, + (xSectionSrc + 1) * 160, (ySectionSrc + 1) * 100); + Rect destBounds(xSectionDest * 160, ySectionDest * 100, + (xSectionDest + 1) * 160, (ySectionDest + 1) * 100); + + _backSurface.copyFrom(_backSurface, srcBounds, destBounds); } - } + }*/ _enabledSections[xp * 16 + yp] = ((xp - xHalfOffset) << 4) && (yp - yHalfOffset); @@ -386,12 +394,6 @@ void Scene::refreshBackground(int xAmount, int yAmount) { } } -void Scene::reuseSection(int xHalf, int yHalf, int xSection, int ySection) { -// Rect rect1, rect2, rect3; - - // TODO: Figure out purpose -} - void Scene::signalListeners() { // TODO: Figure out method } diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h index 80030230e8..2295da0074 100644 --- a/engines/tsage/scenes.h +++ b/engines/tsage/scenes.h @@ -36,7 +36,6 @@ namespace tSage { class Scene: public StripCallback { private: - void reuseSection(int xHalf, int yHalf, int xSection, int ySection); void signalListeners(); public: int _field12; -- cgit v1.2.3 From 2a374fb360903acdcd7a50c3321684ba93138b72 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 14:20:15 +1100 Subject: TSAGE: Implement original engine scene scrolling optimisations Wide screens are broken into 160x100 chunks. When scrolling, sections of the scene which have already been previously decoded for display can be reused, rather than re-decoding them from scratch --- engines/tsage/scenes.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index fab5afff71..a1dfe0b2ce 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -360,19 +360,20 @@ void Scene::refreshBackground(int xAmount, int yAmount) { _enabledSections[xp * 16 + yp] = 0xffff; } else { // Check if the section is already loaded -// if (_enabledSections[xp * 16 + yp] || ((xAmount == 0) && (yAmount == 0))) { + if ((_enabledSections[xp * 16 + yp] == 0xffff) || ((xAmount == 0) && (yAmount == 0))) { + // Chunk isn't loaded, so load it in Graphics::Surface s = _backSurface.lockSurface(); GfxSurface::loadScreenSection(s, xp - xHalfOffset, yp - yHalfOffset, xp, yp); _backSurface.unlockSurface(); changedFlag = true; -/* } else { - int yv = _enabledSections[xp * 16 + yp] == ((xp - xHalfOffset) << 4) ? 0 : 1; - if (yv != (yp - yHalfOffset)) { + } else { + int yv = (_enabledSections[xp * 16 + yp] == ((xp - xHalfOffset) << 4)) ? 0 : 1; + if (yv | (yp - yHalfOffset)) { // Copy an existing 160x100 screen section previously loaded - int xSectionSrc = xp - xHalfOffset; - int ySectionSrc = yp - yHalfOffset; - int xSectionDest = _enabledSections[xp * 16 + yp] >> 4; - int ySectionDest = _enabledSections[xp * 16 + yp] & 0xffff; + int xSectionDest = xp - xHalfOffset; + int ySectionDest = yp - yHalfOffset; + int xSectionSrc = _enabledSections[xp * 16 + yp] >> 4; + int ySectionSrc = _enabledSections[xp * 16 + yp] & 0xf; Rect srcBounds(xSectionSrc * 160, ySectionSrc * 100, (xSectionSrc + 1) * 160, (ySectionSrc + 1) * 100); @@ -381,10 +382,10 @@ void Scene::refreshBackground(int xAmount, int yAmount) { _backSurface.copyFrom(_backSurface, srcBounds, destBounds); } - }*/ + } _enabledSections[xp * 16 + yp] = - ((xp - xHalfOffset) << 4) && (yp - yHalfOffset); + ((xp - xHalfOffset) << 4) | (yp - yHalfOffset); } } } -- cgit v1.2.3 From b9955a3de676922313b39264e33ff6e3678d751a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 14:58:30 +1100 Subject: TSAGE: Added command to show the priority regions of a scene --- engines/tsage/debugger.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++- engines/tsage/debugger.h | 1 + 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index 52a1a5f877..84a04236da 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -36,6 +36,7 @@ Debugger::Debugger(): GUI::Debugger() { DCmd_Register("continue", WRAP_METHOD(Debugger, Cmd_Exit)); DCmd_Register("scene", WRAP_METHOD(Debugger, Cmd_Scene)); DCmd_Register("walk_regions", WRAP_METHOD(Debugger, Cmd_WalkRegions)); + DCmd_Register("priority_regions", WRAP_METHOD(Debugger, Cmd_PriorityRegions)); DCmd_Register("item", WRAP_METHOD(Debugger, Cmd_Item)); } @@ -76,7 +77,7 @@ bool Debugger::Cmd_Scene(int argc, const char **argv) { */ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) { if (argc != 1) { - DebugPrintf("USage: %s\n", argv[0]); + DebugPrintf("Usage: %s\n", argv[0]); return true; } @@ -108,6 +109,48 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) { return false; } +/* + * This command draws the priority regions onto the screen + */ +bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } + + // Colour index to use for the first priority region + int colour = 16; + int count = 0; + + // Lock the background surface for access + Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface(); + + List::iterator i = _globals->_sceneManager._scene->_priorities.begin(); + + for (; i != _globals->_sceneManager._scene->_priorities.end(); ++i, ++colour, ++count) { + for (int y = 0; y < destSurface.h; ++y) { + byte *destP = (byte *)destSurface.getBasePtr(0, y); + + for (int x = 0; x < destSurface.w; ++x) { + if ((*i).contains(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + x, + _globals->_sceneManager._scene->_sceneBounds.top + y))) + *destP = colour; + ++destP; + } + } + } + + // Release the surface + _globals->_sceneManager._scene->_backSurface.unlockSurface(); + + // Mark the scene as requiring a full redraw + _globals->_paneRefreshFlag[0] = 2; + + DebugPrintf("Total regions = %d\n", count); + + return false; +} + /** * Give a specified item to the player */ diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h index ffd7c3263a..348d2cb821 100644 --- a/engines/tsage/debugger.h +++ b/engines/tsage/debugger.h @@ -39,6 +39,7 @@ public: protected: bool Cmd_Scene(int argc, const char **argv); bool Cmd_WalkRegions(int argc, const char **argv); + bool Cmd_PriorityRegions(int argc, const char **argv); bool Cmd_Item(int argc, const char **argv); }; -- cgit v1.2.3 From 5df908a8063f54ef9a8dc060cd241841d5508e8f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 14:59:26 +1100 Subject: TSAGE: Correctly handle priority regions when drawing in a wide scene --- engines/tsage/graphics.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 93ac9f07d7..2b323da07a 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -547,7 +547,9 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi int xp = destBounds.left; while (tempSrc < (pSrc + destBounds.width())) { - if (!priorityRegion || !priorityRegion->contains(Common::Point(xp, destBounds.top + y))) { + if (!priorityRegion || !priorityRegion->contains(Common::Point( + xp + _globals->_sceneManager._scene->_sceneBounds.left, + destBounds.top + y + _globals->_sceneManager._scene->_sceneBounds.top))) { if (*tempSrc != src._transColour) *tempDest = *tempSrc; } -- cgit v1.2.3 From 65fc9a375a23870be5b32dc5550a5728ee576977 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 15:03:20 +1100 Subject: TSAGE: Replaced some values with proper constants --- engines/tsage/core.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 7749e89580..503dd54103 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1732,9 +1732,9 @@ void SceneObject::setPriority(int priority) { void SceneObject::setPriority2(int priority) { if (priority == -1) { - _flags &= ~1; + _flags &= ~OBJFLAG_FIXED_PRIORITY; } else { - _flags |= 1; + _flags |= OBJFLAG_FIXED_PRIORITY; setPriority(priority); } } -- cgit v1.2.3 From c84da24261916b753385e6f0a781b8847c307f71 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 16:10:45 +1100 Subject: TSAGE: Bugfix to the sequence manager to treat parameters as signed integers --- engines/tsage/converse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index c253cc79c5..e8b640ea3d 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -101,7 +101,7 @@ void SequenceManager::signal() { if (idx > 34) continue; - uint v1, v2, v3; + int16 v1, v2, v3; switch (idx) { case 0: // Stop sequence -- cgit v1.2.3 From 215afe224b6a0cfea676c60e801b55a1d65bcfb7 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 16:11:24 +1100 Subject: TSAGE: Added support to priority_regions to display a single specific priority region --- engines/tsage/debugger.cpp | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index 84a04236da..2c6c533125 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -113,10 +113,11 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) { * This command draws the priority regions onto the screen */ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) { - if (argc != 1) { - DebugPrintf("Usage: %s\n", argv[0]); - return true; - } + int regionNum = 0; + + // Check for an optional specific region to display + if (argc == 2) + regionNum = strToInt(argv[1]); // Colour index to use for the first priority region int colour = 16; @@ -126,18 +127,26 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) { Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface(); List::iterator i = _globals->_sceneManager._scene->_priorities.begin(); + Common::String regionsDesc; for (; i != _globals->_sceneManager._scene->_priorities.end(); ++i, ++colour, ++count) { - for (int y = 0; y < destSurface.h; ++y) { - byte *destP = (byte *)destSurface.getBasePtr(0, y); - - for (int x = 0; x < destSurface.w; ++x) { - if ((*i).contains(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + x, - _globals->_sceneManager._scene->_sceneBounds.top + y))) - *destP = colour; - ++destP; + Region &r = *i; + + if ((regionNum == 0) || (regionNum == (count + 1))) { + for (int y = 0; y < destSurface.h; ++y) { + byte *destP = (byte *)destSurface.getBasePtr(0, y); + + for (int x = 0; x < destSurface.w; ++x) { + if (r.contains(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + x, + _globals->_sceneManager._scene->_sceneBounds.top + y))) + *destP = colour; + ++destP; + } } } + + regionsDesc += Common::String::format("Region Priority = %d bounds=%d,%d,%d,%d\n", + r._regionId, r._bounds.left, r._bounds.top, r._bounds.right, r._bounds.bottom); } // Release the surface @@ -147,8 +156,9 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) { _globals->_paneRefreshFlag[0] = 2; DebugPrintf("Total regions = %d\n", count); + DebugPrintf("%s", regionsDesc.c_str()); - return false; + return true; } /** -- cgit v1.2.3 From d0dff8c47cd65f1051c00f73ca2df81f4e7f6222 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 18:11:18 +1100 Subject: TSAGE: Completed Scene #2320 - Starcraft - Lander Bar --- engines/tsage/ringworld_scenes3.cpp | 234 +++++++++++++++++++++++++++++++++++- engines/tsage/ringworld_scenes3.h | 49 +++++++- 2 files changed, 276 insertions(+), 7 deletions(-) diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index 6921de4918..6c793c83b4 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -4991,7 +4991,7 @@ int Scene2310::findObject(int objIndex) { } /*-------------------------------------------------------------------------- - * Scene 2320 - Starcraft - Lander Bar + * Scene 2320 - Starcraft - Lander Bay * *--------------------------------------------------------------------------*/ @@ -5517,7 +5517,235 @@ void Scene2320::Action8::signal() { /*--------------------------------------------------------------------------*/ -Scene2320::Scene2320() { +void Scene2320::Hotspot5::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 13); + break; + case CURSOR_USE: + if (_globals->getFlag(70)) + SceneItem::display2(2320, 33); + else if (_globals->getFlag(13)) + SceneItem::display2(2320, 18); + else + scene->setAction(&scene->_action5); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot6::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 2); + break; + case CURSOR_USE: + _globals->_player.disableControl(); + scene->setAction(&scene->_action3); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot8::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 23); + break; + case CURSOR_USE: + scene->_sceneMode = 2336; + scene->setAction(&scene->_sequenceManager1, scene, 2336, &_globals->_player, this, NULL); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot10::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 26); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->_sceneMode = 2329; + + if (_globals->getFlag(13)) { + scene->_stripManager.start(2337, scene); + } else if (_globals->getFlag(70)) { + scene->setAction(&scene->_action8); + } else if (_globals->getFlag(109)) { + scene->setAction(&scene->_sequenceManager1, scene, 2337, NULL); + } else if (!_state) { + ++_state; + scene->setAction(&scene->_sequenceManager1, scene, 2334, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 2335, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot11::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 25); + break; + case CURSOR_TALK: + _globals->_player.disableControl(); + scene->_sceneMode = 2329; + + if (_globals->getFlag(13)) { + _globals->_player.disableControl(); + scene->_sceneMode = 5000; + scene->_stripManager.start(2336, scene); + } else if (_globals->getFlag(70)) { + scene->setAction(&scene->_action8); + } else { + scene->_sceneMode = 2329; + + if (_globals->_inventory._ale._sceneNumber == 1) { + scene->setAction(&scene->_sequenceManager1, scene, 2329, NULL); + } else if (!_globals->getFlag(110)) { + _globals->setFlag(110); + scene->setAction(&scene->_sequenceManager1, scene, 2330, NULL); + } else if (_globals->_inventory._peg._sceneNumber != 1) { + scene->setAction(&scene->_sequenceManager1, scene, 2331, NULL); + } else if (!_state) { + ++_state; + scene->setAction(&scene->_sequenceManager1, scene, 2332, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 2333, NULL); + } + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot12::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 5); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2320, 24); + else { + _globals->_player.disableControl(); + scene->_sceneMode = 2322; + scene->setAction(&scene->_sequenceManager1, scene, 2322, &_globals->_player, NULL); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot14::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 17); + break; + case CURSOR_USE: + if (_globals->getFlag(24)) { + _globals->clearFlag(24); + _globals->_player.disableControl(); + + scene->_hotspot8.postInit(); + scene->_hotspot8.setVisage(2345); + scene->_hotspot8.setPosition(Common::Point(634, 65)); + scene->_hotspot8.flag100(); + + _globals->_sceneItems.push_front(&scene->_hotspot8); + _globals->_inventory._waldos._sceneNumber = 2320; + + scene->_hotspot9.postInit(); + scene->_hotspot9.setVisage(2345); + scene->_hotspot9._strip = 6; + scene->_hotspot9.setPosition(Common::Point(536, 103)); + scene->_hotspot9.setPriority2(200); + scene->_hotspot9.flag100(); + + scene->_hotspot16.postInit(); + scene->_hotspot16.setVisage(2345); + scene->_hotspot16.setStrip(8); + scene->_hotspot16.setPosition(Common::Point(536, 103)); + scene->_hotspot16.flag100(); + + scene->_sceneMode = 2324; + scene->setAction(&scene->_sequenceManager1, scene, 2324, &_globals->_player, &scene->_hotspot7, + &scene->_hotspot8, &scene->_hotspot9, &scene->_hotspot16, NULL); + } else if (_globals->getFlag(13)) { + SceneItem::display2(2320, 24); + } else if (!_globals->getFlag(76)) { + SceneItem::display2(2320, 28); + } else if (!_globals->_inventory._waldos._sceneNumber) { + SceneItem::display2(2320, 27); + } else { + SceneItem::display2(2320, 29); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene2320::Hotspot15::doAction(int action) { + Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(2320, 16); + break; + case CURSOR_USE: + if (_globals->getFlag(13)) + SceneItem::display2(2320, 24); + else + scene->setAction(&scene->_action4); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + + +/*--------------------------------------------------------------------------*/ + +Scene2320::Scene2320(): + _hotspot1(0, CURSOR_LOOK, 2320, 0, LIST_END), + _hotspot2(0, CURSOR_LOOK, 2320, 1, LIST_END), + _hotspot3(0, CURSOR_LOOK, 2320, 11, LIST_END), + _hotspot4(0, CURSOR_LOOK, 2320, 14, LIST_END), + _hotspot13(0, CURSOR_LOOK, 2320, 12, LIST_END) +{ } void Scene2320::postInit(SceneObjectList *OwnerList) { @@ -5746,7 +5974,7 @@ void Scene2320::postInit(SceneObjectList *OwnerList) { _globals->_sceneManager._scene->_sceneBounds.centre(_globals->_player._position); loadScene(2320); - _hotspot14._sceneRegionId = 0; + _hotspot14._sceneRegionId = 8; _hotspot1.setBounds(Rect(0, 0, 640, 200)); _hotspot2.setBounds(Rect(278, 0, 362, 61)); _hotspot3.setBounds(Rect(282, 62, 367, 98)); diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h index 0f2923ded8..24b3ee3f22 100644 --- a/engines/tsage/ringworld_scenes3.h +++ b/engines/tsage/ringworld_scenes3.h @@ -809,6 +809,40 @@ class Scene2320: public Scene { public: virtual void signal(); }; + + /* Hotspots */ + class Hotspot5: public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot6: public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot8: public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot10: public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Hotspot11: public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Hotspot12: public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot14: public SceneObject { + public: + virtual void doAction(int action); + }; + class Hotspot15: public SceneObject { + public: + virtual void doAction(int action); + }; public: SoundHandler _soundHandler; SequenceManager _sequenceManager1, _sequenceManager2; @@ -824,10 +858,17 @@ public: SpeakerSText _speakerSText; SpeakerGameText _speakerGameText; SceneArea _area1, _area2, _area3, _area4; - SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5; - SceneObject _hotspot6, _hotspot7, _hotspot8, _hotspot9; - SceneObjectExt _hotspot10, _hotspot11; - SceneObject _hotspot12, _hotspot13, _hotspot14, _hotspot15; + DisplayHotspot _hotspot1, _hotspot2, _hotspot3, _hotspot4; + Hotspot5 _hotspot5; + Hotspot6 _hotspot6; + SceneObject _hotspot7, _hotspot9; + Hotspot8 _hotspot8; + Hotspot10 _hotspot10; + Hotspot11 _hotspot11; + Hotspot12 _hotspot12; + DisplayHotspot _hotspot13; + Hotspot14 _hotspot14; + Hotspot15 _hotspot15; SceneObject _hotspot16; SceneItem *_hotspotPtr; Action1 _action1; -- cgit v1.2.3 From dd29c4695f2127b37340197ba500736c1f53649c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 21:07:04 +1100 Subject: TSAGE: Implemented Scene 2400 - Descending in Lander --- engines/tsage/core.cpp | 4 +++ engines/tsage/core.h | 1 + engines/tsage/ringworld_logic.cpp | 2 ++ engines/tsage/ringworld_scenes3.cpp | 59 +++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes3.h | 14 +++++++++ engines/tsage/scenes.cpp | 2 +- 6 files changed, 81 insertions(+), 1 deletion(-) diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 503dd54103..f06e7f532b 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1682,6 +1682,10 @@ void SceneObject::setZoom(int percent) { } } +void SceneObject::updateZoom() { + changeZoom(_percent); +} + void SceneObject::changeZoom(int percent) { if (percent == -1) _flags &= ~OBJFLAG_ZOOMED; diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 79731bf46a..d961f8bdd1 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -507,6 +507,7 @@ public: void setStrip(int frameNum); void setStrip2(int frameNum); void setZoom(int percent); + void updateZoom(); void changeZoom(int percent); void setFrame(int frameNum); void setFrame2(int frameNum); diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 7d6980045f..fa7a6f1f31 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -95,6 +95,8 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 2310: return new Scene2310(); // Starcraft - Lander Bay case 2320: return new Scene2320(); + // Scene 2400 - Descending in Lander + case 2400: return new Scene2400(); /* Scene group 4 */ diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index 6c793c83b4..a12a7c41f0 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -6034,6 +6034,65 @@ void Scene2320::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2400 - Descending in Lander + * + *--------------------------------------------------------------------------*/ + +void Scene2400::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(60); + break; + case 1: + ADD_MOVER(_globals->_player, 160, 71); + break; + case 2: + ADD_MOVER(_globals->_player, 160, 360); + break; + case 3: + _globals->_player._moveDiff = Common::Point(1, 1); + ADD_MOVER(_globals->_player, 140, 375); + break; + case 4: + ADD_MOVER(_globals->_player, 87, 338); + break; + case 5: + _globals->_player.flag100(); + setDelay(60); + break; + case 6: + _globals->_sceneManager.changeScene(4000); + break; + } +} +void Scene2400::Action1::dispatch() { + Action::dispatch(); + if ((_actionIndex == 4) && (_globals->_player._percent > 5)) + _globals->_player.changeZoom(_globals->_player._percent - 2); +} + +/*--------------------------------------------------------------------------*/ + +void Scene2400::postInit(SceneObjectList *OwnerList) { + loadScene(2400); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _globals->_player.postInit(); + _globals->_player.setVisage(2410); + _globals->_player.setPosition(Common::Point(340, -10)); + _globals->_player.animate(ANIM_MODE_2, NULL); + _globals->_player.disableControl(); + + setAction(&_action1); + + _globals->_sceneManager._scene->_sceneBounds.centre(_globals->_player._position.x, _globals->_player._position.y); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + _globals->_soundHandler.startSound(153); +} } // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h index 24b3ee3f22..420307ca99 100644 --- a/engines/tsage/ringworld_scenes3.h +++ b/engines/tsage/ringworld_scenes3.h @@ -886,6 +886,20 @@ public: virtual void signal(); }; +class Scene2400: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + virtual void dispatch(); + }; +public: + Action1 _action1; + SceneObject _object; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + } // End of namespace tSage #endif diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index a1dfe0b2ce..40f29e661a 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -164,7 +164,7 @@ void SceneManager::setBackSurface() { if (size > 96000) { if (_globals->_sceneManager._scene->_backgroundBounds.width() <= SCREEN_WIDTH) { // Standard size creation - _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT); + _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT * 3 / 2); _globals->_sceneManager._scrollerRect = Rect(0, 30, SCREEN_WIDTH, SCREEN_HEIGHT - 30); } else { // Wide screen needs extra space to allow for scrolling -- cgit v1.2.3 From b1af59029864710ae66b0890d9208c6b674e0c26 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 22:16:29 +1100 Subject: TSAGE: Corrected bugs in Scene #1400 - Ringworld Wall --- engines/tsage/core.h | 11 ++++++++--- engines/tsage/ringworld_logic.cpp | 2 +- engines/tsage/ringworld_scenes2.cpp | 4 +++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/engines/tsage/core.h b/engines/tsage/core.h index d961f8bdd1..d4c25b1668 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -652,8 +652,9 @@ private: void sortList(Common::Array &ObjList); List _objList; + bool _listAltered; public: - SceneObjectList() {} + SceneObjectList() { _listAltered = false; } virtual Common::String getClassName() { return "SceneObjectList"; } virtual void synchronise(Serialiser &s); @@ -665,7 +666,8 @@ public: typedef void (*EventHandlerFn)(EventHandler *fn); void recurse(EventHandlerFn Fn) { // Loop through each object - for (List::iterator i = _objList.begin(); i != _objList.end(); ) { + _listAltered = false; + for (List::iterator i = _objList.begin(); i != _objList.end() && !_listAltered; ) { SceneObject *o = *i; ++i; Fn(o); @@ -676,7 +678,10 @@ public: bool contains(SceneObject *sceneObj) { return _objList.contains(sceneObj); } void push_back(SceneObject *sceneObj) { _objList.push_back(sceneObj); } void push_front(SceneObject *sceneObj) { _objList.push_front(sceneObj); } - void remove(SceneObject *sceneObj) { _objList.remove(sceneObj); } + void remove(SceneObject *sceneObj) { + _objList.remove(sceneObj); + _listAltered = true; + } }; class ScenePriorities: public List { diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index fa7a6f1f31..9937fa504b 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -65,7 +65,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 1001: return new Scene1001(); // Unused case 1250: return new Scene1250(); - // + // Ringworld Wall case 1400: return new Scene1400(); // Ringworld Space-port case 1500: return new Scene1500(); diff --git a/engines/tsage/ringworld_scenes2.cpp b/engines/tsage/ringworld_scenes2.cpp index b10da21fc3..1d3d0508fc 100644 --- a/engines/tsage/ringworld_scenes2.cpp +++ b/engines/tsage/ringworld_scenes2.cpp @@ -655,7 +655,7 @@ void Scene1250::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 1400 - Arriving at Ringworld + * Scene 1400 - Ringworld Wall * *--------------------------------------------------------------------------*/ @@ -681,7 +681,9 @@ void Scene1400::Action1::signal() { Common::Point pt(160, 100); NpcMover *mover = new NpcMover(); _globals->_player.addMover(mover, &pt, this); + SceneItem::display(0, 0); + setDelay(360); break; } case 3: -- cgit v1.2.3 From 51602483a408bd115d507f6b5ae482f6bf1f527d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Mar 2011 22:46:19 +1100 Subject: TSAGE: Implemented Scene #3500 - Ringworld Scan --- engines/tsage/module.mk | 1 + engines/tsage/ringworld_logic.cpp | 3 ++ engines/tsage/ringworld_scenes4.cpp | 93 +++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes4.h | 58 +++++++++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 engines/tsage/ringworld_scenes4.cpp create mode 100644 engines/tsage/ringworld_scenes4.h diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index dc7667bab7..c3666beb55 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -14,6 +14,7 @@ MODULE_OBJS := \ ringworld_scenes1.o \ ringworld_scenes2.o \ ringworld_scenes3.o \ + ringworld_scenes4.o \ ringworld_scenes8.o \ saveload.o \ scenes.o \ diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 9937fa504b..87231a9dfd 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -30,6 +30,7 @@ #include "tsage/ringworld_scenes1.h" #include "tsage/ringworld_scenes2.h" #include "tsage/ringworld_scenes3.h" +#include "tsage/ringworld_scenes4.h" #include "tsage/ringworld_scenes8.h" namespace tSage { @@ -99,6 +100,8 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 2400: return new Scene2400(); /* Scene group 4 */ + // Ringworld Scan + case 3500: return new Scene3500(); /* Scene group 5 */ diff --git a/engines/tsage/ringworld_scenes4.cpp b/engines/tsage/ringworld_scenes4.cpp new file mode 100644 index 0000000000..eadc86a32f --- /dev/null +++ b/engines/tsage/ringworld_scenes4.cpp @@ -0,0 +1,93 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/config-manager.h" +#include "tsage/ringworld_scenes4.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 3500 - Ringworld Scan + * + *--------------------------------------------------------------------------*/ + +void Scene3500::Action1::signal() { + Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(3500, this); + break; + case 2: + setDelay(3); + break; + case 3: + _globals->_sceneManager.changeScene(9999); + break; + } +} + +void Scene3500::Action2::signal() { + Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(3501, this); + break; + case 2: + setDelay(3); + break; + case 3: + _globals->_sceneManager.changeScene(2012); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene3500::postInit(SceneObjectList *OwnerList) { + loadScene((_globals->_stripNum == 3600) ? 3600 : 3500); + Scene::postInit(); + + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerSText); + + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.top / 160) * 160; + + setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1); +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes4.h b/engines/tsage/ringworld_scenes4.h new file mode 100644 index 0000000000..9795561216 --- /dev/null +++ b/engines/tsage/ringworld_scenes4.h @@ -0,0 +1,58 @@ +/* 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. + * + * $URL: https://scummvm-misc.svn.sourceforge.net/svnroot/scummvm-misc/trunk/engines/tsage/scene_logic.h $ + * $Id: scene_logic.h 232 2011-02-12 11:56:38Z dreammaster $ + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES4_H +#define TSAGE_RINGWORLD_SCENES4_H + +#include "common/scummsys.h" +#include "tsage/core.h" +#include "tsage/converse.h" +#include "tsage/ringworld_logic.h" + +namespace tSage { + +class Scene3500: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; +public: + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerQText _speakerQText; + Action1 _action1; + Action2 _action2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +} // End of namespace tSage + +#endif -- cgit v1.2.3 From 08918b512ef646a7a0e843b793215ab614dec500 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 20 Mar 2011 11:12:11 +1100 Subject: TSAGE: Initial implementation of Scene #3700 - Remote Viewer --- engines/tsage/ringworld_logic.cpp | 2 + engines/tsage/ringworld_scenes4.cpp | 121 ++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes4.h | 33 ++++++++++ 3 files changed, 156 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 87231a9dfd..2eacb2a316 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -102,6 +102,8 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 4 */ // Ringworld Scan case 3500: return new Scene3500(); + // Remote Viewer + case 3700: return new Scene3700(); /* Scene group 5 */ diff --git a/engines/tsage/ringworld_scenes4.cpp b/engines/tsage/ringworld_scenes4.cpp index eadc86a32f..51840154eb 100644 --- a/engines/tsage/ringworld_scenes4.cpp +++ b/engines/tsage/ringworld_scenes4.cpp @@ -90,4 +90,125 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1); } +/*-------------------------------------------------------------------------- + * Scene 3700 - Remote Viewer + * + *--------------------------------------------------------------------------*/ + +Scene3700::Viewer::Viewer() { + _imgList[0] = surfaceFromRes(3705, 1, 1); + for (int idx = 1; idx <= 3; ++idx) + _imgList[idx] = surfaceFromRes(3705, 2, _globals->_randomSource.getRandomNumber(4) + 1); + + _field88 = 1; + _percent = 120; + _field94 = 50; + _field96 = 75; + _field98 = 114; +} + +void Scene3700::Viewer::reposition() { + _bounds = Rect(123, 40, 285, 123); +} + +void Scene3700::Viewer::draw() { + for (int idx = 0; idx < 4; ++idx) { + Rect destRect = _imgList[idx].getBounds(); + destRect.resize(_imgList[idx], (_position.x - _globals->_sceneOffset.x), + (_position.y - _globals->_sceneOffset.y - _yDiff), _percent); + + destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left, + -_globals->_sceneManager._scene->_sceneBounds.top); + + Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1); + _globals->gfxManager().copyFrom(_imgList[idx], destRect, priorityRegion); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene3700::Action1::signal() { + Scene3700 *scene = (Scene3700 *)_globals->_sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + scene->_stripManager.start(2162, this); + break; + case 2: + scene->_viewer._field88 = 0; + setDelay(90); + break; + case 3: + scene->_soundHandler.startSound(196); + scene->_viewer.flag100(); + + scene->_hotspot1.postInit(); + scene->_hotspot1.setVisage(3710); + scene->_hotspot1.setStrip(1); + scene->_hotspot1.setFrame(1); + scene->_hotspot1.setPosition(Common::Point(204, 120)); + + setDelay(90); + break; + case 4: + scene->_soundHandler.startSound(197); + scene->_hotspot1.flag100(); + + scene->_hotspot2.postInit(); + scene->_hotspot2.setVisage(3710); + scene->_hotspot2.setStrip(2); + scene->_hotspot2.setFrame(1); + scene->_hotspot2.setPosition(Common::Point(204, 120)); + + setDelay(30); + break; + case 5: + scene->_soundHandler.startSound(198); + scene->_hotspot2.flag100(); + scene->_hotspot1.unflag100(); + setDelay(90); + break; + case 6: + scene->_stripManager.start(2166, this); + break; + case 7: + setDelay(60); + break; + case 8: + scene->_hotspot1.remove(); + scene->_hotspot2.unflag100(); + _globals->setFlag(59); + setDelay(30); + break; + case 9: + _globals->_sceneManager.changeScene(2100); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene3700::postInit(tSage::SceneObjectList *OwnerList) { + Scene::postInit(); + loadScene(3700); + + _stripManager.addSpeaker(&_speakerSText); + _stripManager.addSpeaker(&_speakerMText); + _stripManager.addSpeaker(&_speakerMR); + _speakerSText.setTextPos(Common::Point(20, 15)); + _speakerMText.setTextPos(Common::Point(20, 15)); + + _viewer.postInit(); + _viewer.setVisage(3705); + _viewer.setStrip(1); + _viewer.setFrame(2); + _viewer.setPosition(Common::Point(195, 83)); + + setAction(&_action1); + _globals->_soundHandler.startSound(195); +} + } // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes4.h b/engines/tsage/ringworld_scenes4.h index 9795561216..10d2cfe7db 100644 --- a/engines/tsage/ringworld_scenes4.h +++ b/engines/tsage/ringworld_scenes4.h @@ -53,6 +53,39 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; +class Scene3700: public Scene { + /* Custom classes */ + class Viewer: public SceneObject { + public: + GfxSurface _imgList[4]; + int _field88; + int _percent; + int _field94; + int _field96; + int _field98; + + Viewer(); + virtual void reposition(); + virtual void draw(); + }; + + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; +public: + Viewer _viewer; + Action _action1; + SceneObject _hotspot1, _hotspot2; + SpeakerSText _speakerSText; + SpeakerMText _speakerMText; + SpeakerMR _speakerMR; + SoundHandler _soundHandler; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + } // End of namespace tSage #endif -- cgit v1.2.3 From 1c6d46ce834f4d114ef0b74eca854fee93da0b8e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 20 Mar 2011 20:26:09 +1100 Subject: TSAGE: Added new speaker classes --- engines/tsage/ringworld_logic.cpp | 126 ++++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_logic.h | 44 +++++++++++++ 2 files changed, 170 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 2eacb2a316..ba8df21589 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -31,6 +31,7 @@ #include "tsage/ringworld_scenes2.h" #include "tsage/ringworld_scenes3.h" #include "tsage/ringworld_scenes4.h" +#include "tsage/ringworld_scenes5.h" #include "tsage/ringworld_scenes8.h" namespace tSage { @@ -106,6 +107,8 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 3700: return new Scene3700(); /* Scene group 5 */ + // Village + case 4000: return new Scene4000(); /* Scene group 6 */ @@ -429,6 +432,26 @@ SpeakerSKText::SpeakerSKText(): ScreenSpeaker() { /*--------------------------------------------------------------------------*/ +SpeakerPText::SpeakerPText() { + _speakerName = "PTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTRE; + _colour1 = 5; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFText::SpeakerCHFText() { + _speakerName = "SpeakerCHFText"; + _textWidth = 240; + _textMode = ALIGN_CENTRE; + _colour1 = 56; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + SpeakerSKL::SpeakerSKL(): AnimatedSpeaker() { _speakerName = "SKL"; _newSceneNumber = 7011; @@ -744,4 +767,107 @@ void SpeakerML::setText(const Common::String &msg) { Speaker::setText(msg); } +/*--------------------------------------------------------------------------*/ + +SpeakerCHFL::SpeakerCHFL() { + _speakerName = "CHFL"; + _newSceneNumber = 4111; + _textPos = Common::Point(10, 40); + _colour1 = 56; +} + +void SpeakerCHFL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4113); + _object1.setStrip2(2); + _object1.setPriority2(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(205, 116)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4113); + _object2.setStrip2(1); + _object2.setPriority2(255); + _object2._frame = 1; + _object2.setPosition(Common::Point(202, 71)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerCHFR::SpeakerCHFR() { + _speakerName = "CHFR"; + _newSceneNumber = 4110; + _textPos = Common::Point(160, 40); + _colour1 = 56; +} + +void SpeakerCHFR::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4112); + _object1.setStrip2(2); + _object1.setPriority2(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(103, 116)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4112); + _object2.setStrip2(1); + _object2.setPriority2(255); + _object2._frame = 1; + _object2.setPosition(Common::Point(106, 71)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerPL::SpeakerPL() { + _speakerName = "PL"; + _newSceneNumber = 4060; + _textPos = Common::Point(160, 40); + _colour1 = 5; +} + +void SpeakerPL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(4062); + _object1.setStrip2(2); + _object1.setPriority2(255); + _object1.changeZoom(100); + _object1._frame = 1; + _object1.setPosition(Common::Point(107, 117)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(4062); + _object2.setStrip2(1); + _object2.setPriority2(200); + _object2._frame = 1; + _object2.setPosition(Common::Point(105, 62)); + _object2.setAction(&_speakerAction, NULL); + + _object3.postInit(&_objectList); + _object3.setVisage(4062); + _object3.setStrip2(3); + _object3.setPriority2(255); + _object3._frame = 1; + _object3.setPosition(Common::Point(105, 59)); + _object3.setAction(&_speakerAction2, NULL); + + Speaker::setText(msg); +} + +void SpeakerPL::removeText() { + _object3.remove(); + AnimatedSpeaker::removeText(); +} + } // End of namespace tSage diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h index 012ba8b2ba..24970e5b7d 100644 --- a/engines/tsage/ringworld_logic.h +++ b/engines/tsage/ringworld_logic.h @@ -182,6 +182,20 @@ public: virtual Common::String getClassName() { return "SpeakerHText"; } }; +class SpeakerPText: public ScreenSpeaker { +public: + SpeakerPText(); + + virtual Common::String getClassName() { return "SpeakerPText"; } +}; + +class SpeakerCHFText: public ScreenSpeaker { +public: + SpeakerCHFText(); + + virtual Common::String getClassName() { return "SpeakerCHFText"; } +}; + class SpeakerSKText: public ScreenSpeaker { public: SpeakerSKText(); @@ -271,6 +285,36 @@ public: virtual void setText(const Common::String &msg); }; +class SpeakerCHFL: public AnimatedSpeaker { +public: + SpeakerCHFL(); + + virtual Common::String getClassName() { return "SpeakerCHFL"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerCHFR: public AnimatedSpeaker { +public: + SpeakerCHFR(); + + virtual Common::String getClassName() { return "SpeakerCHFR"; } + virtual void setText(const Common::String &msg); +}; + +class SpeakerPL: public AnimatedSpeaker { +public: + SceneObject _object3; + SpeakerAction _speakerAction2; + + SpeakerPL(); + + virtual Common::String getClassName() { return "SpeakerPL"; } + virtual void setText(const Common::String &msg); + virtual void removeText(); +}; + + + } // End of namespace tSage #endif -- cgit v1.2.3 From 09fc6d6ee46ed43fd8e53ea68489d04333d1d04a Mon Sep 17 00:00:00 2001 From: strangerke Date: Wed, 16 Mar 2011 21:28:13 +0100 Subject: TSAGE: Implement scene7600 --- engines/tsage/ringworld_logic.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index ba8df21589..7be4213de7 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -413,6 +413,15 @@ SpeakerEText::SpeakerEText() { /*--------------------------------------------------------------------------*/ +SpeakerEText::SpeakerEText() { + _speakerName = "ETEXT"; + _textPos = Common::Point(20, 20); + _colour1 = 22; + _hideObjects = false; +} + +/*--------------------------------------------------------------------------*/ + SpeakerHText::SpeakerHText() { _speakerName = "HTEXT"; _textPos = Common::Point(160, 40); -- cgit v1.2.3 From 2b22b9e8fb61549c50df489f5144c08b9465e6b9 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 19 Mar 2011 00:05:38 +0100 Subject: TSAGE: Scene 7000 (imperfect) --- engines/tsage/ringworld_logic.cpp | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 7be4213de7..f039474514 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -441,6 +441,46 @@ SpeakerSKText::SpeakerSKText(): ScreenSpeaker() { /*--------------------------------------------------------------------------*/ +SpeakerSKL::SpeakerSKL(): AnimatedSpeaker() { + _speakerName = "SKL"; + _newSceneNumber = 7011; + _textPos = Common::Point(10, 30); + _colour1 = 10; +} + +void SpeakerSKL::setText(const Common::String &msg) { + _object1.postInit(&_objectList); + _object1.setVisage(7013); + _object1.setStrip2(2); + _object1._frame = 1; + _object1.setPriority2(255); + _object1.changeZoom(100); + _object1.setPosition(Common::Point(203, 120)); + _object1.animate(ANIM_MODE_7, 0, NULL); + + _object2.postInit(&_objectList); + _object2.setVisage(7013); + _object2.setStrip2(1); + _object2.setPriority2(255); + _object2.changeZoom(100); + _object2._frame = 1; + _object2.setPosition(Common::Point(197, 80)); + _object2.setAction(&_speakerAction, NULL); + + Speaker::setText(msg); +} +/*--------------------------------------------------------------------------*/ + +SpeakerSKText::SpeakerSKText(): ScreenSpeaker() { + _speakerName = "SKTEXT"; + _textWidth = 240; + _textMode = ALIGN_CENTRE; + _colour1 = 9; + _hideObjects = false; +}; + +/*--------------------------------------------------------------------------*/ + SpeakerPText::SpeakerPText() { _speakerName = "PTEXT"; _textWidth = 240; -- cgit v1.2.3 From efaa811d4211bfd0554152c4921cf2ef33b98693 Mon Sep 17 00:00:00 2001 From: strangerke Date: Mon, 21 Mar 2011 08:06:18 +0100 Subject: TSAGE: Add some comments about Scenes in group #8 --- engines/tsage/ringworld_logic.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index f039474514..67297527bc 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -113,9 +113,13 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 6 */ /* Scene group 8 */ + // Scene 7000: Landing case 7000: return new Scene7000(); + // Scene 7100: swimming under water case 7100: return new Scene7100(); + // Scene 7200: Entering the underwater cave case 7200: return new Scene7200(); + // Scene 7300: Discussion with Lord Poria case 7300: return new Scene7300(); case 7600: return new Scene7600(); -- cgit v1.2.3 From b2ce645c1e3e501c36b460ff2049b5cb989ddfa1 Mon Sep 17 00:00:00 2001 From: strangerke Date: Mon, 21 Mar 2011 08:33:55 +0100 Subject: TSAGE: Cleanup after git merge epic failure --- engines/tsage/ringworld_logic.cpp | 49 --------------------------------------- 1 file changed, 49 deletions(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 67297527bc..42a01024a7 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -417,15 +417,6 @@ SpeakerEText::SpeakerEText() { /*--------------------------------------------------------------------------*/ -SpeakerEText::SpeakerEText() { - _speakerName = "ETEXT"; - _textPos = Common::Point(20, 20); - _colour1 = 22; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - SpeakerHText::SpeakerHText() { _speakerName = "HTEXT"; _textPos = Common::Point(160, 40); @@ -475,16 +466,6 @@ void SpeakerSKL::setText(const Common::String &msg) { } /*--------------------------------------------------------------------------*/ -SpeakerSKText::SpeakerSKText(): ScreenSpeaker() { - _speakerName = "SKTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTRE; - _colour1 = 9; - _hideObjects = false; -}; - -/*--------------------------------------------------------------------------*/ - SpeakerPText::SpeakerPText() { _speakerName = "PTEXT"; _textWidth = 240; @@ -505,36 +486,6 @@ SpeakerCHFText::SpeakerCHFText() { /*--------------------------------------------------------------------------*/ -SpeakerSKL::SpeakerSKL(): AnimatedSpeaker() { - _speakerName = "SKL"; - _newSceneNumber = 7011; - _textPos = Common::Point(10, 30); - _colour1 = 10; -} - -void SpeakerSKL::setText(const Common::String &msg) { - _object1.postInit(&_objectList); - _object1.setVisage(7013); - _object1.setStrip2(2); - _object1._frame = 1; - _object1.setPriority2(255); - _object1.changeZoom(100); - _object1.setPosition(Common::Point(203, 120)); - _object1.animate(ANIM_MODE_7, 0, NULL); - - _object2.postInit(&_objectList); - _object2.setVisage(7013); - _object2.setStrip2(1); - _object2.setPriority2(255); - _object2.changeZoom(100); - _object2._frame = 1; - _object2.setPosition(Common::Point(197, 80)); - _object2.setAction(&_speakerAction, NULL); - - Speaker::setText(msg); -} -/*--------------------------------------------------------------------------*/ - SpeakerQL::SpeakerQL(): AnimatedSpeaker() { _speakerName = "QL"; _newSceneNumber = 2610; -- cgit v1.2.3 From 1827c7e7421d35f2a95bb2c9a50939c14547a9c6 Mon Sep 17 00:00:00 2001 From: strangerke Date: Fri, 25 Mar 2011 23:28:19 +0100 Subject: TSAGE: Implement Scene 7700 --- engines/tsage/core.h | 21 + engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes1.cpp | 2 +- engines/tsage/ringworld_scenes8.cpp | 916 ++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes8.h | 180 +++++++ engines/tsage/staticres.cpp | 2 +- engines/tsage/staticres.h | 2 +- 7 files changed, 1121 insertions(+), 3 deletions(-) diff --git a/engines/tsage/core.h b/engines/tsage/core.h index d4c25b1668..955331c557 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -406,6 +406,7 @@ public: bool contains(const Common::Point &pt); void setBounds(const Rect &newBounds) { _bounds = newBounds; } + void setBounds(const int ys, const int xe, const int ye, const int xs) { _bounds = Rect(MIN(xs, xe), MIN(ys, ye), MAX(xs, xe), MAX(ys, ye)); } static void display(int resNum, int lineNum, ...); static void display2(int resNum, int lineNum) { display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); @@ -420,6 +421,14 @@ public: virtual void doAction(int action); }; +class SceneHotspot_2: public SceneHotspot { +public: + int _field26, _field28; + SceneHotspot_2(): SceneHotspot() {} + + virtual Common::String getClassName() { return "SceneHotspot2"; } +}; + enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8}; @@ -552,6 +561,18 @@ public: virtual Common::String getClassName() { return "SceneObjectExt"; } }; +class SceneObject3: public SceneObjectExt { +public: + int _field88, _field8A; + + virtual void synchronise(Serialiser &s) { + SceneObject::synchronise(s); + s.syncAsSint16LE(_field88); + s.syncAsSint16LE(_field8A); + } + virtual Common::String getClassName() { return "SceneObject3"; } +}; + class SceneText: public SceneObject { public: int _fontNumber; diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 42a01024a7..7c3b855361 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -122,6 +122,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { // Scene 7300: Discussion with Lord Poria case 7300: return new Scene7300(); case 7600: return new Scene7600(); + case 7700: return new Scene7700(); /* Scene group 10 */ diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index b156b8961f..0b7efbaca4 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -2378,7 +2378,7 @@ void Scene60::signal() { _globals->_player._uiEnabled = true; _globals->_events.setCursor(CURSOR_USE); - _gfxButton.setText(SCENE60_EXIT_MSG); + _gfxButton.setText(SCENE_EXIT_MSG); _gfxButton._bounds.centre(160, 193); _gfxButton.draw(); _gfxButton._bounds.expandPanes(); diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 3e620652fc..dedbda65ff 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -23,6 +23,7 @@ * */ +#include "graphics/cursorman.h" #include "tsage/ringworld_scenes8.h" #include "tsage/scenes.h" #include "tsage/tsage.h" @@ -1582,4 +1583,919 @@ void Scene7600::postInit(SceneObjectList *OwnerList) { _soundHandler2.startSound(255); _soundHandler1.startSound(251); } + +/*-------------------------------------------------------------------------- + * Scene 7700 + * + *--------------------------------------------------------------------------*/ + +void Scene7700::Action1::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + warning("TODO: Scene7700::Action1::signal - Find the SceneObject behind _fmt"); + + switch (_actionIndex++) { + case 0: { + PlayerMover *mover1 = new PlayerMover(); +// Common::Point pt = Common::Point(_fmt._position.x, _fmt._position.y + 30); + Common::Point pt = Common::Point(scene->_object1._position.x, scene->_object1._position.y + 30); + _globals->_player.addMover(mover1, &pt, this); + break; + } + case 1: +// _globals->_player.checkAngle(&_fmt); + _globals->_player.checkAngle(&scene->_object1); + if (_globals->_player._field8C == 0) +// _fmt.animate(ANIM_MODE_5, this); + scene->_object1.animate(ANIM_MODE_5, this); + else +// _fmt.animate(ANIM_MODE_6, this); + scene->_object1.animate(ANIM_MODE_6, this); + break; + case 2: + remove(); + break; + } +} + +void Scene7700::Action2::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + case 2: + setDelay(_globals->_randomSource.getRandomNumber(60) + 60); + break; + case 1: + scene->_prof.animate(ANIM_MODE_7, 0, 0); + setDelay(20); + break; + case 3: + scene->_prof.animate(ANIM_MODE_6, this); + _actionIndex = 0; + break; + } +} + +void Scene7700::Action3::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + scene->_object15.animate(ANIM_MODE_5, this); + break; + case 1: + scene->_sceneItem10.remove(); + scene->_object15.remove(); + scene->_sceneHotspot8.remove(); + scene->_sceneHotspot9.remove(); + scene->_object19.remove(); + setDelay(60); + // No break on purpose! + case 2: + scene->_soundHandler.startSound(260, 0, 127); + scene->_object8.setVisage(7703); + scene->_object8.setPosition(Common::Point(177, 97), 0); + scene->_object8.setStrip2(3); + scene->_object8.animate(ANIM_MODE_5, this); + scene->_object8._numFrames = 3; + break; + case 3: + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene7700::Action4::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 2: + scene->_object13.remove(); + // No break on purpose! + case 0: + setDelay(3); + break; + case 1: + CursorMan.showMouse(false); + scene->_object13.postInit(); + scene->_object13.setVisage(7700); + scene->_object13.setStrip2(7); + scene->_object13.setPosition(Common::Point(151, 33), 0); + scene->_object13.animate(ANIM_MODE_5, this); + break; + case 3: + CursorMan.showMouse(true); + SceneItem::display(7700, 11, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + _globals->_player.enableControl(); + remove(); + break; + } +} + +void Scene7700::Action5::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + setDelay(_globals->_randomSource.getRandomNumber(240)); + break; + case 1: { + scene->_object16.setFrame(_globals->_randomSource.getRandomNumber(1) + 1); + scene->_object16.setPosition(Common::Point(133, 145 + _globals->_randomSource.getRandomNumber(54)), 0); + + Common::Point pt(360, scene->_object16._position.y); + NpcMover *mover = new NpcMover(); + scene->_object16.addMover(mover, &pt, this); + _actionIndex = 0; + break; + } + } +} + +void Scene7700::Action6::signal() { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + switch (_actionIndex++) { + case 0: + setDelay(5); + break; + case 1: { + Common::Point pt(2, 66); + NpcMover *mover = new NpcMover(); + scene->_object17.addMover(mover, &pt, this); + break; + } + case 2: + scene->_object17.setStrip(2); + scene->_object17.setPosition(Common::Point(43, 65), 0); + + scene->_object18.postInit(); + scene->_object18.setVisage(7708); + scene->_object18.setStrip(3); + scene->_object18.setPosition(Common::Point(116, 54), 0); + scene->_object18.animate(ANIM_MODE_2, 0); + + setDelay(120); + break; + case 3: + scene->_object17.remove(); + scene->_object18.remove(); + remove(); + break; + } +} + +void Scene7700::SceneHotspot1::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display(7700, 4, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + else + SceneHotspot::doAction(action); +} + +void Scene7700::SceneHotspot2::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display(7700, 6, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + else + SceneHotspot::doAction(action); +} + +void Scene7700::SceneHotspot3::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_KEY: + SceneItem::display(7702, 3, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + _globals->_inventory._emptyJar._sceneNumber = 7700; + break; + case CURSOR_LOOK: + if (_globals->_inventory._emptyJar._sceneNumber == 7700) + scene->setAction(&scene->_action4, 0); + else + SceneItem::display(7700, 53, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (!_globals->getFlag(78)) { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, 0); + } else if (_globals->_inventory._emptyJar._sceneNumber == 7700) { + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager, scene, 7705, &_globals->_player, 0); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot4::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, 12, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (!_globals->getFlag(78)) { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, 0); + } else if (_globals->_inventory._emptyJar._sceneNumber == 7700) { + SceneItem::display(7700, 12, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot5::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, 28, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (!_globals->getFlag(78)) { + if (_globals->_inventory._paper._sceneNumber == 7700) { + _globals->_player.disableControl(); + scene->_sceneMode = 7708; + scene->setAction(&scene->_sequenceManager, scene, 7708, &_globals->_player, 0); + } + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, 0); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot6::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, 43, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + SceneItem::display(7700, 56, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneItem7::doAction(int action) { + if (action == CURSOR_LOOK) + SceneItem::display(7700, 51, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); +} + +void Scene7700::SceneHotspot8::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, 48, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + scene->_sceneMode = 7709; + scene->_soundHandler.startSound(259, 0, 127); + scene->_object15.setFrame(scene->_object15.getFrameCount()); + scene->_object15.animate(ANIM_MODE_6, scene); + if ((scene->_field977 == 2) && (scene->_field97B == 0)) { + scene->_field979++; + } else { + scene->_field97B = 0; + scene->_field979 = 0; + scene->_field977 = 0; + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneHotspot9::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, 48, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + scene->_sceneMode = 7709; + scene->_soundHandler.startSound(259, 0, 127); + scene->_object15.setFrame(1); + scene->_object15.animate(ANIM_MODE_5, scene); + if (scene->_field977 > 2) { + scene->_field97B = 0; + scene->_field979 = 0; + scene->_field977 = 0; + } + + if (scene->_field979 != 0) { + if (scene->_field979 != 4) { + scene->_field97B = 0; + scene->_field979 = 0; + scene->_field977 = 0; + } else { + scene->_field97B++; + if (scene->_field97B == 3) { + _globals->_player.disableControl(); + scene->setAction(&scene->_action3); + } + } + } else { + scene->_field977++; + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::SceneItem10::doAction(int action) { +} + +void Scene7700::Object1::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display(7700, _field88, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else if (action == CURSOR_USE) { + if (_globals->getFlag(78)) { + _globals->_player.disableControl(); + scene->setAction(&scene->_action1, this); + } else { + scene->_sceneMode = 7715; + scene->setAction(&scene->_sequenceManager, scene, 7715, 0); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::SceneHotspot11::doAction(int action) { + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, _field28, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + SceneItem::display(7701, _field26, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::Object1::signal() { + if (_state == 0) { + _state = 1; + SceneItem::display(7701, _field8A, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else { + _state = 0; + } + _globals->_player.enableControl(); +} + +void Scene7700::Object3::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display(7700, 34, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else if (action == CURSOR_USE) { + if (_globals->getFlag(78)) { + if (scene->_object3._frame == 1) { + _globals->_player.disableControl(); + scene->_sceneMode = 7707; + scene->setAction(&scene->_sequenceManager, scene, 7707, &_globals->_player, this, 0); + } else { + SceneItem::display(7700, 60, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, 0); + } + } +} + +void Scene7700::Object7::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + if (_globals->getFlag(78)) + SceneItem::display(7700, 45, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + else + SceneItem::display(7700, 44, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (_globals->getFlag(78)) { + SceneItem::display(7701, 41, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7714, 0); + } + break; + case CURSOR_TALK: + if (_globals->getFlag(78)) { + SceneItem::display(7702, 1, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else { + _globals->_player.disableControl(); + if (_state == 0) { + _state = 1; + scene->_sceneMode = 7703; + scene->setAction(&scene->_sequenceManager, scene, 7703, 0); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7712, 0); + } + } + break; + case OBJECT_STUNNER: + if (!_globals->getFlag(78)) { + _globals->_soundHandler.proc3(); + _globals->setFlag(78); + setAction(0); + _globals->_player.disableControl(); + scene->_sceneMode = 7704; + scene->setAction(&scene->_sequenceManager, scene, 7704, &_globals->_player, this, 0); + } + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene7700::Object8::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) { + if (_strip == 3) { + scene->_object9.postInit(); + scene->_object9.setVisage(7701); + scene->_object9.setStrip2(3); + scene->_object9.setPosition(Common::Point(91, 166), 0); + scene->_object9.setPriority2(200); + + scene->_object14.postInit(); + scene->_object14.setVisage(7701); + scene->_object14.setStrip(2); + scene->_object14.setPriority2(250); + scene->_object14.setPosition(Common::Point(139, 151), 0); + + scene->_gfxButton.setText(SCENE_EXIT_MSG); + scene->_gfxButton._bounds.centre(140, 189); + scene->_gfxButton.draw(); + scene->_gfxButton._bounds.expandPanes(); + + _globals->_sceneItems.push_front(&scene->_object10); + _globals->_sceneItems.push_front(&scene->_object9); + _globals->_player._canWalk = false; + } else { + scene->_object15.postInit(); + scene->_object15.setVisage(7701); + scene->_object15.setPosition(Common::Point(140, 165), 0); + scene->_object15.setPriority2(200); + + scene->_gfxButton.setText(SCENE_EXIT_MSG); + scene->_gfxButton._bounds.centre(140, 186); + scene->_gfxButton.draw(); + scene->_gfxButton._bounds.expandPanes(); + + scene->_object19.postInit(); + scene->_object19.setVisage(7700); + scene->_object19.setStrip(6); + scene->_object19.setPosition(Common::Point(140, 192), 0); + + _globals->_sceneItems.push_front(&scene->_object10); + _globals->_sceneItems.push_front(&scene->_object8); + _globals->_sceneItems.push_front(&scene->_object9); + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player._canWalk = false; + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object9::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display(7700, 49, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + SceneItem::display(7701, 42, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_TALK: + SceneItem::display(7702, 4, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case OBJECT_KEY: + if (_frame == 1) { + if (!_globals->getFlag(80)) { + scene->_object10.postInit(); + scene->_object10.setVisage(7701); + scene->_object10.setStrip(4); + scene->_object10.setPosition(Common::Point(159, 136)); + _globals->_sceneItems.push_front(&scene->_object10); + scene->_object10.setPriority2(240); + } + scene->_soundHandler.startSound(262, 0, 127); + scene->_object14.animate(ANIM_MODE_5, 0); + } + _globals->_events.setCursor(CURSOR_WALK); + break; + default: + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object10::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display(7700, 50, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else if (action == CURSOR_USE) { + _globals->setFlag(80); + scene->_sceneItem10.remove(); + scene->_gfxButton._bounds.expandPanes(); + scene->_object14.remove(); + scene->_object9.remove(); + remove(); + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object11::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + switch (action) { + case OBJECT_SCANNER: + if (_frame != 1) + SceneItem::display(7701, 44, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + else + SceneItem::doAction(action); + break; + case CURSOR_LOOK: + if (_frame != 1) + SceneItem::display(7700, 9, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + else + SceneItem::display(7700, 52, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (_frame != 1) { + SceneItem::display(7701, 8, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else { + _globals->setFlag(49); + _globals->_player.disableControl(); + scene->_sceneMode = 7706; + scene->setAction(&scene->_sequenceManager, scene, 7706, &_globals->_player, this, NULL); + } + break; + case OBJECT_EMPTY_JAR: + _globals->_inventory._emptyJar._sceneNumber = 0; + _globals->_inventory._jar._sceneNumber = 1; + _globals->_player.disableControl(); + scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, this, NULL); + break; + default: + SceneHotspot::doAction(action); + } +} + +void Scene7700::Object12::doAction(int action) { + Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; + + if (action == CURSOR_LOOK) { + SceneItem::display(7700, 15, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + } else if (action == CURSOR_USE) { + if (_globals->getFlag(78)) { + scene->_sceneMode = 7713; + scene->setAction(&scene->_sequenceManager, scene, 7713, &_globals->_player, NULL); + } else { + scene->_sceneMode = 7712; + scene->setAction(&scene->_sequenceManager, scene, 7715, NULL); + } + } else { + SceneHotspot::doAction(action); + } +} + +void Scene7700::signal() { + switch (_sceneMode) { + case 7701: + _globals->_player.setPriority2(-1); + _globals->_player.setStrip2(-1); + if (_globals->getFlag(78)) { + _globals->_player.enableControl(); + } else { + _sceneMode = 7711; + setAction(&_sequenceManager, this, 7711, 0); + } + break; + case 7702: + _soundHandler.proc1(0); + _globals->_sceneManager.changeScene(7600); + break; + case 7703: + case 7706: + case 7707: + case 7711: + case 7712: + _globals->_player.enableControl(); + break; + case 7704: + _globals->_soundHandler.startSound(256, 0, 127); + _prof.setStrip2(4); + _prof.setFrame2(1); + _prof.setPosition(Common::Point(159, 87), 0); + _globals->_player.enableControl(); + break; + case 7705: + case 7708: + _globals->_inventory._key._sceneNumber = 1; + _globals->_player.enableControl(); + break; + case 7709: + _globals->_events.setCursor(CURSOR_USE); + break; + case 7710: + _globals->_player.enableControl(); + SceneItem::display(7700, 62, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case 7013: + _object12.remove(); + _globals->_inventory._emptyJar._sceneNumber = 1; + break; + default: + break; + } +} + +void Scene7700::process(Event &event) { + Scene::process(event); + + if (_globals->_sceneItems.contains(&_sceneItem10)) { + if (_gfxButton.process(event)) { + _sceneItem10.remove(); + _sceneHotspot15.remove(); + _sceneHotspot9.remove(); + if (_globals->_sceneObjects->contains(&_object10)) + _object10.remove(); + if (_globals->_sceneObjects->contains(&_object14)) + _object14.remove(); + _object19.remove(); + _gfxButton._bounds.expandPanes(); + _globals->_player._canWalk = true; + } + } + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_p)) { + event.handled = true; + if (!_globals->_sceneObjects->contains(&_object17)) { + _object17.postInit(); + _object17.setVisage(7708); + _object17.setPosition(Common::Point(163, 50), 0); + _object17.setPriority2(1); + _object17.animate(ANIM_MODE_2, 0); + _object17.setAction(&_action6); + } + } +} + +void Scene7700::dispatch() { + if ((_globals->_sceneRegions.indexOf(_globals->_player._position) == 6) || (_globals->_player._position.x < 10)) + _globals->_player.changeZoom(100 - ((_globals->_player._position.y - 68) / 2)); + else + _globals->_player.changeZoom(-1); + + if ((_action == 0) && (_globals->_sceneRegions.indexOf(_globals->_player._position) == 30)) { + _globals->_player.disableControl(); + _sceneMode = 7702; + setAction(&_sequenceManager, this, 7702, &_globals->_player, 0); + } + Scene::dispatch(); +} + +void Scene7700::postInit(SceneObjectList *OwnerList) { + loadScene(7700); + Scene::postInit(); + setZoomPercents(100, 80, 200, 100); + _globals->setFlag(53); + _field97B = 0; + _field979 = 0; + _field977 = 0; + + _stripManager.addSpeaker(&_speakerEText); + _stripManager.addSpeaker(&_speakerQText); + _speakerQText._npc = &_globals->_player; + _speakerEText._npc = &_prof; + + _globals->_player.postInit(); + _globals->_player.setVisage(4201); + _globals->_player.animate(ANIM_MODE_1, 0); + SceneObjectWrapper *wrapper = new SceneObjectWrapper(); + _globals->_player.setObjectWrapper(wrapper); + _globals->_player.setPosition(Common::Point(-19, 68), 0); + _globals->_player.setStrip2(7); + _globals->_player.setPriority2(95); + _globals->_player.changeZoom(80); + _globals->_player._moveDiff.x = 6; + _globals->_player._moveDiff.y = 3; + _globals->_player.disableControl(); + + _prof.postInit(); + _prof.setVisage(7706); + + if (_globals->getFlag(78)) { + _prof.setStrip2(4); + _prof.setPriority2(80); + _prof.setPosition(Common::Point(159, 87), 0); + } else { + _prof.setPosition(Common::Point(203, 87), 0); + _prof.setStrip2(2); + _prof._numFrames = 6; + _prof.setAction(&_action2); + } + + _object16.postInit(); + _object16.setVisage(7700); + _object16.setStrip2(5); + _object16.setPriority2(1); + _object16.setPosition(Common::Point(133, 160), 0); + _object16._moveDiff.x = 1; + _object16._field7A = 7; + _object16.setAction(&_action5); + + _object1.postInit(); + _object1.setVisage(7700); + _object1.setPosition(Common::Point(184, 61), 0); + _object1._field88 = 18; + _object1._field8A = 16; + + _object2.postInit(); + _object2.setVisage(7700); + _object2.setPosition(Common::Point(184, 70), 0); + _object2.setPriority2(60); + _object2._field88 = 19; + _object2._field8A = 17; + + _object3.postInit(); + _object3.setVisage(7703); + _object3.setPosition(Common::Point(288, 36), 0); + _object3.setStrip(2); + + _object4.postInit(); + _object4.setVisage(7700); + _object4.setPosition(Common::Point(268, 59), 0); + _object4.setStrip(2); + _object4._field88 = 37; + _object4._field8A = 35; + + _object5.postInit(); + _object5.setVisage(7700); + _object5.setPosition(Common::Point(268, 67), 0); + _object5.setPriority2(58); + _object5.setStrip2(3); + _object5._field88 = 38; + _object5._field8A = 36; + + _object6.postInit(); + _object6.setVisage(7700); + _object6.setPosition(Common::Point(268, 75), 0); + _object6.setPriority2(57); + _object6.setStrip2(4); + _object6._field88 = 40; + _object6._field8A = 43; + + _object8.postInit(); + _object8.setVisage(7703); + _object8.setPosition(Common::Point(203, 91), 0); + _object8.setStrip2(4); + _object8.setPriority2(86); + + _sceneHotspot8.setBounds(82, 141, 161, 92); + _sceneHotspot9.setBounds(82, 187, 161, 141); + + _object11.postInit(); + _object11.setVisage(7703); + _object11.setPosition(Common::Point(32, 128), 0); + + if (_globals->getFlag(49)) + _object11.setFrame(_object11.getFrameCount()); + + if (_globals->_inventory._emptyJar._sceneNumber == 7700) { + _object12.postInit(); + _object12.setVisage(7700); + _object12.setStrip(8); + _object12.setPosition(Common::Point(189, 48), 0); + _globals->_sceneItems.addItems(&_object12, NULL); + } + _sceneHotspot1._sceneRegionId = 28; + _sceneHotspot2._sceneRegionId = 6; + _sceneHotspot3._sceneRegionId = 10; + _sceneHotspot4._sceneRegionId = 11; + _sceneHotspot5._sceneRegionId = 9; + _sceneHotspot6._sceneRegionId = 7; + + _sceneItem7.setBounds(0, 320, 200, 0); + _sceneItem10.setBounds(0, 320, 200, 0); + + _sceneHotspot11._sceneRegionId = 57; + _sceneHotspot11._field26 = 0; + _sceneHotspot11._field28 = 0; + _sceneHotspot12._sceneRegionId = 2; + _sceneHotspot12._field26 = 2; + _sceneHotspot12._field28 = 2; + _sceneHotspot13._sceneRegionId = 12; + _sceneHotspot13._field26 = 3; + _sceneHotspot13._field28 = 3; + _sceneHotspot14._sceneRegionId = 18; + _sceneHotspot14._field26 = 4; + _sceneHotspot14._field28 = 5; + _sceneHotspot15.setBounds(0, 55, 50, 8); + _sceneHotspot15._field26 = 6; + _sceneHotspot15._field28 = 7; + _sceneHotspot16.setBounds(0, 130, 34, 103); + _sceneHotspot16._field26 = 8; + _sceneHotspot16._field28 = 9; + _sceneHotspot17.setBounds(41, 180, 46, 170); + _sceneHotspot17._field26 = 11; + _sceneHotspot17._field28 = 13; + _sceneHotspot18.setBounds(38, 187, 46, 180); + _sceneHotspot18._field26 = 12; + _sceneHotspot18._field28 = 14; + _sceneHotspot19._sceneRegionId = 3; + _sceneHotspot19._field26 = 14; + _sceneHotspot19._field28 = 16; + _sceneHotspot20._sceneRegionId = 14; + _sceneHotspot20._field26 = 15; + _sceneHotspot20._field28 = 17; + _sceneHotspot21.setBounds(9, 215, 26, 210); + _sceneHotspot21._field26 = 18; + _sceneHotspot21._field28 = 20; + _sceneHotspot22.setBounds(10, 221, 26, 215); + _sceneHotspot22._field26 = 19; + _sceneHotspot22._field28 = 21; + _sceneHotspot23.setBounds(6, 230, 26, 225); + _sceneHotspot23._field26 = 20; + _sceneHotspot23._field28 = 22; + _sceneHotspot24._sceneRegionId = 13; + _sceneHotspot24._field26 = 21; + _sceneHotspot24._field28 = 23; + _sceneHotspot25._sceneRegionId = 21; + _sceneHotspot25._field26 = 22; + _sceneHotspot25._field28 = 24; + _sceneHotspot26._sceneRegionId = 19; + _sceneHotspot26._field26 = 23; + _sceneHotspot26._field28 = 25; + _sceneHotspot27._sceneRegionId = 27; + _sceneHotspot27._field26 = 24; + _sceneHotspot27._field28 = 26; + _sceneHotspot28._sceneRegionId = 15; + _sceneHotspot28._field26 = 25; + _sceneHotspot28._field28 = 27; + _sceneHotspot29._sceneRegionId = 26; + _sceneHotspot29._field26 = 27; + _sceneHotspot29._field28 = 29; + _sceneHotspot30.setBounds(0, 317, 34, 310); + _sceneHotspot30._field26 = 28; + _sceneHotspot30._field28 = 30; + _sceneHotspot31._sceneRegionId = 17; + _sceneHotspot31._field26 = 29; + _sceneHotspot31._field28 = 31; + _sceneHotspot32._sceneRegionId = 25; + _sceneHotspot32._field26 = 30; + _sceneHotspot32._field28 = 32; + _sceneHotspot33._sceneRegionId = 5; + _sceneHotspot33._field26 = 31; + _sceneHotspot33._field28 = 33; + _sceneHotspot34.setBounds(42, 292, 48, 281); + _sceneHotspot34._field26 = 32; + _sceneHotspot34._field28 = 35; + _sceneHotspot35._sceneRegionId = 24; + _sceneHotspot35._field26 = 38; + _sceneHotspot35._field28 = 41; + _sceneHotspot36._sceneRegionId = 1; + _sceneHotspot36._field26 = 39; + _sceneHotspot36._field28 = 42; + + _globals->_sceneItems.addItems(&_prof, &_sceneHotspot35, &_object8, &_sceneHotspot34, &_sceneHotspot33, &_sceneHotspot32, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot31, &_sceneHotspot30, &_sceneHotspot29, &_sceneHotspot5, &_sceneHotspot28, &_sceneHotspot27, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot26, &_sceneHotspot25, &_sceneHotspot24, &_sceneHotspot23, &_sceneHotspot22, &_sceneHotspot21, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot20, &_sceneHotspot19, &_sceneHotspot18, &_sceneHotspot17, &_sceneHotspot4, &_sceneHotspot3, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_object11, &_sceneHotspot1, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot13, &_sceneHotspot12, &_sceneHotspot11, &_object2, &_object1, &_object3, NULL); + _globals->_sceneItems.addItems(&_object6, &_object5, &_object4, &_sceneHotspot6, &_sceneHotspot36, &_sceneItem7, NULL); + + _sceneMode = 7701; + setAction(&_sequenceManager, this, 7701, &_globals->_player, 0); + _soundHandler.startSound(256, 0, 127); +} + } // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index 81c79a690e..01a3bf09de 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -288,6 +288,186 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); }; +class Scene7700: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + class Action3: public Action { + public: + virtual void signal(); + }; + class Action4: public Action { + public: + virtual void signal(); + }; + class Action5: public Action { + public: + virtual void signal(); + }; + class Action6: public Action { + public: + virtual void signal(); + }; + + class Object1: public SceneObject3 { + public: + virtual void signal(); + virtual void doAction(int action); + }; + class Object3: public SceneObject3 { + public: + virtual void doAction(int action); + }; + class Object7: public SceneObjectExt { + public: + virtual void doAction(int action); + }; + class Object8: public SceneObject { + public: + virtual void doAction(int action); + }; + class Object9: public SceneObject { + public: + virtual void doAction(int action); + }; + class Object10: public SceneObject { + public: + virtual void doAction(int action); + }; + class Object11: public SceneObject { + public: + virtual void doAction(int action); + }; + class Object12: public SceneObject { + public: + virtual void doAction(int action); + }; + + /* Items */ + class SceneHotspot1: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot2: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot3: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot4: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot5: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot6: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneItem7: public SceneItem { + public: + virtual void doAction(int action); + }; + class SceneHotspot8: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneHotspot9: public SceneHotspot { + public: + virtual void doAction(int action); + }; + class SceneItem10: public SceneItem { + public: + virtual void doAction(int action); + }; + class SceneHotspot11: public SceneHotspot_2 { + public: + virtual void doAction(int action); + }; +public: + SoundHandler _soundHandler; + SequenceManager _sequenceManager; + GfxButton _gfxButton; + SpeakerEText _speakerEText; + SpeakerQText _speakerQText; + Object1 _object1; + Object1 _object2; + Object3 _object3; + Object1 _object4; + Object1 _object5; + Object1 _object6; + Object7 _prof; + Object8 _object8; + Object9 _object9; + Object10 _object10; + Object11 _object11; + Object12 _object12; + SceneObject _object13; + SceneObject _object14; + SceneObject _object15; + SceneObject _object16; + SceneObject _object17; + SceneObject _object18; + SceneObject _object19; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + SceneHotspot1 _sceneHotspot1; + SceneHotspot2 _sceneHotspot2; + SceneHotspot3 _sceneHotspot3; + SceneHotspot4 _sceneHotspot4; + SceneHotspot5 _sceneHotspot5; + SceneHotspot6 _sceneHotspot6; + SceneItem7 _sceneItem7; + SceneHotspot8 _sceneHotspot8; + SceneHotspot9 _sceneHotspot9; + SceneItem10 _sceneItem10; + SceneHotspot11 _sceneHotspot11; + SceneHotspot11 _sceneHotspot12; + SceneHotspot11 _sceneHotspot13; + SceneHotspot11 _sceneHotspot14; + SceneHotspot11 _sceneHotspot15; + SceneHotspot11 _sceneHotspot16; + SceneHotspot11 _sceneHotspot17; + SceneHotspot11 _sceneHotspot18; + SceneHotspot11 _sceneHotspot19; + SceneHotspot11 _sceneHotspot20; + SceneHotspot11 _sceneHotspot21; + SceneHotspot11 _sceneHotspot22; + SceneHotspot11 _sceneHotspot23; + SceneHotspot11 _sceneHotspot24; + SceneHotspot11 _sceneHotspot25; + SceneHotspot11 _sceneHotspot26; + SceneHotspot11 _sceneHotspot27; + SceneHotspot11 _sceneHotspot28; + SceneHotspot11 _sceneHotspot29; + SceneHotspot11 _sceneHotspot30; + SceneHotspot11 _sceneHotspot31; + SceneHotspot11 _sceneHotspot32; + SceneHotspot11 _sceneHotspot33; + SceneHotspot11 _sceneHotspot34; + SceneHotspot11 _sceneHotspot35; + SceneHotspot11 _sceneHotspot36; + int _field977, _field979, _field97B; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; } // End of namespace tSage #endif diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index a29bf22617..487e26ff40 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -98,8 +98,8 @@ const char *LOOK_BTN_STRING = "Look"; const char *PICK_BTN_STRING = "Pick"; const char *START_PLAY_BTN_STRING = " Start Play "; const char *INTRODUCTION_BTN_STRING = "Introduction"; +const char *SCENE_EXIT_MSG = " EXIT "; -const char *SCENE60_EXIT_MSG = " EXIT "; const char *SCENE6100_CAREFUL = "Be careful! The probe cannot handle too much of that."; const char *SCENE6100_TOUGHER = "Hey! This is tougher than it looks!"; const char *SCENE6100_ONE_MORE_HIT = "You had better be more careful. One more hit like that \ diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 75a0de4cf7..0de47f9e91 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -64,9 +64,9 @@ extern const char *PICK_BTN_STRING; extern const char *INV_EMPTY_MSG; extern const char *START_PLAY_BTN_STRING; extern const char *INTRODUCTION_BTN_STRING; +extern const char *SCENE_EXIT_MSG; // Scene specific resources -extern const char *SCENE60_EXIT_MSG; extern const char *SCENE6100_CAREFUL; extern const char *SCENE6100_TOUGHER; extern const char *SCENE6100_ONE_MORE_HIT; -- cgit v1.2.3 From af80cb99abb7371e6789a3ef649f5c2300d129ac Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 26 Mar 2011 09:32:55 +0100 Subject: TSAGE: Fix some bugs in scene7700, rename some known objects --- engines/tsage/ringworld_scenes8.cpp | 110 ++++++++++++++++++++---------------- engines/tsage/ringworld_scenes8.h | 11 ++-- 2 files changed, 68 insertions(+), 53 deletions(-) diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index dedbda65ff..ceff997105 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -1697,12 +1697,12 @@ void Scene7700::Action5::signal() { setDelay(_globals->_randomSource.getRandomNumber(240)); break; case 1: { - scene->_object16.setFrame(_globals->_randomSource.getRandomNumber(1) + 1); - scene->_object16.setPosition(Common::Point(133, 145 + _globals->_randomSource.getRandomNumber(54)), 0); + scene->_cloud.setFrame(_globals->_randomSource.getRandomNumber(1) + 1); + scene->_cloud.setPosition(Common::Point(133, 145 + _globals->_randomSource.getRandomNumber(54)), 0); - Common::Point pt(360, scene->_object16._position.y); + Common::Point pt(360, scene->_cloud._position.y); NpcMover *mover = new NpcMover(); - scene->_object16.addMover(mover, &pt, this); + scene->_cloud.addMover(mover, &pt, this); _actionIndex = 0; break; } @@ -1718,24 +1718,24 @@ void Scene7700::Action6::signal() { case 1: { Common::Point pt(2, 66); NpcMover *mover = new NpcMover(); - scene->_object17.addMover(mover, &pt, this); + scene->_easterEgg1.addMover(mover, &pt, this); break; } case 2: - scene->_object17.setStrip(2); - scene->_object17.setPosition(Common::Point(43, 65), 0); + scene->_easterEgg1.setStrip(2); + scene->_easterEgg1.setPosition(Common::Point(43, 65), 0); - scene->_object18.postInit(); - scene->_object18.setVisage(7708); - scene->_object18.setStrip(3); - scene->_object18.setPosition(Common::Point(116, 54), 0); - scene->_object18.animate(ANIM_MODE_2, 0); + scene->_easterEgg2.postInit(); + scene->_easterEgg2.setVisage(7708); + scene->_easterEgg2.setStrip(3); + scene->_easterEgg2.setPosition(Common::Point(116, 54), 0); + scene->_easterEgg2.animate(ANIM_MODE_2, 0); setDelay(120); break; case 3: - scene->_object17.remove(); - scene->_object18.remove(); + scene->_easterEgg1.remove(); + scene->_easterEgg2.remove(); remove(); break; } @@ -1761,10 +1761,10 @@ void Scene7700::SceneHotspot3::doAction(int action) { switch (action) { case OBJECT_KEY: SceneItem::display(7702, 3, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); - _globals->_inventory._emptyJar._sceneNumber = 7700; + _globals->_inventory._key._sceneNumber = 7700; break; case CURSOR_LOOK: - if (_globals->_inventory._emptyJar._sceneNumber == 7700) + if (_globals->_inventory._key._sceneNumber == 7700) scene->setAction(&scene->_action4, 0); else SceneItem::display(7700, 53, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); @@ -1773,8 +1773,9 @@ void Scene7700::SceneHotspot3::doAction(int action) { if (!_globals->getFlag(78)) { scene->_sceneMode = 7712; scene->setAction(&scene->_sequenceManager, scene, 7715, 0); - } else if (_globals->_inventory._emptyJar._sceneNumber == 7700) { + } else if (_globals->_inventory._key._sceneNumber == 7700) { _globals->_player.disableControl(); + scene->_sceneMode = 7705; scene->setAction(&scene->_sequenceManager, scene, 7705, &_globals->_player, 0); } break; @@ -1795,7 +1796,7 @@ void Scene7700::SceneHotspot4::doAction(int action) { if (!_globals->getFlag(78)) { scene->_sceneMode = 7712; scene->setAction(&scene->_sequenceManager, scene, 7715, 0); - } else if (_globals->_inventory._emptyJar._sceneNumber == 7700) { + } else { SceneItem::display(7700, 12, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); } break; @@ -1813,7 +1814,7 @@ void Scene7700::SceneHotspot5::doAction(int action) { SceneItem::display(7700, 28, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); break; case CURSOR_USE: - if (!_globals->getFlag(78)) { + if (_globals->getFlag(78)) { if (_globals->_inventory._paper._sceneNumber == 7700) { _globals->_player.disableControl(); scene->_sceneMode = 7708; @@ -1928,7 +1929,7 @@ void Scene7700::Object1::doAction(int action) { _globals->_player.disableControl(); scene->setAction(&scene->_action1, this); } else { - scene->_sceneMode = 7715; + scene->_sceneMode = 7712; scene->setAction(&scene->_sequenceManager, scene, 7715, 0); } } else { @@ -1978,6 +1979,8 @@ void Scene7700::Object3::doAction(int action) { scene->_sceneMode = 7712; scene->setAction(&scene->_sequenceManager, scene, 7715, 0); } + } else { + SceneHotspot::doAction(action); } } @@ -2162,7 +2165,8 @@ void Scene7700::Object11::doAction(int action) { _globals->_inventory._emptyJar._sceneNumber = 0; _globals->_inventory._jar._sceneNumber = 1; _globals->_player.disableControl(); - scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, this, NULL); + scene->_sceneMode = 7710; + scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, NULL); break; default: SceneHotspot::doAction(action); @@ -2229,8 +2233,8 @@ void Scene7700::signal() { _globals->_player.enableControl(); SceneItem::display(7700, 62, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); break; - case 7013: - _object12.remove(); + case 7713: + _emptyJar.remove(); _globals->_inventory._emptyJar._sceneNumber = 1; break; default: @@ -2257,13 +2261,13 @@ void Scene7700::process(Event &event) { } if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_p)) { event.handled = true; - if (!_globals->_sceneObjects->contains(&_object17)) { - _object17.postInit(); - _object17.setVisage(7708); - _object17.setPosition(Common::Point(163, 50), 0); - _object17.setPriority2(1); - _object17.animate(ANIM_MODE_2, 0); - _object17.setAction(&_action6); + if (!_globals->_sceneObjects->contains(&_easterEgg1)) { + _easterEgg1.postInit(); + _easterEgg1.setVisage(7708); + _easterEgg1.setPosition(Common::Point(163, 50), 0); + _easterEgg1.setPriority2(1); + _easterEgg1.animate(ANIM_MODE_2, 0); + _easterEgg1.setAction(&_action6); } } } @@ -2323,14 +2327,14 @@ void Scene7700::postInit(SceneObjectList *OwnerList) { _prof.setAction(&_action2); } - _object16.postInit(); - _object16.setVisage(7700); - _object16.setStrip2(5); - _object16.setPriority2(1); - _object16.setPosition(Common::Point(133, 160), 0); - _object16._moveDiff.x = 1; - _object16._field7A = 7; - _object16.setAction(&_action5); + _cloud.postInit(); + _cloud.setVisage(7700); + _cloud.setStrip2(5); + _cloud.setPriority2(1); + _cloud.setPosition(Common::Point(133, 160), 0); + _cloud._moveDiff.x = 1; + _cloud._field7A = 7; + _cloud.setAction(&_action5); _object1.postInit(); _object1.setVisage(7700); @@ -2382,19 +2386,19 @@ void Scene7700::postInit(SceneObjectList *OwnerList) { _sceneHotspot8.setBounds(82, 141, 161, 92); _sceneHotspot9.setBounds(82, 187, 161, 141); - _object11.postInit(); - _object11.setVisage(7703); - _object11.setPosition(Common::Point(32, 128), 0); + _cork.postInit(); + _cork.setVisage(7703); + _cork.setPosition(Common::Point(32, 128), 0); if (_globals->getFlag(49)) - _object11.setFrame(_object11.getFrameCount()); + _cork.setFrame(_cork.getFrameCount()); if (_globals->_inventory._emptyJar._sceneNumber == 7700) { - _object12.postInit(); - _object12.setVisage(7700); - _object12.setStrip(8); - _object12.setPosition(Common::Point(189, 48), 0); - _globals->_sceneItems.addItems(&_object12, NULL); + _emptyJar.postInit(); + _emptyJar.setVisage(7700); + _emptyJar.setStrip(8); + _emptyJar.setPosition(Common::Point(189, 48), 0); + _globals->_sceneItems.addItems(&_emptyJar, NULL); } _sceneHotspot1._sceneRegionId = 28; _sceneHotspot2._sceneRegionId = 6; @@ -2489,7 +2493,7 @@ void Scene7700::postInit(SceneObjectList *OwnerList) { _globals->_sceneItems.addItems(&_sceneHotspot31, &_sceneHotspot30, &_sceneHotspot29, &_sceneHotspot5, &_sceneHotspot28, &_sceneHotspot27, NULL); _globals->_sceneItems.addItems(&_sceneHotspot26, &_sceneHotspot25, &_sceneHotspot24, &_sceneHotspot23, &_sceneHotspot22, &_sceneHotspot21, NULL); _globals->_sceneItems.addItems(&_sceneHotspot20, &_sceneHotspot19, &_sceneHotspot18, &_sceneHotspot17, &_sceneHotspot4, &_sceneHotspot3, NULL); - _globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_object11, &_sceneHotspot1, NULL); + _globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_cork, &_sceneHotspot1, NULL); _globals->_sceneItems.addItems(&_sceneHotspot13, &_sceneHotspot12, &_sceneHotspot11, &_object2, &_object1, &_object3, NULL); _globals->_sceneItems.addItems(&_object6, &_object5, &_object4, &_sceneHotspot6, &_sceneHotspot36, &_sceneItem7, NULL); @@ -2498,4 +2502,14 @@ void Scene7700::postInit(SceneObjectList *OwnerList) { _soundHandler.startSound(256, 0, 127); } +Scene7700::Scene7700() { + _object1._state = 0; + _object2._state = 0; + _object3._state = 0; + _object4._state = 0; + _object5._state = 0; + _object6._state = 0; + _prof._state = 0; +} + } // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index 01a3bf09de..8528f43a38 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -410,14 +410,14 @@ public: Object8 _object8; Object9 _object9; Object10 _object10; - Object11 _object11; - Object12 _object12; + Object11 _cork; + Object12 _emptyJar; SceneObject _object13; SceneObject _object14; SceneObject _object15; - SceneObject _object16; - SceneObject _object17; - SceneObject _object18; + SceneObject _cloud; + SceneObject _easterEgg1; + SceneObject _easterEgg2; SceneObject _object19; Action1 _action1; Action2 _action2; @@ -463,6 +463,7 @@ public: SceneHotspot11 _sceneHotspot36; int _field977, _field979, _field97B; + Scene7700(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); virtual void process(Event &event); -- cgit v1.2.3 From 2a911701bc23b1782647cea19777db5974c04fd1 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 27 Mar 2011 01:19:44 +0100 Subject: TSAGE: Implement Scene 9999 --- engines/tsage/module.mk | 1 + engines/tsage/ringworld_logic.cpp | 2 + engines/tsage/ringworld_scenes10.cpp | 122 +++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 64 ++++++++++++++++++ 4 files changed, 189 insertions(+) create mode 100644 engines/tsage/ringworld_scenes10.cpp create mode 100644 engines/tsage/ringworld_scenes10.h diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index c3666beb55..f483f950f3 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -16,6 +16,7 @@ MODULE_OBJS := \ ringworld_scenes3.o \ ringworld_scenes4.o \ ringworld_scenes8.o \ + ringworld_scenes10.o \ saveload.o \ scenes.o \ sound.o \ diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 7c3b855361..d1628f5c6f 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -33,6 +33,7 @@ #include "tsage/ringworld_scenes4.h" #include "tsage/ringworld_scenes5.h" #include "tsage/ringworld_scenes8.h" +#include "tsage/ringworld_scenes10.h" namespace tSage { @@ -125,6 +126,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 7700: return new Scene7700(); /* Scene group 10 */ + case 9999: return new Scene9999(); default: error("Unknown scene number - %d", sceneNumber); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp new file mode 100644 index 0000000000..749e0e14c0 --- /dev/null +++ b/engines/tsage/ringworld_scenes10.cpp @@ -0,0 +1,122 @@ +/* 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. + * + * $URL: https://scummvm-misc.svn.sourceforge.net/svnroot/scummvm-misc/trunk/engines/tsage/scene_logic.cpp $ + * $Id: scene_logic.cpp 232 2011-02-12 11:56:38Z dreammaster $ + * + */ + +#include "graphics/cursorman.h" +#include "tsage/ringworld_scenes10.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" + +namespace tSage { + +/*-------------------------------------------------------------------------- + * Scene 9999 + * + *--------------------------------------------------------------------------*/ + +void Scene9999::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(600); + break; + case 1: + _globals->_sceneManager.changeScene(3500); + break; + default: + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene9999::Action2::signal() { + switch (_actionIndex++) { + case 0: + setDelay(10); + break; + case 1: + SceneItem::display(9999, 0, SET_Y, 10, SET_X, 30, SET_FONT, 2, SET_BG_COLOUR, -1, SET_EXT_BGCOLOUR, 23, SET_WIDTH, 260, SET_KEEP_ONSCREEN, 1, LIST_END); + setDelay(300); + break; + case 2: + _globals->_stripNum = 3600; + _globals->_sceneManager.changeScene(3600); + default: + break; + } +} + +void Scene9999::postInit(SceneObjectList *OwnerList) { + loadScene(9998); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _object1.postInit(); + _object1.setVisage(1303); + _object1.setStrip2(3); + _object1.setPosition(Common::Point(160, 152), 0); + + _globals->_player.postInit(); + _globals->_player.setVisage(1303); + _globals->_player.setStrip2(1); + _globals->_player.setPriority2(250); + _globals->_player.animate(ANIM_MODE_2, 0); + _globals->_player.setPosition(Common::Point(194, 98), 0); + _globals->_player._numFrames = 20; + _globals->_player.disableControl(); + + _object2.postInit(); + _object2.setVisage(1303); + _object2.setStrip2(2); + _object2.setPriority2(2); + _object2.setPosition(Common::Point(164, 149), 0); + + _object3.postInit(); + _object3.setVisage(1303); + _object3.setStrip2(2); + _object3.setPriority2(2); + _object3.setFrame(2); + _object3.setPosition(Common::Point(292, 149), 0); + _object3.setAction(&_action3); + + if (_globals->_sceneManager._previousScene == 3500) + setAction(&_action2); + else + setAction(&_action1); + + _globals->_sceneManager._scene->_sceneBounds.centre(_globals->_player._position.x, _globals->_player._position.y); + _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds); + _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160; + + if (_globals->_sceneManager._previousScene == 3500) + _globals->_stripNum = 2222; + else + _globals->_stripNum = 2121; + + _globals->_soundHandler.startSound(118, 0, 127); + +} + +} // End of namespace tSage diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h new file mode 100644 index 0000000000..29738c5888 --- /dev/null +++ b/engines/tsage/ringworld_scenes10.h @@ -0,0 +1,64 @@ +/* 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. + * + * $URL: https://scummvm-misc.svn.sourceforge.net/svnroot/scummvm-misc/trunk/engines/tsage/scene_logic.h $ + * $Id: scene_logic.h 232 2011-02-12 11:56:38Z dreammaster $ + * + */ + +#ifndef TSAGE_RINGWORLD_SCENES10_H +#define TSAGE_RINGWORLD_SCENES10_H + +#include "common/scummsys.h" +#include "tsage/ringworld_logic.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace tSage { + +class Scene9999: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + +public: + + Action1 _action1; + Action2 _action2; + Action _action3; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + + +} // End of namespace tSage + +#endif -- cgit v1.2.3 From ea744d0b2e3ceb9fc7a28f8ac84a749a6952a587 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 27 Mar 2011 14:25:04 +0200 Subject: TSAGE: Implement Scene 9750 --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 35 +++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 11 +++++++++++ 3 files changed, 47 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index d1628f5c6f..3dcde522fe 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -126,6 +126,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 7700: return new Scene7700(); /* Scene group 10 */ + case 9750: return new Scene9750(); case 9999: return new Scene9999(); default: diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 749e0e14c0..e68060f9b7 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -31,6 +31,41 @@ namespace tSage { +/*-------------------------------------------------------------------------- + * Scene 9750 + * + *--------------------------------------------------------------------------*/ +void Scene9750::signal() { + switch (_sceneMode ++) { + case 9751: + _globals->_soundHandler.proc1(this); + break; + case 9752: + _globals->_sceneManager.changeScene(2100); + default: + break; + } +} + +void Scene9750::dispatch() { + Scene::dispatch(); +} + +void Scene9750::postInit(SceneObjectList *OwnerList) { + loadScene(9750); + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + _globals->_player.postInit(); + _object1.postInit(); + _object1.flag100(); + _object2.postInit(); + _object2.flag100(); + _globals->_player.disableControl(); + _sceneMode = 9751; + setAction(&_sequenceManager, this, 9751, &_globals->_player, &_object1, &_object2, 0); +} + /*-------------------------------------------------------------------------- * Scene 9999 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index 29738c5888..c51edbe869 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -35,6 +35,17 @@ namespace tSage { +class Scene9750: public Scene { +public: + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene9999: public Scene { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From 6a9991a027d628225192ed2406532b69ed7a002c Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 27 Mar 2011 14:37:50 +0200 Subject: TSAGE: Fix compilation after merge --- engines/tsage/ringworld_logic.cpp | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 8eadefc29d..cd68667001 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -430,8 +430,8 @@ SpeakerHText::SpeakerHText() { /*--------------------------------------------------------------------------*/ -SpeakerPText::SpeakerPText() { - _speakerName = "PTEXT"; +SpeakerSKText::SpeakerSKText(): ScreenSpeaker() { + _speakerName = "SKTEXT"; _textWidth = 240; _textMode = ALIGN_CENTRE; _colour1 = 5; @@ -490,26 +490,6 @@ void SpeakerSKL::setText(const Common::String &msg) { } /*--------------------------------------------------------------------------*/ -SpeakerPText::SpeakerPText() { - _speakerName = "PTEXT"; - _textWidth = 240; - _textMode = ALIGN_CENTRE; - _colour1 = 5; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerCHFText::SpeakerCHFText() { - _speakerName = "SpeakerCHFText"; - _textWidth = 240; - _textMode = ALIGN_CENTRE; - _colour1 = 56; - _hideObjects = false; -} - -/*--------------------------------------------------------------------------*/ - SpeakerQL::SpeakerQL(): AnimatedSpeaker() { _speakerName = "QL"; _newSceneNumber = 2610; -- cgit v1.2.3 From 69ee2ff09ee42883845834cc545bf673da3a8be0 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sun, 27 Mar 2011 15:25:34 +0200 Subject: TSAGE: Fix compilation --- engines/tsage/ringworld_scenes8.cpp | 4 ++-- engines/tsage/ringworld_scenes8.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index ceff997105..8dda2a8738 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -2050,7 +2050,7 @@ void Scene7700::Object8::doAction(int action) { scene->_object14.setPriority2(250); scene->_object14.setPosition(Common::Point(139, 151), 0); - scene->_gfxButton.setText(SCENE_EXIT_MSG); + scene->_gfxButton.setText(EXIT_MSG); scene->_gfxButton._bounds.centre(140, 189); scene->_gfxButton.draw(); scene->_gfxButton._bounds.expandPanes(); @@ -2064,7 +2064,7 @@ void Scene7700::Object8::doAction(int action) { scene->_object15.setPosition(Common::Point(140, 165), 0); scene->_object15.setPriority2(200); - scene->_gfxButton.setText(SCENE_EXIT_MSG); + scene->_gfxButton.setText(EXIT_MSG); scene->_gfxButton._bounds.centre(140, 186); scene->_gfxButton.draw(); scene->_gfxButton._bounds.expandPanes(); diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld_scenes8.h index 8528f43a38..406ba0894f 100644 --- a/engines/tsage/ringworld_scenes8.h +++ b/engines/tsage/ringworld_scenes8.h @@ -469,6 +469,7 @@ public: virtual void process(Event &event); virtual void dispatch(); }; + } // End of namespace tSage #endif -- cgit v1.2.3 From e18230f0427fec43868a2c888c5e978aaf205186 Mon Sep 17 00:00:00 2001 From: strangerke Date: Mon, 28 Mar 2011 08:28:08 +0200 Subject: TSAGE: Implement scene 9350 --- engines/tsage/core.h | 10 ++- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 156 +++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 29 +++++++ 4 files changed, 195 insertions(+), 1 deletion(-) diff --git a/engines/tsage/core.h b/engines/tsage/core.h index b21c890492..3032ef2f56 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -426,7 +426,15 @@ public: int _field26, _field28; SceneHotspot_2(): SceneHotspot() {} - virtual Common::String getClassName() { return "SceneHotspot2"; } + virtual Common::String getClassName() { return "SceneHotspot_2"; } +}; + +class SceneHotspot_3: public SceneHotspot_2 { +public: + int _field2A; + SceneHotspot_3(): SceneHotspot_2() {} + + virtual Common::String getClassName() { return "SceneHotspot_3"; } }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 53be308817..0a1ea3deb7 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -138,6 +138,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 7700: return new Scene7700(); /* Scene group 10 */ + case 9350: return new Scene9350(); case 9750: return new Scene9750(); case 9999: return new Scene9999(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index e68060f9b7..1fe82272cc 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -30,6 +30,162 @@ #include "tsage/staticres.h" namespace tSage { +/*-------------------------------------------------------------------------- + * Scene 9350 + * + *--------------------------------------------------------------------------*/ +void Scene9350::Object1::postInit() { + warning("Scene9350::Object1::postInit - Weird cast to be verified"); + _globals->_sceneManager.postInit((SceneObjectList*) &_globals->_sceneManager._sceneChangeListeners); +} + +void Scene9350::Object1::draw() { + warning("Scene9350::Object1::draw - TODO"); +} + +void Scene9350::SceneHotspot1::doAction(int action) { + switch (action) { + case CURSOR_WALK: + // Nothing + break; + case CURSOR_LOOK: + if (_field28 == -1) + SceneHotspot::doAction(action); + else + SceneItem::display(_field26, _field28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (_field2A == -1) + SceneHotspot::doAction(action); + else + SceneItem::display(_field26, _field2A, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void Scene9350::signal() { + switch (_field30A ++) { + case 0: + case 9352: + case 9353: + case 9354: + _globals->_player.enableControl(); + break; + case 9355: + _globals->_sceneManager.changeScene(9300); + break; + case 9356: + _globals->_sceneManager.changeScene(9360); + break; + case 9357: + case 9359: + _globals->_sceneManager.changeScene(9400); + break; + default: + break; + } +} + +void Scene9350::dispatch() { + if (_action == 0) { + if ((_globals->_player._position.x <= 300) || (_globals->_player._position.y >= 160)) { + if ((_globals->_player._position.x <= 110) || (_globals->_player._position.y < 195)) { + _globals->_player.disableControl(); + _field30A = 9355; + Scene::setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, 0); + } else { + _globals->_player.disableControl(); + _field30A = 9357; + Scene::setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, 0); + } + } else { + _globals->_player.disableControl(); + _field30A = 9356; + Scene::setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, 0); + } + } else { + Scene::dispatch(); + } +} + +void Scene9350::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(95, 80, 200, 100); + _globals->_player.postInit(); + + //TODO: Implement and use SUB_1F1DF in order to reduce code size + // SUB_1F1DF(&_object1, 9350, 1, 3, 139, 97, 0); + _object1.postInit(); + _object1.setVisage(9350); + _object1.setStrip(1); + _object1.setFrame(3); + _object1.setPosition(Common::Point(139, 97), 0); + _object1.setPriority2(0); + + //TODO: Implement and use SUB_4C09 + // SUB_4C09(&_sceneItem1, 42, 0, 97, 60, 9350, 0, -1); + _sceneHotspot1.setBounds(42, 0, 97, 60); + _sceneHotspot1._field26 = 9350; + _sceneHotspot1._field28 = 0; + _sceneHotspot1._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot1, NULL); + + // SUB_4C09(&_sceneItem2, 37, 205, 82, 256, 9350, 0, -1); + _sceneHotspot2.setBounds(37, 205, 82, 256); + _sceneHotspot2._field26 = 9350; + _sceneHotspot2._field28 = 0; + _sceneHotspot2._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot2, NULL); + + // SUB_4C09(&_sceneItem3, 29, 93, 92, 174, 9350, 1, -1); + _sceneHotspot3.setBounds(29, 93, 92, 174); + _sceneHotspot3._field26 = 9350; + _sceneHotspot3._field28 = 1; + _sceneHotspot3._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot3, NULL); + + // SUB_4C09(&_sceneItem4, 0, 308, 109, 320, 9350, 2, -1); + _sceneHotspot4.setBounds(0, 308, 109, 320); + _sceneHotspot4._field26 = 9350; + _sceneHotspot4._field28 = 2; + _sceneHotspot4._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot4, NULL); + + // SUB_4C09(&_sceneItem5, 0, 0, 200, 320, 9350, 3, -1); + _sceneHotspot5.setBounds(0, 0, 200, 320); + _sceneHotspot5._field26 = 9350; + _sceneHotspot5._field28 = 3; + _sceneHotspot5._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot5, NULL); + + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + + if (_globals->_sceneManager._previousScene == 9360) { + _globals->_player.disableControl(); + _field30A = 9352; + setAction(&_sequenceManager, this, 9352, &_globals->_player, &_object2, 0); + } else if (_globals->_sceneManager._previousScene == 9400) { + _globals->_player.disableControl(); + _field30A = 9353; + setAction(&_sequenceManager, this, 9353, &_globals->_player, &_object2, 0); + } else { + if (!_globals->getFlag(84)) { + _globals->clearFlag(84); + _object2.postInit(); + _globals->_player.disableControl(); + _field30A = 9359; + setAction(&_sequenceManager, this, 9359, &_globals->_player, &_object2, 0); + } else { + _globals->_player.disableControl(); + _field30A = 9354; + setAction(&_sequenceManager, this, 9354, &_globals->_player, &_object2, 0); + } + } +} /*-------------------------------------------------------------------------- * Scene 9750 diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index c51edbe869..b8f9f1cc07 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -35,6 +35,35 @@ namespace tSage { +class Scene9350: public Scene { + /* Objects */ + class Object1: public SceneObject { + public: + virtual void postInit(); + virtual void draw(); + }; + + /* Items */ + class SceneHotspot1: public SceneHotspot_3 { + public: + virtual void doAction(int action); + }; +public: + int _field30A; + SequenceManager _sequenceManager; + Object1 _object1; + SceneObject _object2; + SceneHotspot1 _sceneHotspot1; + SceneHotspot1 _sceneHotspot2; + SceneHotspot1 _sceneHotspot3; + SceneHotspot1 _sceneHotspot4; + SceneHotspot1 _sceneHotspot5; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene9750: public Scene { public: SequenceManager _sequenceManager; -- cgit v1.2.3 From f208c33593f29fd36df2b63c9db7ab0e377f21a1 Mon Sep 17 00:00:00 2001 From: strangerke Date: Tue, 29 Mar 2011 12:10:00 +0200 Subject: TSAGE: Implement scene 7700. Also move doAction() to core when related to sceneHostpot_3. --- engines/tsage/core.cpp | 42 ++++++++++ engines/tsage/core.h | 3 + engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 145 +++++++++++++++++++++++++++-------- engines/tsage/ringworld_scenes10.h | 32 +++++--- 5 files changed, 182 insertions(+), 41 deletions(-) diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 4a3ade08ce..785afda2ae 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1535,6 +1535,39 @@ void SceneHotspot::doAction(int action) { /*--------------------------------------------------------------------------*/ +void SceneHotspot_3::doAction(int action) { + switch (action) { + case CURSOR_WALK: + // Nothing + break; + case CURSOR_LOOK: + if (_field28 == -1) + SceneHotspot::doAction(action); + else + SceneItem::display(_field26, _field28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + case CURSOR_USE: + if (_field2A == -1) + SceneHotspot::doAction(action); + else + SceneItem::display(_field26, _field2A, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); + break; + default: + SceneHotspot::doAction(action); + break; + } +} + +void SceneHotspot_3::quickInit(const int ys, const int xe, const int ye, const int xs, const int val26, const int val28, const int val2A) { + setBounds(ys, xe, ye, xs); + _field26 = val26; + _field28 = val28; + _field2A = val2A; + _globals->_sceneItems.addItems(this, NULL); +} + +/*--------------------------------------------------------------------------*/ + void SceneObjectWrapper::setSceneObject(SceneObject *so) { _sceneObject = so; so->_strip = 1; @@ -2175,6 +2208,15 @@ void SceneObject::updateScreen() { } } +void SceneObject::quickInit(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority) { + postInit(); + setVisage(visage); + setStrip(stripFrameNum); + setFrame(frameNum); + setPosition(Common::Point(posX, posY), 0); + setPriority2(priority); +} + /*--------------------------------------------------------------------------*/ void SceneObjectList::draw() { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 3032ef2f56..4090327bff 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -434,6 +434,8 @@ public: int _field2A; SceneHotspot_3(): SceneHotspot_2() {} + void quickInit(const int ys, const int xe, const int ye, const int xs, const int val26, const int val28, const int val2A); + virtual void doAction(int action); virtual Common::String getClassName() { return "SceneHotspot_3"; } }; @@ -557,6 +559,7 @@ public: virtual void draw(); virtual void proc19() {} virtual void updateScreen(); + void quickInit(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority); }; class SceneObjectExt: public SceneObject { diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 0a1ea3deb7..159fd84996 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -139,6 +139,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 10 */ case 9350: return new Scene9350(); + case 9700: return new Scene9700(); case 9750: return new Scene9750(); case 9999: return new Scene9999(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 1fe82272cc..abdc452d5b 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -43,29 +43,6 @@ void Scene9350::Object1::draw() { warning("Scene9350::Object1::draw - TODO"); } -void Scene9350::SceneHotspot1::doAction(int action) { - switch (action) { - case CURSOR_WALK: - // Nothing - break; - case CURSOR_LOOK: - if (_field28 == -1) - SceneHotspot::doAction(action); - else - SceneItem::display(_field26, _field28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); - break; - case CURSOR_USE: - if (_field2A == -1) - SceneHotspot::doAction(action); - else - SceneItem::display(_field26, _field2A, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END); - break; - default: - SceneHotspot::doAction(action); - break; - } -} - void Scene9350::signal() { switch (_field30A ++) { case 0: @@ -116,8 +93,8 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { setZoomPercents(95, 80, 200, 100); _globals->_player.postInit(); - //TODO: Implement and use SUB_1F1DF in order to reduce code size - // SUB_1F1DF(&_object1, 9350, 1, 3, 139, 97, 0); + //TODO: Fix _object1.quickInit(9350, 1, 3, 139, 97, 0); + _object1.postInit(); _object1.setVisage(9350); _object1.setStrip(1); @@ -125,36 +102,35 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { _object1.setPosition(Common::Point(139, 97), 0); _object1.setPriority2(0); - //TODO: Implement and use SUB_4C09 - // SUB_4C09(&_sceneItem1, 42, 0, 97, 60, 9350, 0, -1); + //TODO: check _sceneHotspot1.quickInit(42, 0, 97, 60, 9350, 0, -1); _sceneHotspot1.setBounds(42, 0, 97, 60); _sceneHotspot1._field26 = 9350; _sceneHotspot1._field28 = 0; _sceneHotspot1._field2A = -1; _globals->_sceneItems.addItems(&_sceneHotspot1, NULL); - // SUB_4C09(&_sceneItem2, 37, 205, 82, 256, 9350, 0, -1); + //TODO: check _sceneHotspot2.quickInit(37, 205, 82, 256, 9350, 0, -1); _sceneHotspot2.setBounds(37, 205, 82, 256); _sceneHotspot2._field26 = 9350; _sceneHotspot2._field28 = 0; _sceneHotspot2._field2A = -1; _globals->_sceneItems.addItems(&_sceneHotspot2, NULL); - // SUB_4C09(&_sceneItem3, 29, 93, 92, 174, 9350, 1, -1); + //TODO: check _sceneHotspot3.quickInit(29, 93, 92, 174, 9350, 1, -1); _sceneHotspot3.setBounds(29, 93, 92, 174); _sceneHotspot3._field26 = 9350; _sceneHotspot3._field28 = 1; _sceneHotspot3._field2A = -1; _globals->_sceneItems.addItems(&_sceneHotspot3, NULL); - // SUB_4C09(&_sceneItem4, 0, 308, 109, 320, 9350, 2, -1); + //TODO: check _sceneHotspot4.quickInit(0, 308, 109, 320, 9350, 2, -1); _sceneHotspot4.setBounds(0, 308, 109, 320); _sceneHotspot4._field26 = 9350; _sceneHotspot4._field28 = 2; _sceneHotspot4._field2A = -1; _globals->_sceneItems.addItems(&_sceneHotspot4, NULL); - // SUB_4C09(&_sceneItem5, 0, 0, 200, 320, 9350, 3, -1); + //TODO: check _sceneHotspot5.quickInit(0, 0, 200, 320, 9350, 3, -1); _sceneHotspot5.setBounds(0, 0, 200, 320); _sceneHotspot5._field26 = 9350; _sceneHotspot5._field28 = 3; @@ -187,6 +163,113 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { } } +/*-------------------------------------------------------------------------- + * Scene 9700 + * + *--------------------------------------------------------------------------*/ +void Scene9700::signal() { + switch (_sceneMode ++) { + case 9703: + _globals->setFlag(88); + // No break on purpose + case 9701: + case 9702: + _gfxButton1.setText(EXIT_MSG); + _gfxButton1._bounds.centre(50, 190); + _gfxButton1.draw(); + _gfxButton1._bounds.expandPanes(); + _globals->_player.enableControl(); + _globals->_player._canWalk = 0; + _globals->_events.setCursor(CURSOR_USE); + + break; + case 9704: + _globals->_soundHandler.startSound(323, 0, 127); + _globals->_sceneManager.changeScene(9750); + break; + } +} + +void Scene9700::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (event.kbd.keycode == 0)) { + if (_gfxButton1.process(event)) { + _globals->_sceneManager.changeScene(9200); + } else if (_globals->_events._currentCursor == OBJECT_SCANNER) { + event.handled = true; + if (_globals->_inventory._helmet._sceneNumber == 1) { + _globals->_player.disableControl(); + _sceneMode = 9704; + setAction(&_sequenceManager, this, 9704, &_globals->_player, &_object1, 0); + } else { + _globals->_player.disableControl(); + _sceneMode = 9703; + setAction(&_sequenceManager, this, 9703, &_globals->_player, &_object1, 0); + } + } + } +} + +void Scene9700::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + + //TODO: check _sceneHotspot1.quickInit(84, 218, 151, 278, 9700, 14, -1); + _sceneHotspot1.setBounds(84, 218, 151, 278); + _sceneHotspot1._field26 = 9700; + _sceneHotspot1._field28 = 14; + _sceneHotspot1._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot1, NULL); + + //TODO: check _sceneHotspot2.quickInit(89, 11, 151, 121, 9700, 14, -1); + _sceneHotspot2.setBounds(89, 11, 151, 121); + _sceneHotspot2._field26 = 9700; + _sceneHotspot2._field28 = 14; + _sceneHotspot2._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot2, NULL); + + //TODO: check _sceneHotspot3.quickInit(69, 119, 138, 218, 9700, 15, 16); + _sceneHotspot3.setBounds(69, 119, 138, 218); + _sceneHotspot3._field26 = 9700; + _sceneHotspot3._field28 = 15; + _sceneHotspot3._field2A = 16; + _globals->_sceneItems.addItems(&_sceneHotspot3, NULL); + + //TODO: check _sceneHotspot4.quickInit(34, 13, 88, 116, 9700, 17, -1); + _sceneHotspot4.setBounds(34, 13, 88, 116); + _sceneHotspot4._field26 = 9700; + _sceneHotspot4._field28 = 17; + _sceneHotspot4._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot4, NULL); + + //TODO: check _sceneHotspot5.quickInit(52, 119, 68, 204, 9700, 17, -1); + _sceneHotspot5.setBounds(52, 119, 68, 204); + _sceneHotspot5._field26 = 9700; + _sceneHotspot5._field28 = 17; + _sceneHotspot5._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot5, NULL); + + //TODO: check _sceneHotspot6.quickInit(0, 22, 56, 275, 9700, 18, -1); + _sceneHotspot6.setBounds(0, 22, 56, 275); + _sceneHotspot6._field26 = 9700; + _sceneHotspot6._field28 = 18; + _sceneHotspot6._field2A = -1; + _globals->_sceneItems.addItems(&_sceneHotspot6, NULL); + + _object1.postInit(); + _object1.flag100(); + _globals->_player.postInit(); + if (_globals->getFlag(97)) { + _globals->_player.disableControl(); + _sceneMode = 9701; + setAction(&_sequenceManager, this, 9701, &_globals->_player, &_object1, 0); + _globals->setFlag(97); + } else { + _globals->_player.disableControl(); + _sceneMode = 9702; + setAction(&_sequenceManager, this, 9702, &_globals->_player, &_object1, 0); + } +} + /*-------------------------------------------------------------------------- * Scene 9750 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index b8f9f1cc07..e94a052aee 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -43,27 +43,39 @@ class Scene9350: public Scene { virtual void draw(); }; - /* Items */ - class SceneHotspot1: public SceneHotspot_3 { - public: - virtual void doAction(int action); - }; public: int _field30A; SequenceManager _sequenceManager; Object1 _object1; SceneObject _object2; - SceneHotspot1 _sceneHotspot1; - SceneHotspot1 _sceneHotspot2; - SceneHotspot1 _sceneHotspot3; - SceneHotspot1 _sceneHotspot4; - SceneHotspot1 _sceneHotspot5; + SceneHotspot_3 _sceneHotspot1; + SceneHotspot_3 _sceneHotspot2; + SceneHotspot_3 _sceneHotspot3; + SceneHotspot_3 _sceneHotspot4; + SceneHotspot_3 _sceneHotspot5; virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); virtual void dispatch(); }; +class Scene9700: public Scene { + int _field30A; + SequenceManager _sequenceManager; + SceneObject _object1; + SceneHotspot_3 _sceneHotspot1; + SceneHotspot_3 _sceneHotspot2; + SceneHotspot_3 _sceneHotspot3; + SceneHotspot_3 _sceneHotspot4; + SceneHotspot_3 _sceneHotspot5; + SceneHotspot_3 _sceneHotspot6; + GfxButton _gfxButton1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + class Scene9750: public Scene { public: SequenceManager _sequenceManager; -- cgit v1.2.3 From f4e2cda89dc7d627ad6d1f6b91b3892cdacd2620 Mon Sep 17 00:00:00 2001 From: strangerke Date: Tue, 29 Mar 2011 21:14:16 +0200 Subject: TSAGE: Cast fmt into a SceneObject in Scene7700. This makes the drawers useable, even if there's still a problem with _globals->_parent._field8C (the animation displayed is always a closing drawer) --- engines/tsage/ringworld_scenes8.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 8dda2a8738..dc28dc6ba7 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -1591,25 +1591,20 @@ void Scene7600::postInit(SceneObjectList *OwnerList) { void Scene7700::Action1::signal() { Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; - warning("TODO: Scene7700::Action1::signal - Find the SceneObject behind _fmt"); - + SceneObject *fmtObj = (SceneObject *) _fmt; switch (_actionIndex++) { case 0: { PlayerMover *mover1 = new PlayerMover(); -// Common::Point pt = Common::Point(_fmt._position.x, _fmt._position.y + 30); - Common::Point pt = Common::Point(scene->_object1._position.x, scene->_object1._position.y + 30); + Common::Point pt = Common::Point(fmtObj->_position.x, fmtObj->_position.y + 30); _globals->_player.addMover(mover1, &pt, this); break; } case 1: -// _globals->_player.checkAngle(&_fmt); - _globals->_player.checkAngle(&scene->_object1); + _globals->_player.checkAngle(fmtObj); if (_globals->_player._field8C == 0) -// _fmt.animate(ANIM_MODE_5, this); - scene->_object1.animate(ANIM_MODE_5, this); + fmtObj->animate(ANIM_MODE_5, this); else -// _fmt.animate(ANIM_MODE_6, this); - scene->_object1.animate(ANIM_MODE_6, this); + fmtObj->animate(ANIM_MODE_6, this); break; case 2: remove(); -- cgit v1.2.3 From 9a0693d168ba058398c5f6cef2fd721a86d13939 Mon Sep 17 00:00:00 2001 From: strangerke Date: Wed, 30 Mar 2011 21:59:20 +0200 Subject: TSAGE: Implement scene 9100 --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 127 +++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 26 +++++++ 3 files changed, 154 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 159fd84996..5c026a2dd9 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -138,6 +138,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 7700: return new Scene7700(); /* Scene group 10 */ + case 9100: return new Scene9100(); case 9350: return new Scene9350(); case 9700: return new Scene9700(); case 9750: return new Scene9750(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index abdc452d5b..08a9738c97 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -30,6 +30,133 @@ #include "tsage/staticres.h" namespace tSage { +/*-------------------------------------------------------------------------- + * Scene 9100 + * + *--------------------------------------------------------------------------*/ +void Scene9100::SceneHotspot1::doAction(int action) { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + if (action == CURSOR_TALK) { + if (_globals->getFlag(23)) { + _globals->_player.disableControl(); + scene->_sceneMode = 9104; + } else { + _globals->setFlag(23); + _globals->_player.disableControl(); + scene->_sceneMode = 9105; + } + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, &scene->_object5, &scene->_object6, 0); + } else { + SceneHotspot_3::doAction(action); + } +} + +void Scene9100::dispatch() { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + if (!_action) { + if (_globals->_player._position.x < 25) { + if (_globals->getFlag(11)) { + scene->_sceneMode = 9106; + } else { + scene->_sceneMode = 9108; + _globals->setFlag(11); + } + } else { + scene->_sceneMode = 9106; + } + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, 0); + } else { + Scene::dispatch(); + } +} + +void Scene9100::signal() { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + switch (scene->_sceneMode) { + case 9102: + case 9106: + case 9108: + _globals->_sceneManager.changeScene(9150); + break; + case 9105: + _sceneHotspot1.remove(); + // No break on purpose + case 9103: + case 9104: + case 9107: + case 9109: + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9100::postInit(SceneObjectList *OwnerList) { + Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene; + + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + _object1.postInit(); + _object1.setVisage(9100); + _object1._strip = 1; + _object1._numFrames = 6; + _object1.setPosition(Common::Point(297, 132), 0); + _object1.animate(ANIM_MODE_2, 0); + _object1.setPriority2(10); + + _globals->_player.postInit(); + + _object2.postInit(); + _object2.flag100(); + + _object3.postInit(); + _object3.flag100(); + + _object4.postInit(); + _object4.flag100(); + + _object5.postInit(); + _object5.flag100(); + + if (!_globals->getFlag(23)) { + _object6.postInit(); + _object6.setVisage(9111); + _object6.setStrip(6); + _object6.setFrame(1); + _object6.setPosition(Common::Point(138, 166), 0); + _sceneHotspot3.quickInit(145, 125, 166, 156, 9100, 40, 43); + } + _sceneHotspot1.quickInit(140, 176, 185, 215, 9100, 36, 37); + _sceneHotspot2.quickInit(161, 138, 182, 175, 9100, 38, 39); + _sceneHotspot4.quickInit(37, 196, 47, 320, 9100, 44, -1); + _sceneHotspot5.quickInit(69, 36, 121, 272, 9100, 45, 46); + _sceneHotspot6.quickInit(127, 0, 200, 52, 9100, 47, 48); + + _globals->_soundHandler.startSound(251, 0, 127); + if (_globals->_sceneManager._previousScene == 9150) { + if (_globals->getFlag(20)) { + _globals->_player.disableControl(); + if (_globals->getFlag(11)) + _sceneMode = 9107; + else + _sceneMode = 9109; + setAction(&scene->_sequenceManager, scene, _sceneMode, &_globals->_player, &_object5, 0); + } else { + _sceneMode = 9103; + _globals->_player.disableControl(); + setAction(&scene->_sequenceManager, scene, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, 0); + _globals->setFlag(20); + } + } else { + _sceneMode = 9102; + _globals->_player.disableControl(); + setAction(&scene->_sequenceManager, scene, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, 0); + } +} + /*-------------------------------------------------------------------------- * Scene 9350 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index e94a052aee..6461b665d8 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -35,6 +35,32 @@ namespace tSage { +class Scene9100: public Scene { + /* Items */ + class SceneHotspot1: public SceneHotspot_3 { + public: + virtual void doAction(int action); + }; + + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SceneObject _object5; + SceneObject _object6; + SceneHotspot1 _sceneHotspot1; + SceneHotspot_3 _sceneHotspot2; + SceneHotspot_3 _sceneHotspot3; + SceneHotspot_3 _sceneHotspot4; + SceneHotspot_3 _sceneHotspot5; + SceneHotspot_3 _sceneHotspot6; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene9350: public Scene { /* Objects */ class Object1: public SceneObject { -- cgit v1.2.3 From 8d25157923dabf207e46ae26db14e412d3257840 Mon Sep 17 00:00:00 2001 From: strangerke Date: Thu, 31 Mar 2011 01:18:32 +0200 Subject: TSAGE: remove useless variable --- engines/tsage/ringworld_scenes8.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index dc28dc6ba7..1721c04df9 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -1590,7 +1590,6 @@ void Scene7600::postInit(SceneObjectList *OwnerList) { *--------------------------------------------------------------------------*/ void Scene7700::Action1::signal() { - Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene; SceneObject *fmtObj = (SceneObject *) _fmt; switch (_actionIndex++) { case 0: { -- cgit v1.2.3 From 05df97214e54e2f8537eb3ed8822682d22343035 Mon Sep 17 00:00:00 2001 From: strangerke Date: Thu, 31 Mar 2011 01:18:50 +0200 Subject: TSAGE: Add scene 9150 --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 115 +++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 29 +++++++++ 3 files changed, 145 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 5c026a2dd9..4dd39a6a29 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -139,6 +139,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 10 */ case 9100: return new Scene9100(); + case 9150: return new Scene9150(); case 9350: return new Scene9350(); case 9700: return new Scene9700(); case 9750: return new Scene9750(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 08a9738c97..b97b422497 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -157,6 +157,121 @@ void Scene9100::postInit(SceneObjectList *OwnerList) { } } +/*-------------------------------------------------------------------------- + * Scene 9150 + * + *--------------------------------------------------------------------------*/ +void Scene9150::Object3::signal() { + switch (_field8A++) { + case 0: + _field88 = 10 + _globals->_randomSource.getRandomNumber(90); + break; + default: + animate(ANIM_MODE_5, this); + _field88 = 0; + break; + } +} + +void Scene9150::Object3::dispatch() { + SceneObject::dispatch(); + if ((_field88 != 0) && (--_field88 == 0)) + signal(); +} + +void Scene9150::signal() { + switch (_sceneMode) { + case 9151: + case 9157: + _globals->_sceneManager.changeScene(9100); + break; + case 9153: + _globals->_sceneManager.changeScene(9300); + break; + case 9152: + case 9155: + case 9156: + _globals->_player.enableControl(); + break; + case 9154: + default: + break; + } +} + +void Scene9150::dispatch() { + if ((_field30A != 0) && (_sceneBounds.left == 0)) { + _object3._field88 = 0; + _field30A = 0; + _sceneHotspot3.setAction(&_sequenceManager2, 0, 9154, &_object3, 0); + _sceneHotspot10.remove(); + } + + if (_action != 0) { + _action->dispatch(); + } else { + if (_globals->_player._position.x >= 160) { + if (_globals->_player._position.x > 630) { + _globals->_player.disableControl(); + _sceneMode = 9157; + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0); + } + } else { + _globals->_player.disableControl(); + if (_globals->getFlag(11)) { + _globals->_soundHandler.startSound(286, 0, 127); + _sceneMode = 9153; + } else { + _sceneMode = 9156; + } + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0); + } + } +} + +void Scene9150::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(0, 100, 200, 100); + _globals->_player.postInit(); + + _object3.postInit(); + _field30A = 1; + _object3.setVisage(9151); + _object3._strip = 1; + _object3._frame = 1; + _object3.setPosition(Common::Point(312, 95), 0); + _object3.signal(); + + _sceneHotspot1.quickInit(0, 0, 200, 94, 9150, 46, -1); + _sceneHotspot2.quickInit(51, 90, 118, 230, 9150, 47, -1); + _sceneHotspot3.quickInit(182, 104, 200, 320, 9150, 48, 49); + _sceneHotspot4.quickInit(103, 292, 152, 314, 9150, 50, 51); + _sceneHotspot5.quickInit(115, 350, 160, 374, 9150, 52, 53); + _sceneHotspot6.quickInit(0, 471, 200, 531, 9150, 54, 55); + _sceneHotspot7.quickInit(170, 320, 185, 640, 9150, 56, -1); + _sceneHotspot9.quickInit(157, 107, 186, 320, 9150, 56, -1); + _sceneHotspot8.quickInit(133, 584, 142, 640, 9150, 57, -1); + _sceneHotspot10.quickInit(83, 304, 103, 323, 9150, 58, 59); + + _globals->_soundHandler.startSound(285, 0, 127); + _globals->_player.disableControl(); + + if (_globals->getFlag(20)) { + _globals->_scrollFollower = &_globals->_player; + if (_globals->getFlag(11)) + _sceneMode = 9155; + else + _sceneMode = 9152; + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0); + } else { + _sceneMode = 9151; + _object2.postInit(); + _object2.flag100(); + _object1.postInit(); + setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, &_object1, &_object2, 0); + } +} + /*-------------------------------------------------------------------------- * Scene 9350 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index 6461b665d8..98b98c9a7b 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -61,6 +61,35 @@ class Scene9100: public Scene { virtual void dispatch(); }; +class Scene9150: public Scene { + class Object3: public SceneObject4 { + public: + virtual void signal(); + virtual void dispatch(); + }; + + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + SceneObject _object1; + SceneObject _object2; + Object3 _object3; + int _field30A; //_fieldB96; + SceneHotspot_3 _sceneHotspot1; + SceneHotspot_3 _sceneHotspot2; + SceneHotspot_3 _sceneHotspot3; + SceneHotspot_3 _sceneHotspot4; + SceneHotspot_3 _sceneHotspot5; + SceneHotspot_3 _sceneHotspot6; + SceneHotspot_3 _sceneHotspot7; + SceneHotspot_3 _sceneHotspot8; + SceneHotspot_3 _sceneHotspot9; + SceneHotspot_3 _sceneHotspot10; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene9350: public Scene { /* Objects */ class Object1: public SceneObject { -- cgit v1.2.3 From 28d62b22eace2efca53dba6f0e76280141b0df99 Mon Sep 17 00:00:00 2001 From: strangerke Date: Thu, 31 Mar 2011 01:19:44 +0200 Subject: TSAGE: Add new sceneObject --- engines/tsage/core.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 4090327bff..32260c0dc3 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -585,6 +585,18 @@ public: virtual Common::String getClassName() { return "SceneObject3"; } }; +class SceneObject4: public SceneObject { +public: + int _field88, _field8A; + + virtual void synchronise(Serialiser &s) { + SceneObject::synchronise(s); + s.syncAsSint16LE(_field88); + s.syncAsSint16LE(_field8A); + } + virtual Common::String getClassName() { return "SceneObject4"; } +}; + class SceneText: public SceneObject { public: int _fontNumber; -- cgit v1.2.3 From 8bb6b94080054f1c8fc8747955b5e59eab5d7524 Mon Sep 17 00:00:00 2001 From: strangerke Date: Thu, 31 Mar 2011 20:09:40 +0200 Subject: TSAGE: Fix Scene9350:Object1::postInit (thanks dreammaster), first real uses of quickInit --- engines/tsage/ringworld_scenes10.cpp | 108 +++++++---------------------------- engines/tsage/ringworld_scenes10.h | 2 +- 2 files changed, 22 insertions(+), 88 deletions(-) diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index b97b422497..6c9b5cb7bb 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -57,7 +57,8 @@ void Scene9100::dispatch() { if (!_action) { if (_globals->_player._position.x < 25) { - if (_globals->getFlag(11)) { + warning("There"); + if (!_globals->getFlag(11)) { scene->_sceneMode = 9106; } else { scene->_sceneMode = 9108; @@ -200,6 +201,7 @@ void Scene9150::signal() { } void Scene9150::dispatch() { + if ((_field30A != 0) && (_sceneBounds.left == 0)) { _object3._field88 = 0; _field30A = 0; @@ -207,7 +209,7 @@ void Scene9150::dispatch() { _sceneHotspot10.remove(); } - if (_action != 0) { + if (_action) { _action->dispatch(); } else { if (_globals->_player._position.x >= 160) { @@ -257,13 +259,17 @@ void Scene9150::postInit(SceneObjectList *OwnerList) { _globals->_player.disableControl(); if (_globals->getFlag(20)) { + // Walking alone _globals->_scrollFollower = &_globals->_player; if (_globals->getFlag(11)) + // Hero wearing peasan suit _sceneMode = 9155; else + // Hero wearing Purple suit _sceneMode = 9152; setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0); } else { + // Walking with the tiger _sceneMode = 9151; _object2.postInit(); _object2.flag100(); @@ -276,7 +282,7 @@ void Scene9150::postInit(SceneObjectList *OwnerList) { * Scene 9350 * *--------------------------------------------------------------------------*/ -void Scene9350::Object1::postInit() { +void Scene9350::Object1::postInit(SceneObjectList *OwnerList) { warning("Scene9350::Object1::postInit - Weird cast to be verified"); _globals->_sceneManager.postInit((SceneObjectList*) &_globals->_sceneManager._sceneChangeListeners); } @@ -335,49 +341,12 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { setZoomPercents(95, 80, 200, 100); _globals->_player.postInit(); - //TODO: Fix _object1.quickInit(9350, 1, 3, 139, 97, 0); - - _object1.postInit(); - _object1.setVisage(9350); - _object1.setStrip(1); - _object1.setFrame(3); - _object1.setPosition(Common::Point(139, 97), 0); - _object1.setPriority2(0); - - //TODO: check _sceneHotspot1.quickInit(42, 0, 97, 60, 9350, 0, -1); - _sceneHotspot1.setBounds(42, 0, 97, 60); - _sceneHotspot1._field26 = 9350; - _sceneHotspot1._field28 = 0; - _sceneHotspot1._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot1, NULL); - - //TODO: check _sceneHotspot2.quickInit(37, 205, 82, 256, 9350, 0, -1); - _sceneHotspot2.setBounds(37, 205, 82, 256); - _sceneHotspot2._field26 = 9350; - _sceneHotspot2._field28 = 0; - _sceneHotspot2._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot2, NULL); - - //TODO: check _sceneHotspot3.quickInit(29, 93, 92, 174, 9350, 1, -1); - _sceneHotspot3.setBounds(29, 93, 92, 174); - _sceneHotspot3._field26 = 9350; - _sceneHotspot3._field28 = 1; - _sceneHotspot3._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot3, NULL); - - //TODO: check _sceneHotspot4.quickInit(0, 308, 109, 320, 9350, 2, -1); - _sceneHotspot4.setBounds(0, 308, 109, 320); - _sceneHotspot4._field26 = 9350; - _sceneHotspot4._field28 = 2; - _sceneHotspot4._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot4, NULL); - - //TODO: check _sceneHotspot5.quickInit(0, 0, 200, 320, 9350, 3, -1); - _sceneHotspot5.setBounds(0, 0, 200, 320); - _sceneHotspot5._field26 = 9350; - _sceneHotspot5._field28 = 3; - _sceneHotspot5._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot5, NULL); + _object1.quickInit(9350, 1, 3, 139, 97, 0); + _sceneHotspot1.quickInit(42, 0, 97, 60, 9350, 0, -1); + _sceneHotspot2.quickInit(37, 205, 82, 256, 9350, 0, -1); + _sceneHotspot3.quickInit(29, 93, 92, 174, 9350, 1, -1); + _sceneHotspot4.quickInit(0, 308, 109, 320, 9350, 2, -1); + _sceneHotspot5.quickInit(0, 0, 200, 320, 9350, 3, -1); _globals->_events.setCursor(CURSOR_WALK); _globals->_player.disableControl(); @@ -455,47 +424,12 @@ void Scene9700::postInit(SceneObjectList *OwnerList) { Scene::postInit(); setZoomPercents(0, 100, 200, 100); - //TODO: check _sceneHotspot1.quickInit(84, 218, 151, 278, 9700, 14, -1); - _sceneHotspot1.setBounds(84, 218, 151, 278); - _sceneHotspot1._field26 = 9700; - _sceneHotspot1._field28 = 14; - _sceneHotspot1._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot1, NULL); - - //TODO: check _sceneHotspot2.quickInit(89, 11, 151, 121, 9700, 14, -1); - _sceneHotspot2.setBounds(89, 11, 151, 121); - _sceneHotspot2._field26 = 9700; - _sceneHotspot2._field28 = 14; - _sceneHotspot2._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot2, NULL); - - //TODO: check _sceneHotspot3.quickInit(69, 119, 138, 218, 9700, 15, 16); - _sceneHotspot3.setBounds(69, 119, 138, 218); - _sceneHotspot3._field26 = 9700; - _sceneHotspot3._field28 = 15; - _sceneHotspot3._field2A = 16; - _globals->_sceneItems.addItems(&_sceneHotspot3, NULL); - - //TODO: check _sceneHotspot4.quickInit(34, 13, 88, 116, 9700, 17, -1); - _sceneHotspot4.setBounds(34, 13, 88, 116); - _sceneHotspot4._field26 = 9700; - _sceneHotspot4._field28 = 17; - _sceneHotspot4._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot4, NULL); - - //TODO: check _sceneHotspot5.quickInit(52, 119, 68, 204, 9700, 17, -1); - _sceneHotspot5.setBounds(52, 119, 68, 204); - _sceneHotspot5._field26 = 9700; - _sceneHotspot5._field28 = 17; - _sceneHotspot5._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot5, NULL); - - //TODO: check _sceneHotspot6.quickInit(0, 22, 56, 275, 9700, 18, -1); - _sceneHotspot6.setBounds(0, 22, 56, 275); - _sceneHotspot6._field26 = 9700; - _sceneHotspot6._field28 = 18; - _sceneHotspot6._field2A = -1; - _globals->_sceneItems.addItems(&_sceneHotspot6, NULL); + _sceneHotspot1.quickInit(84, 218, 151, 278, 9700, 14, -1); + _sceneHotspot2.quickInit(89, 11, 151, 121, 9700, 14, -1); + _sceneHotspot3.quickInit(69, 119, 138, 218, 9700, 15, 16); + _sceneHotspot4.quickInit(34, 13, 88, 116, 9700, 17, -1); + _sceneHotspot5.quickInit(52, 119, 68, 204, 9700, 17, -1); + _sceneHotspot6.quickInit(0, 22, 56, 275, 9700, 18, -1); _object1.postInit(); _object1.flag100(); diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index 98b98c9a7b..c510ab0a5a 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -94,7 +94,7 @@ class Scene9350: public Scene { /* Objects */ class Object1: public SceneObject { public: - virtual void postInit(); + virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void draw(); }; -- cgit v1.2.3 From 8d0feb01b944f091aeca03e981a644d4834c43f1 Mon Sep 17 00:00:00 2001 From: strangerke Date: Fri, 1 Apr 2011 23:47:39 +0200 Subject: TSAGE: Implement scene 9200 --- engines/tsage/ringworld_logic.cpp | 13 +++ engines/tsage/ringworld_logic.h | 7 ++ engines/tsage/ringworld_scenes10.cpp | 172 +++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 33 ++++++- 4 files changed, 224 insertions(+), 1 deletion(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 4fdff693a2..3fdb8c5df5 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -146,6 +146,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { /* Scene group 10 */ case 9100: return new Scene9100(); case 9150: return new Scene9150(); + case 9200: return new Scene9200(); case 9350: return new Scene9350(); case 9700: return new Scene9700(); case 9750: return new Scene9750(); @@ -325,6 +326,7 @@ void SpeakerGText::removeText() { /*--------------------------------------------------------------------------*/ + SpeakerPOR::SpeakerPOR() { _speakerName = "POR"; _newSceneNumber = 7221; @@ -443,6 +445,16 @@ SpeakerEText::SpeakerEText() { /*--------------------------------------------------------------------------*/ +SpeakerGR::SpeakerGR() { + _speakerName = "GR"; + _newSceneNumber = 9220; + _textWidth = 136; + _textPos = Common::Point(168, 36); + _colour1 = 14; +} + +/*--------------------------------------------------------------------------*/ + SpeakerHText::SpeakerHText() { _speakerName = "HTEXT"; _textPos = Common::Point(160, 40); @@ -1026,4 +1038,5 @@ void SpeakerCDL::setText(const Common::String &msg) { Speaker::setText(msg); } +/*--------------------------------------------------------------------------*/ } // End of namespace tSage diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h index 96e112624e..2e066e2f9a 100644 --- a/engines/tsage/ringworld_logic.h +++ b/engines/tsage/ringworld_logic.h @@ -180,6 +180,13 @@ public: virtual Common::String getClassName() { return "SpeakerEText"; } }; +class SpeakerGR: public AnimatedSpeaker { +public: + SpeakerGR(); + + virtual Common::String getClassName() { return "SpeakerGR"; } +}; + class SpeakerHText: public ScreenSpeaker { public: SpeakerHText(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 6c9b5cb7bb..d05343aae3 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -278,6 +278,178 @@ void Scene9150::postInit(SceneObjectList *OwnerList) { } } +/*-------------------------------------------------------------------------- + * Scene 9200 + * + *--------------------------------------------------------------------------*/ +void Scene9200::SceneHotspot1::doAction(int action) { + Scene9200 *scene = (Scene9200 *)_globals->_sceneManager._scene; + + if (action == OBJECT_TUNIC) { + _globals->_player.disableControl(); + if (_globals->getFlag(93)) { + scene->_field30A = 9214; + setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, 0); + } else { + _globals->setFlag(93); + scene->_field30A = 9213; + setAction(&scene->_sequenceManager, scene, 9213, &_globals->_player, &scene->_object2, 0); + } + } else if (action <= 100) { + _globals->_player.disableControl(); + scene->_field30A = 9214; + setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, 0); + } else { + SceneHotspot_3::doAction(action); + } +} + +void Scene9200::signal() { + switch (_field30A++) { + case 9207: + _globals->_sceneManager.changeScene(9700); + break; + case 9208: + case 9211: + case 9212: + _globals->_sceneManager.changeScene(9500); + break; + case 9209: + _globals->_sceneManager.changeScene(9360); + break; + case 9210: + _hotspot1.remove(); + // No break on purpose + case 9201: + case 9202: + case 9203: + case 9204: + case 9205: + case 9206: + default: + _globals->_player.enableControl(); + break; + } +} + +void Scene9200::process(Event &event) { + Scene::process(event); +} + +void Scene9200::dispatch() { +// Rect rect9200 = Rect(320, 175, 250, 154); + Rect rect9200 = Rect(250, 154, 320, 175); + + if (_action) { + _action->dispatch(); + } else { + if ( (_globals->_player._position.x <= 0) || ((_globals->_player._position.x < 100) && (_globals->_player._position.y > 199))) { + _globals->_player.disableControl(); + _field30A = 9209; + setAction(&_sequenceManager, this, 9209, &_globals->_player, &_object2, &_object3, 0); + } else { + if (rect9200.contains(_globals->_player._position)) { + if (_globals->getFlag(93)) { + if (_globals->getFlag(86)) { + _field30A = 9215; + setAction(&_sequenceManager, this, 9215, &_globals->_player, &_object2, &_object3, 0); + } else { + _field30A = 9208; + setAction(&_sequenceManager, this, 9208, &_globals->_player, &_object2, &_object3, 0); + } + } else { + _globals->_player.disableControl(); + _field30A = 9204; + setAction(&_sequenceManager, this, 9204, &_globals->_player, &_object2, &_object3, 0); + } + } else { + if (_globals->_player._position.y < 140) { + _globals->_player.disableControl(); + _field30A = 9207; + setAction(&_sequenceManager, this, 9207, &_globals->_player, &_object2, &_object3, 0); + } + } + } + } +} + +void Scene9200::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(130, 50, 200, 150); + + _globals->_player.postInit(); + _object3.postInit(); + _object3.flag100(); + _object1.postInit(); + // Water animation + _object1.setVisage(9200); + _object1._strip = 3; + _object1.animate(ANIM_MODE_2, 0); + _object1.setPosition(Common::Point(132, 114), 0); + _object1.setPriority2(140); + _soundHandler.startSound(297, 0, 127); + _stripManager.addSpeaker(&_speakerQText); + _stripManager.addSpeaker(&_speakerGR); + _stripManager.addSpeaker(&_speakerGText); + + if (!_globals->getFlag(86)) { + _object2.postInit(); + _hotspot1.quickInit(96, 194, 160, 234, 9200, 29, 31); + } + _hotspot2.quickInit(164, 0, 200, 282, 9200, 0, 1); + _hotspot3.quickInit(140, 39, 165, 153, 9200, 2, 3); + _hotspot4.quickInit(92, 122, 139, 152, 9200, 4, 5); + _hotspot5.quickInit(33, 20, 142, 115, 9200, 6, 7); + _hotspot6.quickInit(104, 235, 153, 265, 9200, 8, 9); + _hotspot7.quickInit(107, 262, 153, 286, 9200, 10, 11); + _hotspot8.quickInit(69, 276, 164, 320, 9200, 12, 13); + + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + + switch (_globals->_sceneManager._previousScene) { + case 9500: + if (_globals->getFlag(85)) { + if (_globals->_inventory._helmet._sceneNumber == 1) { + _globals->setFlag(86); + _field30A = 9210; + setAction(&_sequenceManager, this, 9210, &_globals->_player, &_object2, &_object3, 0); + } else { + _field30A = 9212; + setAction(&_sequenceManager, this, 9212, &_globals->_player, &_object2, &_object3, 0); + } + } else { + if (_globals->_inventory._helmet._sceneNumber == 1) { + _field30A = 9211; + setAction(&_sequenceManager, this, 9211, &_globals->_player, &_object2, &_object3, 0); + } else { + _field30A = 9202; + setAction(&_sequenceManager, this, 9202, &_globals->_player, &_object2, &_object3, 0); + } + } + break; + case 9700: + if (_globals->getFlag(86)) { + _field30A = 9206; + setAction(&_sequenceManager, this, 9206, &_globals->_player, &_object2, &_object3, 0); + } else { + _field30A = 9203; + setAction(&_sequenceManager, this, 9203, &_globals->_player, &_object2, &_object3, 0); + } + break; + case 9360: + default: + if (_globals->getFlag(86)) { + _field30A = 9205; + setAction(&_sequenceManager, this, 9205, &_globals->_player, &_object2, &_object3, 0); + } else { + _field30A = 9201; + setAction(&_sequenceManager, this, 9201, &_globals->_player, &_object2, &_object3, 0); + } + break; + } +} + /*-------------------------------------------------------------------------- * Scene 9350 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index c510ab0a5a..b5a6240166 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -73,7 +73,7 @@ class Scene9150: public Scene { SceneObject _object1; SceneObject _object2; Object3 _object3; - int _field30A; //_fieldB96; + int _field30A; SceneHotspot_3 _sceneHotspot1; SceneHotspot_3 _sceneHotspot2; SceneHotspot_3 _sceneHotspot3; @@ -90,6 +90,37 @@ class Scene9150: public Scene { virtual void dispatch(); }; +class Scene9200: public Scene { + class SceneHotspot1: public SceneHotspot_3{ + public: + virtual void doAction(int action); + }; + + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + SceneObject _object3; + int _field30A; + Action _action1; + SpeakerGText _speakerGText; + SpeakerGR _speakerGR; + SpeakerQText _speakerQText; + SoundHandler _soundHandler; + SceneHotspot1 _hotspot1; + SceneHotspot_3 _hotspot2; + SceneHotspot_3 _hotspot3; + SceneHotspot_3 _hotspot4; + SceneHotspot_3 _hotspot5; + SceneHotspot_3 _hotspot6; + SceneHotspot_3 _hotspot7; + SceneHotspot_3 _hotspot8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); + virtual void process(Event &event); +}; + class Scene9350: public Scene { /* Objects */ class Object1: public SceneObject { -- cgit v1.2.3 From 068fb01747ba0eb36b07d178764c7e4b206b2c96 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 2 Apr 2011 08:23:55 +0200 Subject: TSAGE: Implement Scene 9300 --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 67 ++++++++++++++++++++++++++++++++++++ engines/tsage/ringworld_scenes10.h | 23 +++++++++++++ 3 files changed, 91 insertions(+) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 3fdb8c5df5..dd4eab820a 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -147,6 +147,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 9100: return new Scene9100(); case 9150: return new Scene9150(); case 9200: return new Scene9200(); + case 9300: return new Scene9300(); case 9350: return new Scene9350(); case 9700: return new Scene9700(); case 9750: return new Scene9750(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index d05343aae3..f6238502b5 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -450,6 +450,73 @@ void Scene9200::postInit(SceneObjectList *OwnerList) { } } +/*-------------------------------------------------------------------------- + * Scene 9300 + * + *--------------------------------------------------------------------------*/ +void Scene9300::signal() { + switch (_sceneMode++) { + case 9301: + _globals->setFlag(84); + // No break on purpose + case 9303: + _globals->_soundHandler.startSound(295, 0, 127); + _globals->_sceneManager.changeScene(9350); + break; + case 9302: + _globals->_player.enableControl(); + break; + default: + break; + } +} + +void Scene9300::dispatch() { + if (_action) { + _action->dispatch(); + } else if (_globals->_player._position.y < 145) { + _globals->_player.disableControl(); + _sceneMode = 9303; + setAction(&_sequenceManager, this, 9303, &_globals->_player, &_object1, &_object2, 0); + } +} + +void Scene9300::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(130, 75, 230, 150); + + _sceneMode = 0; + _globals->_player.postInit(); + _globals->_player.changeZoom(-1); + _object1.postInit(); + _object2.postInit(); + _globals->_soundHandler.startSound(289, 0, 127); + + _hotspot1.quickInit(35, 142, 76, 212, 9300, 0, 1); + _hotspot2.quickInit(28, 90, 81, 143, 9300, 2, 3); + _hotspot3.quickInit(78, 142, 146, 216, 9300, 4, 5); + _hotspot4.quickInit(3, 43, 91, 74, 9300, 6, 7); + _hotspot5.quickInit(82, 19, 157, 65, 9300, 8, 9); + _hotspot6.quickInit(5, 218, 84, 274, 9300, 10, 11); + _hotspot7.quickInit(86, 233, 168, 293, 9300, 12, 13); + _hotspot8.quickInit(157, 0, 200, 230, 9300, 14, 15); + _hotspot9.quickInit(169, 227, 200, 320, 9300, 16, 17); + _hotspot10.quickInit(145, 97, 166, 225, 9300, 18, 19); + _hotspot11.quickInit(81, 75, 145, 145, 9300, 20, 21); + _hotspot12.quickInit(0, 0, 94, 35, 9300, 22, 23); + _hotspot13.quickInit(12, 268, 149, 320, 9300, 24, 25); + + if (_globals->_sceneManager._previousScene == 9350) { + _globals->_player.disableControl(); + _sceneMode = 9302; + setAction(&_sequenceManager, this, 9302, &_globals->_player, &_object1, &_object2, 0); + } else { + _globals->_player.disableControl(); + _sceneMode = 9301; + setAction(&_sequenceManager, this, 9301, &_globals->_player, &_object1, &_object2, 0); + } +} + /*-------------------------------------------------------------------------- * Scene 9350 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index b5a6240166..f5d1d00090 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -121,6 +121,29 @@ class Scene9200: public Scene { virtual void process(Event &event); }; +class Scene9300: public Scene { + SequenceManager _sequenceManager; + SceneObject _object1; + SceneObject _object2; + SceneHotspot_3 _hotspot1; + SceneHotspot_3 _hotspot2; + SceneHotspot_3 _hotspot3; + SceneHotspot_3 _hotspot4; + SceneHotspot_3 _hotspot5; + SceneHotspot_3 _hotspot6; + SceneHotspot_3 _hotspot7; + SceneHotspot_3 _hotspot8; + SceneHotspot_3 _hotspot9; + SceneHotspot_3 _hotspot10; + SceneHotspot_3 _hotspot11; + SceneHotspot_3 _hotspot12; + SceneHotspot_3 _hotspot13; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene9350: public Scene { /* Objects */ class Object1: public SceneObject { -- cgit v1.2.3 From 65e5a51eaf8eb2d35a4d46db7a10c1d8d8a04f6d Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 2 Apr 2011 09:36:13 +0200 Subject: TSAGE: Add Scene2 class for scene group 10, getting rid of _field30A --- engines/tsage/ringworld_scenes10.cpp | 62 ++++++++++++++++++++---------------- engines/tsage/ringworld_scenes10.h | 23 ++++++++----- 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index f6238502b5..cc04edb8d8 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -30,6 +30,12 @@ #include "tsage/staticres.h" namespace tSage { + +Scene2::Scene2() { + Scene::Scene(); + _sceneState = 0; +} + /*-------------------------------------------------------------------------- * Scene 9100 * @@ -202,9 +208,9 @@ void Scene9150::signal() { void Scene9150::dispatch() { - if ((_field30A != 0) && (_sceneBounds.left == 0)) { + if ((_sceneState != 0) && (_sceneBounds.left == 0)) { _object3._field88 = 0; - _field30A = 0; + _sceneState = 0; _sceneHotspot3.setAction(&_sequenceManager2, 0, 9154, &_object3, 0); _sceneHotspot10.remove(); } @@ -237,7 +243,7 @@ void Scene9150::postInit(SceneObjectList *OwnerList) { _globals->_player.postInit(); _object3.postInit(); - _field30A = 1; + _sceneState = 1; _object3.setVisage(9151); _object3._strip = 1; _object3._frame = 1; @@ -288,16 +294,16 @@ void Scene9200::SceneHotspot1::doAction(int action) { if (action == OBJECT_TUNIC) { _globals->_player.disableControl(); if (_globals->getFlag(93)) { - scene->_field30A = 9214; + scene->_sceneState = 9214; setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, 0); } else { _globals->setFlag(93); - scene->_field30A = 9213; + scene->_sceneState = 9213; setAction(&scene->_sequenceManager, scene, 9213, &_globals->_player, &scene->_object2, 0); } } else if (action <= 100) { _globals->_player.disableControl(); - scene->_field30A = 9214; + scene->_sceneState = 9214; setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, 0); } else { SceneHotspot_3::doAction(action); @@ -305,7 +311,7 @@ void Scene9200::SceneHotspot1::doAction(int action) { } void Scene9200::signal() { - switch (_field30A++) { + switch (_sceneState++) { case 9207: _globals->_sceneManager.changeScene(9700); break; @@ -345,27 +351,27 @@ void Scene9200::dispatch() { } else { if ( (_globals->_player._position.x <= 0) || ((_globals->_player._position.x < 100) && (_globals->_player._position.y > 199))) { _globals->_player.disableControl(); - _field30A = 9209; + _sceneState = 9209; setAction(&_sequenceManager, this, 9209, &_globals->_player, &_object2, &_object3, 0); } else { if (rect9200.contains(_globals->_player._position)) { if (_globals->getFlag(93)) { if (_globals->getFlag(86)) { - _field30A = 9215; + _sceneState = 9215; setAction(&_sequenceManager, this, 9215, &_globals->_player, &_object2, &_object3, 0); } else { - _field30A = 9208; + _sceneState = 9208; setAction(&_sequenceManager, this, 9208, &_globals->_player, &_object2, &_object3, 0); } } else { _globals->_player.disableControl(); - _field30A = 9204; + _sceneState = 9204; setAction(&_sequenceManager, this, 9204, &_globals->_player, &_object2, &_object3, 0); } } else { if (_globals->_player._position.y < 140) { _globals->_player.disableControl(); - _field30A = 9207; + _sceneState = 9207; setAction(&_sequenceManager, this, 9207, &_globals->_player, &_object2, &_object3, 0); } } @@ -412,38 +418,38 @@ void Scene9200::postInit(SceneObjectList *OwnerList) { if (_globals->getFlag(85)) { if (_globals->_inventory._helmet._sceneNumber == 1) { _globals->setFlag(86); - _field30A = 9210; + _sceneState = 9210; setAction(&_sequenceManager, this, 9210, &_globals->_player, &_object2, &_object3, 0); } else { - _field30A = 9212; + _sceneState = 9212; setAction(&_sequenceManager, this, 9212, &_globals->_player, &_object2, &_object3, 0); } } else { if (_globals->_inventory._helmet._sceneNumber == 1) { - _field30A = 9211; + _sceneState = 9211; setAction(&_sequenceManager, this, 9211, &_globals->_player, &_object2, &_object3, 0); } else { - _field30A = 9202; + _sceneState = 9202; setAction(&_sequenceManager, this, 9202, &_globals->_player, &_object2, &_object3, 0); } } break; case 9700: if (_globals->getFlag(86)) { - _field30A = 9206; + _sceneState = 9206; setAction(&_sequenceManager, this, 9206, &_globals->_player, &_object2, &_object3, 0); } else { - _field30A = 9203; + _sceneState = 9203; setAction(&_sequenceManager, this, 9203, &_globals->_player, &_object2, &_object3, 0); } break; case 9360: default: if (_globals->getFlag(86)) { - _field30A = 9205; + _sceneState = 9205; setAction(&_sequenceManager, this, 9205, &_globals->_player, &_object2, &_object3, 0); } else { - _field30A = 9201; + _sceneState = 9201; setAction(&_sequenceManager, this, 9201, &_globals->_player, &_object2, &_object3, 0); } break; @@ -531,7 +537,7 @@ void Scene9350::Object1::draw() { } void Scene9350::signal() { - switch (_field30A ++) { + switch (_sceneState ++) { case 0: case 9352: case 9353: @@ -558,16 +564,16 @@ void Scene9350::dispatch() { if ((_globals->_player._position.x <= 300) || (_globals->_player._position.y >= 160)) { if ((_globals->_player._position.x <= 110) || (_globals->_player._position.y < 195)) { _globals->_player.disableControl(); - _field30A = 9355; + _sceneState = 9355; Scene::setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, 0); } else { _globals->_player.disableControl(); - _field30A = 9357; + _sceneState = 9357; Scene::setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, 0); } } else { _globals->_player.disableControl(); - _field30A = 9356; + _sceneState = 9356; Scene::setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, 0); } } else { @@ -592,22 +598,22 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { if (_globals->_sceneManager._previousScene == 9360) { _globals->_player.disableControl(); - _field30A = 9352; + _sceneState = 9352; setAction(&_sequenceManager, this, 9352, &_globals->_player, &_object2, 0); } else if (_globals->_sceneManager._previousScene == 9400) { _globals->_player.disableControl(); - _field30A = 9353; + _sceneState = 9353; setAction(&_sequenceManager, this, 9353, &_globals->_player, &_object2, 0); } else { if (!_globals->getFlag(84)) { _globals->clearFlag(84); _object2.postInit(); _globals->_player.disableControl(); - _field30A = 9359; + _sceneState = 9359; setAction(&_sequenceManager, this, 9359, &_globals->_player, &_object2, 0); } else { _globals->_player.disableControl(); - _field30A = 9354; + _sceneState = 9354; setAction(&_sequenceManager, this, 9354, &_globals->_player, &_object2, 0); } } diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index f5d1d00090..dd305f4f6f 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -35,6 +35,17 @@ namespace tSage { +class Scene2: public Scene { +public : + int _sceneState; + + Scene2(); + virtual void synchronise(Serialiser &s) { + Scene::synchronise(s); + s.syncAsSint16LE(_sceneState); + } +}; + class Scene9100: public Scene { /* Items */ class SceneHotspot1: public SceneHotspot_3 { @@ -61,7 +72,7 @@ class Scene9100: public Scene { virtual void dispatch(); }; -class Scene9150: public Scene { +class Scene9150: public Scene2 { class Object3: public SceneObject4 { public: virtual void signal(); @@ -73,7 +84,6 @@ class Scene9150: public Scene { SceneObject _object1; SceneObject _object2; Object3 _object3; - int _field30A; SceneHotspot_3 _sceneHotspot1; SceneHotspot_3 _sceneHotspot2; SceneHotspot_3 _sceneHotspot3; @@ -90,7 +100,7 @@ class Scene9150: public Scene { virtual void dispatch(); }; -class Scene9200: public Scene { +class Scene9200: public Scene2 { class SceneHotspot1: public SceneHotspot_3{ public: virtual void doAction(int action); @@ -100,7 +110,6 @@ class Scene9200: public Scene { SceneObject _object1; SceneObject _object2; SceneObject _object3; - int _field30A; Action _action1; SpeakerGText _speakerGText; SpeakerGR _speakerGR; @@ -144,7 +153,7 @@ class Scene9300: public Scene { virtual void dispatch(); }; -class Scene9350: public Scene { +class Scene9350: public Scene2 { /* Objects */ class Object1: public SceneObject { public: @@ -153,7 +162,6 @@ class Scene9350: public Scene { }; public: - int _field30A; SequenceManager _sequenceManager; Object1 _object1; SceneObject _object2; @@ -168,8 +176,7 @@ public: virtual void dispatch(); }; -class Scene9700: public Scene { - int _field30A; +class Scene9700: public Scene2 { SequenceManager _sequenceManager; SceneObject _object1; SceneHotspot_3 _sceneHotspot1; -- cgit v1.2.3 From 80f51e5768db35c4ce3b379bc240e43bf1c36532 Mon Sep 17 00:00:00 2001 From: strangerke Date: Sat, 2 Apr 2011 18:00:58 +0200 Subject: TSAGE: Implement Scene 9360, move Scene9350::Object1 to a separated subclass, Fix bug in scene 9350 --- engines/tsage/ringworld_logic.cpp | 1 + engines/tsage/ringworld_scenes10.cpp | 117 +++++++++++++++++++++++++++++------ engines/tsage/ringworld_scenes10.h | 34 +++++++--- 3 files changed, 123 insertions(+), 29 deletions(-) diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index dd4eab820a..3900083c98 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -149,6 +149,7 @@ Scene *SceneFactory::createScene(int sceneNumber) { case 9200: return new Scene9200(); case 9300: return new Scene9300(); case 9350: return new Scene9350(); + case 9360: return new Scene9360(); case 9700: return new Scene9700(); case 9750: return new Scene9750(); case 9999: return new Scene9999(); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index cc04edb8d8..bebf199a2d 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -36,6 +36,15 @@ Scene2::Scene2() { _sceneState = 0; } +void Object9350::postInit(SceneObjectList *OwnerList) { + warning("Object9350::postInit - Weird cast to be verified"); + _globals->_sceneManager.postInit((SceneObjectList*) &_globals->_sceneManager._sceneChangeListeners); +} + +void Object9350::draw() { + warning("Scene9350::Object1::draw - TODO"); +} + /*-------------------------------------------------------------------------- * Scene 9100 * @@ -527,14 +536,6 @@ void Scene9300::postInit(SceneObjectList *OwnerList) { * Scene 9350 * *--------------------------------------------------------------------------*/ -void Scene9350::Object1::postInit(SceneObjectList *OwnerList) { - warning("Scene9350::Object1::postInit - Weird cast to be verified"); - _globals->_sceneManager.postInit((SceneObjectList*) &_globals->_sceneManager._sceneChangeListeners); -} - -void Scene9350::Object1::draw() { - warning("Scene9350::Object1::draw - TODO"); -} void Scene9350::signal() { switch (_sceneState ++) { @@ -561,20 +562,18 @@ void Scene9350::signal() { void Scene9350::dispatch() { if (_action == 0) { - if ((_globals->_player._position.x <= 300) || (_globals->_player._position.y >= 160)) { - if ((_globals->_player._position.x <= 110) || (_globals->_player._position.y < 195)) { - _globals->_player.disableControl(); - _sceneState = 9355; - Scene::setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, 0); - } else { - _globals->_player.disableControl(); - _sceneState = 9357; - Scene::setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, 0); - } - } else { + if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) { _globals->_player.disableControl(); _sceneState = 9356; - Scene::setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, 0); + setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, 0); + } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) { + _globals->_player.disableControl(); + _sceneState = 9357; + setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, 0); + } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) { + _globals->_player.disableControl(); + _sceneState = 9355; + setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, 0); } } else { Scene::dispatch(); @@ -619,6 +618,84 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { } } +/*-------------------------------------------------------------------------- + * Scene 9360 + * + *--------------------------------------------------------------------------*/ + +void Scene9360::signal() { + switch (_sceneState ++) { + case 0: + case 9362: + case 9363: + case 9364: + _globals->_player.enableControl(); + break; + case 9365: + _globals->_sceneManager.changeScene(9350); + break; + case 9366: + _globals->_sceneManager.changeScene(9200); + break; + case 9367: + _globals->_sceneManager.changeScene(9450); + break; + default: + break; + } +} + +void Scene9360::dispatch() { + if (_action == 0) { + if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) { + _globals->_player.disableControl(); + _sceneState = 9366; + setAction(&_sequenceManager, this, 9366, &_globals->_player, 0); + } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) { + _globals->_player.disableControl(); + _sceneState = 9367; + setAction(&_sequenceManager, this, 9367, &_globals->_player, 0); + } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) { + _globals->_player.disableControl(); + _sceneState = 9365; + setAction(&_sequenceManager, this, 9365, &_globals->_player, 0); + } + } else { + Scene::dispatch(); + } +} + +void Scene9360::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + setZoomPercents(95, 80, 200, 100); + _globals->_player.postInit(); + + _hotspot1.quickInit(37, 92, 93, 173, 9360, 0, 1); + _hotspot2.quickInit(42, 0, 100, 63, 9360, 2, -1); + _hotspot3.quickInit(36, 205, 82, 260, 9360, 3, -1); + _hotspot4.quickInit(103, 2, 200, 320, 9360, 4, -1); + _hotspot5.quickInit(0, 0, 37, 320, 9360, 4, -1); + _hotspot6.quickInit(35, 61, 103, 92, 9360, 4, -1); + _hotspot7.quickInit(33, 174, 93, 207, 9360, 4, -1); + _hotspot8.quickInit(28, 257, 149, 320, 9360, 4, -1); + _globals->_events.setCursor(CURSOR_WALK); + _globals->_player.disableControl(); + if (_globals->_sceneManager._previousScene == 9350) { + _globals->_player.disableControl(); + _sceneState = 9364; + setAction(&_sequenceManager, this, 9364, &_globals->_player, 0); + } else if (_globals->_sceneManager._previousScene == 9450) { + _globals->_player.disableControl(); + _sceneState = 9363; + setAction(&_sequenceManager, this, 9363, &_globals->_player, 0); + } else { + _globals->_player.disableControl(); + _sceneState = 9362; + setAction(&_sequenceManager, this, 9362, &_globals->_player, 0); + } + _object1.quickInit(9351, 1, 1, 131, 90, 0); +} + /*-------------------------------------------------------------------------- * Scene 9700 * diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h index dd305f4f6f..c321d53e85 100644 --- a/engines/tsage/ringworld_scenes10.h +++ b/engines/tsage/ringworld_scenes10.h @@ -46,6 +46,12 @@ public : } }; +class Object9350: public SceneObject { +public: + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void draw(); +}; + class Scene9100: public Scene { /* Items */ class SceneHotspot1: public SceneHotspot_3 { @@ -154,16 +160,8 @@ class Scene9300: public Scene { }; class Scene9350: public Scene2 { - /* Objects */ - class Object1: public SceneObject { - public: - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void draw(); - }; - -public: SequenceManager _sequenceManager; - Object1 _object1; + Object9350 _object1; SceneObject _object2; SceneHotspot_3 _sceneHotspot1; SceneHotspot_3 _sceneHotspot2; @@ -176,6 +174,24 @@ public: virtual void dispatch(); }; +class Scene9360: public Scene2 { + SequenceManager _sequenceManager; + Action _action1; + Object9350 _object1; + SceneHotspot_3 _hotspot1; + SceneHotspot_3 _hotspot2; + SceneHotspot_3 _hotspot3; + SceneHotspot_3 _hotspot4; + SceneHotspot_3 _hotspot5; + SceneHotspot_3 _hotspot6; + SceneHotspot_3 _hotspot7; + SceneHotspot_3 _hotspot8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene9700: public Scene2 { SequenceManager _sequenceManager; SceneObject _object1; -- cgit v1.2.3