From b3d14a1f673638dc26391bffd236d2e2248e19ef Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 24 Oct 2011 21:46:03 +1100 Subject: TSAGE: Rename of inventory constants and scene objects for first R2 scene --- engines/tsage/ringworld2/ringworld2_logic.cpp | 13 ++--- engines/tsage/ringworld2/ringworld2_logic.h | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 63 +++++++++++++------------ engines/tsage/ringworld2/ringworld2_scenes0.h | 8 ++-- 4 files changed, 46 insertions(+), 40 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0bdcf36d0c..ce29ae7235 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -281,7 +281,7 @@ Ringworld2InvObjectList::Ringworld2InvObjectList(): _none(1, 1), _inv1(1, 2), _inv2(1, 3), - _inv3(1, 4), + _negatorGun(1, 4), _steppingDisks(1, 5), _inv5(1, 6), _inv6(1, 7), @@ -336,7 +336,7 @@ Ringworld2InvObjectList::Ringworld2InvObjectList(): _itemList.push_back(&_none); _itemList.push_back(&_inv1); _itemList.push_back(&_inv2); - _itemList.push_back(&_inv3); + _itemList.push_back(&_negatorGun); _itemList.push_back(&_steppingDisks); _itemList.push_back(&_inv5); _itemList.push_back(&_inv6); @@ -400,7 +400,7 @@ void Ringworld2InvObjectList::reset() { // Set up default inventory setObjectScene(R2_1, 800); setObjectScene(R2_2, 400); - setObjectScene(R2_3, 100); + setObjectScene(R2_NEGATOR_GUN, 100); setObjectScene(R2_STEPPING_DISKS, 100); setObjectScene(R2_5, 400); setObjectScene(R2_6, 400); @@ -483,11 +483,12 @@ void Ringworld2Game::start() { } if (slot >= 0) - g_globals->_sceneHandler->_loadGameSlot = slot; + R2_GLOBALS._sceneHandler->_loadGameSlot = slot; else { // Switch to the first game scene - g_globals->_events.setCursor(CURSOR_WALK); - g_globals->_sceneManager.setNewScene(100); + R2_GLOBALS._events.setCursor(CURSOR_WALK); + R2_GLOBALS._uiElements._active = true; + R2_GLOBALS._sceneManager.setNewScene(100); } g_globals->_events.showCursor(); diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index bfb3281d5d..13f230c78f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -117,7 +117,7 @@ public: InvObject _none; InvObject _inv1; InvObject _inv2; - InvObject _inv3; + InvObject _negatorGun; InvObject _steppingDisks; InvObject _inv5; InvObject _inv6; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 526bf6e3c9..004c6c2b2b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -63,7 +63,7 @@ bool Scene100::Object7::startAction(CursorType action, Event &event) { } } -bool Scene100::Object8::startAction(CursorType action, Event &event) { +bool Scene100::Table::startAction(CursorType action, Event &event) { Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -72,21 +72,21 @@ bool Scene100::Object8::startAction(CursorType action, Event &event) { if (_strip == 2) { scene->_sceneMode = 108; scene->_object3.postInit(); - scene->_object9.postInit(); + scene->_stasisNegator.postInit(); - if (R2_INVENTORY.getObjectScene(R2_3) == 1) { - scene->_object9.setup(100, 7, 2); + if (R2_INVENTORY.getObjectScene(R2_NEGATOR_GUN) == 1) { + scene->_stasisNegator.setup(100, 7, 2); } else { - scene->_object9.setup(100, 7, 1); - scene->_object9.setDetails(100, 21, 22, 23, 2, NULL); + scene->_stasisNegator.setup(100, 7, 1); + scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, NULL); } scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3, - &scene->_object9, &R2_GLOBALS._player, NULL); + &scene->_stasisNegator, &R2_GLOBALS._player, NULL); } else { scene->_sceneMode = 109; scene->setAction(&scene->_sequenceManager2, scene, 109, this, &scene->_object3, - &scene->_object9, &R2_GLOBALS._player, NULL); + &scene->_stasisNegator, &R2_GLOBALS._player, NULL); } return true; case CURSOR_TALK: @@ -96,22 +96,22 @@ bool Scene100::Object8::startAction(CursorType action, Event &event) { SceneItem::display2(100, 18); scene->_sceneMode = 102; scene->_object3.postInit(); - scene->_object9.postInit(); + scene->_stasisNegator.postInit(); - if (R2_INVENTORY.getObjectScene(R2_3) == 1) { - scene->_object9.setup(100, 7, 2); + if (R2_INVENTORY.getObjectScene(R2_NEGATOR_GUN) == 1) { + scene->_stasisNegator.setup(100, 7, 2); } else { - scene->_object9.setup(100, 7, 1); - scene->_object9.setDetails(100, 21, 22, 23, 2, NULL); + scene->_stasisNegator.setup(100, 7, 1); + scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, NULL); } scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3, - &scene->_object9, NULL); + &scene->_stasisNegator, NULL); } else { SceneItem::display2(100, 19); scene->_sceneMode = 103; scene->setAction(&scene->_sequenceManager2, scene, 103, this, &scene->_object3, - &scene->_object9, NULL); + &scene->_stasisNegator, NULL); } return true; default: @@ -119,14 +119,14 @@ bool Scene100::Object8::startAction(CursorType action, Event &event) { } } -bool Scene100::Object9::startAction(CursorType action, Event &event) { +bool Scene100::StasisNegator::startAction(CursorType action, Event &event) { Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: R2_GLOBALS._player.disableControl(); scene->_sceneMode = 107; - scene->setAction(&scene->_sequenceManager1, scene, 107, &R2_GLOBALS._player, &scene->_object9, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 107, &R2_GLOBALS._player, &scene->_stasisNegator, NULL); return true; default: return SceneActor::startAction(action, event); @@ -187,10 +187,10 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _object10.setup(100, 2, 1); _object10.setDetails(100, -1, -1, -1, 1, NULL); - _object8.postInit(); - _object8.setup(100, 2, 3); - _object8.setPosition(Common::Point(175, 157)); - _object8.setDetails(100, 17, 18, 20, 1, NULL); + _table.postInit(); + _table.setup(100, 2, 3); + _table.setPosition(Common::Point(175, 157)); + _table.setDetails(100, 17, 18, 20, 1, NULL); _object1.postInit(); _object1.setup(100, 3, 1); @@ -267,11 +267,11 @@ void Scene100::signal() { break; case 103: case 109: - _object8.setStrip(2); - _object8.setFrame(3); + _table.setStrip(2); + _table.setFrame(3); _object3.remove(); - _object9.remove(); + _stasisNegator.remove(); R2_GLOBALS._player.enableControl(); break; case 104: @@ -288,10 +288,10 @@ void Scene100::signal() { R2_GLOBALS._sceneManager.changeScene(125); break; case 107: - R2_GLOBALS._sceneItems.remove(&_object9); + R2_GLOBALS._sceneItems.remove(&_stasisNegator); - _object9.setFrame(2); - R2_INVENTORY.setObjectScene(3, 1); + _stasisNegator.setFrame(2); + R2_INVENTORY.setObjectScene(R2_NEGATOR_GUN, 1); R2_GLOBALS._player.enableControl(); break; case 110: @@ -304,6 +304,11 @@ void Scene100::signal() { } R2_GLOBALS._player.enableControl(); break; + case 111: + R2_INVENTORY.setObjectScene(R2_STEPPING_DISKS, 1); + _steppingDisks.remove(); + R2_GLOBALS._player.enableControl(); + break; default: R2_GLOBALS._player.enableControl(); break; @@ -321,8 +326,8 @@ void Scene100::dispatch() { */ SceneExt::dispatch(); - if ((_sceneMode == 101) && (_object7._frame == 2) && (_object8._strip == 5)) { - _object8.setAction(&_sequenceManager2, NULL, 103, &_object8, &_object3, &_object9, NULL); + if ((_sceneMode == 101) && (_object7._frame == 2) && (_table._strip == 5)) { + _table.setAction(&_sequenceManager2, NULL, 103, &_table, &_object3, &_stasisNegator, NULL); } } diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index c51b044137..4a38e78ba3 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -44,11 +44,11 @@ class Scene100: public SceneExt { public: bool startAction(CursorType action, Event &event); }; - class Object8: public SceneActor { + class Table: public SceneActor { public: bool startAction(CursorType action, Event &event); }; - class Object9: public SceneActor { + class StasisNegator: public SceneActor { public: bool startAction(CursorType action, Event &event); }; @@ -65,8 +65,8 @@ public: SceneActor _object1, _object2, _object3, _object4, _object5; SceneActor _object6; Object7 _object7; - Object8 _object8; - Object9 _object9; + Table _table; + StasisNegator _stasisNegator; Object10 _object10; SteppingDisks _steppingDisks; SequenceManager _sequenceManager1, _sequenceManager2; -- cgit v1.2.3 From 9ccb2eea32e4b85394295f4eed9884f05bf75c08 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Oct 2011 20:45:38 +1100 Subject: TSAGE: Added R2 _shade and _effect fields to scene objects class. --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 --- engines/tsage/ringworld2/ringworld2_logic.h | 1 - engines/tsage/ringworld2/ringworld2_scenes0.cpp | 5 ++--- 3 files changed, 2 insertions(+), 7 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ce29ae7235..d033627ae9 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -690,9 +690,6 @@ void SceneActor::synchronize(Serializer &s) { s.syncAsSint16LE(_lookLineNum); s.syncAsSint16LE(_talkLineNum); s.syncAsSint16LE(_useLineNum); - - s.syncAsSint16LE(_effect); - s.syncAsSint16LE(_shade); } bool SceneActor::startAction(CursorType action, Event &event) { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 13f230c78f..b12978344c 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -219,7 +219,6 @@ class SceneActor: public SceneObject { public: int _resNum; int _lookLineNum, _talkLineNum, _useLineNum; - int _effect, _shade; virtual Common::String getClassName() { return "SceneActor"; } virtual void synchronize(Serializer &s); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 004c6c2b2b..edc3f06aa2 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -316,14 +316,13 @@ void Scene100::signal() { } void Scene100::dispatch() { -/* int regionIndex = R2_GLOBALS._player.getRegionIndex(); if (regionIndex == 13) R2_GLOBALS._player._shade = 4; if ((R2_GLOBALS._player._visage == 13) || (R2_GLOBALS._player._visage == 101)) - (R2_GLOBALS._player._shade = 0; -*/ + R2_GLOBALS._player._shade = 0; + SceneExt::dispatch(); if ((_sceneMode == 101) && (_object7._frame == 2) && (_table._strip == 5)) { -- cgit v1.2.3 From 0baf8f546774cd2d874be0551e33358846383b33 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 26 Oct 2011 20:12:06 +1100 Subject: TSAGE: Some bugfixes and field renaming for R2 scene 100 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 48 ++++++++++++++++--------- engines/tsage/ringworld2/ringworld2_scenes0.h | 14 ++++++-- 2 files changed, 43 insertions(+), 19 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index edc3f06aa2..a2fb011d23 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -34,7 +34,7 @@ namespace Ringworld2 { * *--------------------------------------------------------------------------*/ -bool Scene100::Object7::startAction(CursorType action, Event &event) { +bool Scene100::Door::startAction(CursorType action, Event &event) { Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -169,6 +169,22 @@ bool Scene100::SteppingDisks::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ +bool Scene100::Terminal::startAction(CursorType action, Event &event) { + Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 105; + scene->setAction(&scene->_sequenceManager1, scene, 105, &R2_GLOBALS._player, this, NULL); + return true; + default: + return NamedHotspot::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + void Scene100::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(100); @@ -177,11 +193,11 @@ void Scene100::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene != 125) R2_GLOBALS._sound1.play(10); - _object7.postInit(); - _object7._state = 0; - _object7.setVisage(100); - _object7.setPosition(Common::Point(160, 84)); - _object7.setDetails(100, 3, 4, 5, 1, NULL); + _door.postInit(); + _door._state = 0; + _door.setVisage(100); + _door.setPosition(Common::Point(160, 84)); + _door.setDetails(100, 3, 4, 5, 1, NULL); _object10.postInit(); _object10.setup(100, 2, 1); @@ -219,17 +235,17 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _steppingDisks.setDetails(100, 40, -1, 42, 1, NULL); } - _item5.setDetails(11, 100, 14, 15, 16); - _item4.setDetails(12, 100, 11, -1, 13); - _item3.setDetails(13, 100, 8, 9, 10); - _item2.setDetails(14, 100, 34, -1, 36); + _terminal.setDetails(11, 100, 14, 15, 16); + _desk.setDetails(12, 100, 11, -1, 13); + _bed.setDetails(13, 100, 8, 9, 10); + _duct.setDetails(14, 100, 34, -1, 36); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.setVisage(10); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); - _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 100, 0, 1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 100, 0, 1, -1, 1, NULL); switch (R2_GLOBALS._sceneManager._previousScene) { case 50: @@ -245,7 +261,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { break; case 200: _sceneMode = 100; - setAction(&_sequenceManager1, this, 100, &R2_GLOBALS._player, &_object7, NULL); + setAction(&_sequenceManager1, this, 100, &R2_GLOBALS._player, &_door, NULL); break; default: R2_GLOBALS._player.setStrip(3); @@ -295,11 +311,11 @@ void Scene100::signal() { R2_GLOBALS._player.enableControl(); break; case 110: - if (_object7._state) { - _object7._state = 0; + if (_door._state) { + _door._state = 0; _object10.setFrame(1); } else { - _object7._state = 1; + _door._state = 1; _object10.setFrame(2); } R2_GLOBALS._player.enableControl(); @@ -325,7 +341,7 @@ void Scene100::dispatch() { SceneExt::dispatch(); - if ((_sceneMode == 101) && (_object7._frame == 2) && (_table._strip == 5)) { + if ((_sceneMode == 101) && (_door._frame == 2) && (_table._strip == 5)) { _table.setAction(&_sequenceManager2, NULL, 103, &_table, &_object3, &_stasisNegator, NULL); } } diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 4a38e78ba3..a80bda0726 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -40,7 +40,7 @@ using namespace TsAGE; class Scene100: public SceneExt { /* Objects */ - class Object7: public SceneActorExt { + class Door: public SceneActorExt { public: bool startAction(CursorType action, Event &event); }; @@ -60,11 +60,19 @@ class Scene100: public SceneExt { public: bool startAction(CursorType action, Event &event); }; + + /* Items */ + class Terminal: public NamedHotspot{ + public: + bool startAction(CursorType action, Event &event); + }; + public: - NamedHotspot _item1, _item2, _item3, _item4, _item5; + NamedHotspot _background, _duct, _bed, _desk; + Terminal _terminal; SceneActor _object1, _object2, _object3, _object4, _object5; SceneActor _object6; - Object7 _object7; + Door _door; Table _table; StasisNegator _stasisNegator; Object10 _object10; -- cgit v1.2.3 From 7ec4052c1b0ef9a83c4bb79b7d9fccc701fd0046 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 30 Oct 2011 19:47:51 +1100 Subject: TSAGE: In progress implementation of R2RW scene 125 - Console --- engines/tsage/ringworld2/ringworld2_logic.cpp | 5 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 767 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 56 ++ 3 files changed, 827 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d033627ae9..f9ac2efcbf 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -38,6 +38,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Quinn's room case 100: return new Scene100(); + // Computer console + case 125: return new Scene125(); + default: error("Unknown scene number - %d", sceneNumber); break; @@ -398,7 +401,7 @@ void Ringworld2InvObjectList::reset() { } // Set up default inventory - setObjectScene(R2_1, 800); + setObjectScene(R2_OPTO_DISK, 800); setObjectScene(R2_2, 400); setObjectScene(R2_NEGATOR_GUN, 100); setObjectScene(R2_STEPPING_DISKS, 100); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index a2fb011d23..c03005ba8f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -346,6 +346,773 @@ void Scene100::dispatch() { } } +/*-------------------------------------------------------------------------- + * Scene 125 - Computer Terminal + * + *--------------------------------------------------------------------------*/ + +bool Scene125::Object5::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) + return true; + else + return SceneActor::startAction(action, event); +} + +/*--------------------------------------------------------------------------*/ + +void Scene125::Icon::postInit(SceneObjectList *OwnerList) { + SceneObject::postInit(); + _lookLineNum = 0; + _pressed = false; + + _object1.postInit(); + _object1.hide(); + + _sceneText1._color1 = 92; + _sceneText1._color2 = 0; + _sceneText1._width = 200; + _sceneText2._color1 = 0; + _sceneText2._color2 = 0; + _sceneText2._width = 200; + setDetails(125, -1, -1, -1, 2, NULL); +} + +void Scene125::Icon::synchronize(Serializer &s) { + SceneActor::synchronize(s); + s.syncAsSint16LE(_lookLineNum); + s.syncAsSint16LE(_field98); + s.syncAsSint16LE(_pressed); +} + +void Scene125::Icon::process(Event &event) { + Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; + + if (!event.handled && !(_flags & OBJFLAG_HIDING) && R2_GLOBALS._player._uiEnabled && + (event.eventType == EVENT_BUTTON_DOWN)) { + + int regionIndex = R2_GLOBALS._sceneRegions.indexOf(event.mousePos); + + switch (R2_GLOBALS._events.getCursor()) { + case CURSOR_LOOK: + if (regionIndex == _sceneRegionId) { + event.handled = true; + if (_lookLineNum == 26) { + SceneItem::display2(130, 7); + } else { + SceneItem::display2(130, _lookLineNum); + } + } + break; + + case CURSOR_USE: + if ((regionIndex == _sceneRegionId) && !_pressed) { + scene->_sound1.play(14); + setFrame(2); + + switch (_object1._strip) { + case 1: + _object1.setStrip(2); + break; + case 3: + _object1.setStrip(4); + break; + case 5: + _object1.setStrip(6); + break; + default: + break; + } + + _pressed = true; + event.handled = true; + } + break; + + default: + break; + } + + if ((event.eventType == EVENT_BUTTON_UP) && _pressed) { + switch (_object1._strip) { + case 2: + _object1.setStrip(1); + break; + case 4: + _object1.setStrip(3); + break; + case 6: + _object1.setStrip(5); + break; + default: + break; + } + + _pressed = false; + event.handled = true; + scene->consoleAction(_lookLineNum); + } + } +} + +void Scene125::Icon::setIcon(int id) { + Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; + + _lookLineNum = _field98 = id; + SceneActor::_lookLineNum = id; + + _sceneText1.remove(); + _sceneText2.remove(); + + if (_lookLineNum) { + showIcon(); + _object1.setup(161, ((id - 1) / 10) * 2 + 1, ((id - 1) % 10) + 1); + _object1.setPosition(_position); + + _sceneText1._fontNumber = scene->_iconFontNumber; + _sceneText1.setup(CONSOLE_MESSAGES[id]); + _sceneText1.fixPriority(20); + + _sceneText2._fontNumber = scene->_iconFontNumber; + _sceneText2.setup(CONSOLE_MESSAGES[id]); + _sceneText2.fixPriority(20); + + _sceneText2._fontNumber = scene->_iconFontNumber; + _sceneText2.setup(CONSOLE_MESSAGES[id]); + _sceneText2.fixPriority(10); + + switch (_lookLineNum) { + case 5: + _sceneText1.setPosition(Common::Point(62, _position.y + 8)); + _sceneText2.setPosition(Common::Point(64, _position.y + 10)); + break; + case 6: + case 7: + case 24: + case 25: + _sceneText1.setPosition(Common::Point(65, _position.y + 8)); + _sceneText2.setPosition(Common::Point(67, _position.y + 10)); + break; + case 26: + _sceneText1.setPosition(Common::Point(83, _position.y + 8)); + _sceneText2.setPosition(Common::Point(85, _position.y + 10)); + break; + default: + _sceneText1.setPosition(Common::Point(121, _position.y + 8)); + _sceneText2.setPosition(Common::Point(123, _position.y + 10)); + break; + } + } else { + hideIcon(); + } +} + +void Scene125::Icon::showIcon() { + _sceneText1.show(); + _sceneText2.show(); + _object1.show(); + _object2.show(); + show(); +} + +void Scene125::Icon::hideIcon() { + _sceneText1.hide(); + _sceneText2.hide(); + _object1.hide(); + _object2.hide(); + hide(); +} + +/*--------------------------------------------------------------------------*/ + +bool Scene125::Item4::startAction(CursorType action, Event &event) { + Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; + switch (action) { + case CURSOR_USE: + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._diskScene) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 126; + scene->setAction(&scene->_sequenceManager, scene, 126, &scene->_object7, NULL); + return true; + } + break; + case R2_OPTO_DISK: + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 1) { + R2_GLOBALS._player.disableControl(); + scene->_object7.postInit(); + scene->_sceneMode = 125; + scene->setAction(&scene->_sequenceManager, scene, 125, &scene->_object7, NULL); + return true; + } + break; + default: + break; + } + + return SceneHotspot::startAction(action, event); +} + +/*--------------------------------------------------------------------------*/ + +Scene125::Scene125(): SceneExt() { + _soundCount = _soundIndex = 0; + _iconFontNumber = 50; + _field412 = 5; +} + +void Scene125::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(160); + _palette.loadPalette(0); + + if (R2_GLOBALS._v5657C == 125) + R2_GLOBALS._diskScene = R2_GLOBALS._sceneManager._previousScene; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._diskScene) { + _object7.postInit(); + _object7.setup(160, 3, 5); + _object7.setPosition(Common::Point(47, 167)); + } + + _object6.postInit(); + _object6.setup(162, 1, 1); + _object6.setPosition(Common::Point(214, 168)); + + _item4.setDetails(Rect(27, 145, 81, 159), 126, 9, -1, -1, 1, NULL); + _item3.setDetails(Rect(144, 119, 286, 167), 126, 6, 7, 8, 1, NULL); + _item2.setDetails(1, 126, 3, 4, 5); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 126, 0, 1, -1, 1, NULL); + + _sceneMode = 1; + signal(); +} + +void Scene125::signal() { + switch (_sceneMode) { + case 1: + _icon1.postInit(); + _icon1._sceneRegionId = 2; + _icon2.postInit(); + _icon2._sceneRegionId = 3; + _icon3.postInit(); + _icon3._sceneRegionId = 4; + _icon4.postInit(); + _icon4._sceneRegionId = 5; + + setAction(&_sequenceManager, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, &R2_GLOBALS._player, NULL); + break; + case 2: + _icon1.setup(160, 1, 1); + _icon1.setPosition(Common::Point(65, 17)); + _icon1._object2.postInit(); + _icon1._object2.setup(160, 7, 1); + _icon1._object2.setPosition(Common::Point(106, 41)); + + _icon2.setup(160, 1, 1); + _icon2.setPosition(Common::Point(80, 32)); + _icon2._object2.postInit(); + _icon2._object2.setup(160, 7, 2); + _icon2._object2.setPosition(Common::Point(106, 56)); + + _icon3.setup(160, 1, 1); + _icon3.setPosition(Common::Point(65, 47)); + _icon3._object2.postInit(); + _icon3._object2.setup(160, 7, 1); + _icon3._object2.setPosition(Common::Point(106, 71)); + + _icon4.setup(160, 1, 1); + _icon4.setPosition(Common::Point(80, 62)); + _icon4._sceneRegionId = 5; + _icon4._object2.postInit(); + _icon4._object2.setup(160, 7, 2); + _icon4._object2.setPosition(Common::Point(106, 86)); + + _icon5.postInit(); + _icon5.setup(160, 1, 1); + _icon5.setPosition(Common::Point(37, 92)); + _icon5.setIcon(6); + _icon5._sceneRegionId = 7; + + _icon6.postInit(); + _icon6.setPosition(Common::Point(106, 110)); + _icon6.setIcon(5); + _icon6._sceneRegionId = 8; + + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + case 10: + switch (_field412) { + case 12: + _sceneMode = 129; + + _object1.postInit(); + _object2.postInit(); + _object3.postInit(); + + if (R2_GLOBALS.getFlag(13)) { + _object4.postInit(); + setAction(&_sequenceManager, this, 130, &R2_GLOBALS._player, &_object1, &_object2, + &_object3, &_object4, NULL); + } else { + setAction(&_sequenceManager, this, 129, &R2_GLOBALS._player, &_object1, &_object2, &_object3, NULL); + } + break; + case 13: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field41A = 0; + setDetails(129, 0); + break; + case 23: + R2_GLOBALS._sceneManager.changeScene(1330); + break; + case 27: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field418 = 0; + setDetails(128, 0); + break; + case 28: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field418 = 37; + setDetails(128, 37); + break; + case 29: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field418 = 68; + setDetails(128, 68); + break; + case 30: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field418 = 105; + setDetails(128, 105); + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field416 = 0; + setDetails(127, 0); + break; + } + break; + case 11: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + + if ((_field412 >= 27) && (_field412 <= 30)) { + consoleAction(11); + } + consoleAction(2); + _icon6.setIcon(5); + break; + case 12: + if (_soundCount > 0) + --_soundCount; + if (!_soundCount || (R2_GLOBALS._v57C2C == 2)) { + _soundIndex = 0; + R2_GLOBALS._playStream.stop(); + } else { + _sceneMode = 12; + R2_GLOBALS._playStream.play(_soundIndexes[_soundIndex++], this); + } + break; + case 125: + warning("TODO: Scene125::signal #125"); + break; + case 126: + R2_INVENTORY.setObjectScene(R2_OPTO_DISK, 1); + _object7.remove(); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + case 128: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + SceneItem::display2(126, 12); + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + } +} + +void Scene125::synchronize(Serializer &s) { + error("TODO"); +} + +void Scene125::process(Event &event) { + SceneExt::process(event); + + if (R2_GLOBALS._player._uiEnabled) { + _icon1.process(event); + _icon2.process(event); + _icon3.process(event); + _icon4.process(event); + _icon5.process(event); + _icon6.process(event); + } +} + +void Scene125::dispatch() { + if (_soundCount) + R2_GLOBALS._playStream.proc1(); + + Scene::dispatch(); +} + +void Scene125::consoleAction(int id) { + _icon3.setIcon(0); + _icon4.setIcon(0); + + if (id == 5) + _icon5.setIcon(5); + else { + switch (_field412) { + case 10: + case 12: + case 13: + case 27: + case 28: + case 29: + case 30: + break; + default: + _icon5.setIcon(7); + break; + } + } + + switch (id) { + case 0: + _icon1.setIcon(8); + _icon2.setIcon(9); + break; + case 1: + _icon1.setIcon(10); + _icon2.setIcon(11); + _icon3.setIcon(12); + _icon4.setIcon(13); + break; + case 2: + _icon1.setIcon(15); + _icon2.setIcon(16); + _icon3.setIcon(17); + break; + case 3: + _icon1.setIcon(22); + _icon2.setIcon(23); + break; + case 5: + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldSceneNumber); + break; + case 6: + if (_field412 == 11) + consoleAction(2); + else if (_field412 == 22) + consoleAction(4); + else + consoleAction(5); + break; + case 7: + _iconFontNumber = 50; + stop(); + _icon6.setIcon(5); + consoleAction(1); + break; + case 8: + _iconFontNumber = 52; + stop(); + _icon6.setIcon(5); + consoleAction(1); + break; + case 9: + R2_GLOBALS._player.disableControl(); + consoleAction(2); + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + _icon5.setIcon(24); + + _icon4.setPosition(Common::Point(52, 107)); + _icon4._sceneRegionId = 9; + _icon4.setIcon(25); + _icon4._object2.hide(); + + _icon6.setIcon(26); + _sceneMode = 10; + + _palette.loadPalette(161); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + break; + case 10: + _icon1.setIcon(27); + _icon2.setIcon(28); + _icon3.setIcon(29); + _icon4.setIcon(30); + break; + case 11: + R2_GLOBALS._player.disableControl(); + consoleAction(2); + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + _icon4.hideIcon(); + _icon5.hideIcon(); + + _icon6.setIcon(26); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + break; + case 12: + consoleAction(2); + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != R2_GLOBALS._player._oldSceneNumber) { + SceneItem::display2(126, 17); + } else { + R2_GLOBALS._player.disableControl(); + + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + _icon5.setIcon(24); + + _icon4.setPosition(Common::Point(52, 107)); + _icon4._sceneRegionId = 9; + _icon4.setIcon(25); + _icon4._object2.hide(); + + _icon6.setIcon(26); + _sceneMode = 10; + + _palette.loadPalette(161); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + } + break; + case 14: + consoleAction(3); + + if (R2_GLOBALS._v565F5 < 3) { + R2_GLOBALS._player.disableControl(); + _object5.postInit(); + _object5.setup(162, 2, 2); + _object5.setPosition(Common::Point(216, UI_INTERFACE_Y)); + + R2_GLOBALS._v565F5 += 2; + } else if (R2_GLOBALS._v565F5 == 3) { + SceneItem::display2(126, 13); + } else { + SceneItem::display2(126, 14); + } + break; + case 15: + consoleAction(3); + + if (R2_GLOBALS._v565F5 < 4) { + R2_GLOBALS._player.disableControl(); + _object5.postInit(); + _object5.setup(162, 2, 3); + _object5.setPosition(Common::Point(218, UI_INTERFACE_Y)); + + ++R2_GLOBALS._v565F5; + } else { + SceneItem::display2(126, 15); + } + break; + case 16: + consoleAction(3); + + if (R2_GLOBALS._v565F5 < 4) { + R2_GLOBALS._player.disableControl(); + _object5.postInit(); + _object5.setup(162, 2, 1); + _object5.setPosition(Common::Point(215, UI_INTERFACE_Y)); + + ++R2_GLOBALS._v565F5; + } else { + SceneItem::display2(126, 16); + } + break; + case 21: + _icon1.setIcon(31); + _icon2.setIcon(32); + _icon3.setIcon(33); + _icon4.setIcon(34); + break; + case 22: + R2_GLOBALS._player.disableControl(); + consoleAction(4); + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + _icon4.hideIcon(); + _icon5.hideIcon(); + _icon6.hideIcon(); + + _sceneMode = 10; + _palette.loadPalette(161); + break; + case 23: + _icon4.setIcon(25); + _icon4._object2.hide(); + + if (_field412 == 10) { + setDetails(127, --_field416); + } else if (_field412 == 13) { + setDetails(129, --_field41A); + } else { + setDetails(128, --_field418); + } + break; + case 24: + _icon4.setIcon(25); + _icon4._object2.hide(); + + if (_field412 == 10) { + setDetails(127, ++_field416); + } else if (_field412 == 13) { + setDetails(129, ++_field41A); + } else { + setDetails(128, ++_field418); + } + break; + case 25: + R2_GLOBALS._player.disableControl(); + stop(); + _icon4.setPosition(Common::Point(80, 62)); + _icon4._sceneRegionId = 5; + _icon4.hideIcon(); + + R2_GLOBALS._player.hide(); + _object1.hide(); + _object2.hide(); + _object3.hide(); + _object4.hide(); + + _sceneMode = 11; + _palette.loadPalette(160); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + break; + case 26: + case 27: + case 28: + case 29: + R2_GLOBALS._player.disableControl(); + consoleAction(11); + _field412 = id; + + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + _icon4.hideIcon(); + _icon5.setIcon(24); + + _icon4.setPosition(Common::Point(52, 107)); + _icon4._sceneRegionId = 9; + _icon4.setIcon(25); + _icon4._object2.hide(); + + _icon6.setIcon(26); + _sceneMode = 10; + + _palette.loadPalette(161); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + break; + case 30: + consoleAction(22); + R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 63 : 10); + break; + case 31: + consoleAction(22); + R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 64 : 10); + break; + case 32: + consoleAction(22); + R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 65 : 10); + break; + case 33: + consoleAction(22); + R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 66 : 10); + break; + default: + _icon1.setIcon(1); + _icon2.setIcon(2); + _icon3.setIcon(3); + _icon4.setIcon(4); + break; + } + + if ((id != 6) && (id != 7) && (id != 23) && (id != 24)) + _field412 = id; +} + +void Scene125::setDetails(int resNum, int lineNum) { + stop(); + + Common::String msg = g_resourceManager->getMessage(resNum, lineNum); + + if (msg.empty()) { + // Check for any specified sound numbers embedded in the message + Common::String msg = parseMessage(msg); + + _sceneText._fontNumber = _iconFontNumber; + _sceneText._color1 = 92; + _sceneText._color2 = 0; + _sceneText._width = 221; + _sceneText.fixPriority(20); + _sceneText.setup(msg); + _sceneText.setPosition(Common::Point(49, 19)); + + R2_GLOBALS._sceneObjects->draw(); + + if ((_soundCount > 0) && (R2_GLOBALS._v57C2C != 2)) { + _sceneMode = 12; + R2_GLOBALS._playStream.play(_soundIndexes[_soundIndex], this); + } + } else { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.hide(); + + _icon4.setPosition(Common::Point(80, 62)); + _icon4._sceneRegionId = 5; + _icon4.hideIcon(); + + _field412 = 0; + _palette.loadPalette(160); + _sceneMode = 11; + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + } +} + +void Scene125::stop() { + _sceneText.remove(); + _soundIndex = 0; + _soundCount = 0; + + R2_GLOBALS._playStream.stop(); +} + +Common::String Scene125::parseMessage(const Common::String &msg) { + _soundIndex = 0; + _soundCount = 0; + + const char *msgP = msg.c_str(); + while (*msgP == '!') { + // Get the sound number + _soundIndexes[_soundCount++] = atoi(++msgP); + + while (!((*msgP == '\0') || (*msgP < '0') || (*msgP > '9'))) + ++msgP; + } + + return Common::String(msgP); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index a80bda0726..9ffe10f132 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -85,6 +85,62 @@ public: virtual void dispatch(); }; +class Scene125: public SceneExt { + /* Objects */ + class Object5: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Icon: public SceneActor { + public: + int _lookLineNum, _field98; + bool _pressed; + SceneObject _object1, _object2; + SceneText _sceneText1, _sceneText2; + + virtual Common::String getClassName() { return "Scene125_Icon"; } + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void process(Event &event); + + void setIcon(int id); + void showIcon(); + void hideIcon(); + }; + + /* Items */ + class Item4: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + +public: + ScenePalette _palette; + ASoundExt _sound1; + NamedHotspot _background, _item2, _item3; + Item4 _item4; + SceneActor _object1, _object2, _object3, _object4, _object5, _object6, _object7; + Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6; + SequenceManager _sequenceManager; + SceneText _sceneText; + int _field412, _iconFontNumber, _field416, _field418, _field41A; + int _soundCount, _soundIndex; + int _soundIndexes[10]; + + Scene125(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + + void consoleAction(int id); + void setDetails(int resNum, int lineNum); + void stop(); + Common::String parseMessage(const Common::String &msg); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From b6239f3b3da789fc996ff3f2310777be9de1e298 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 11:35:04 +1100 Subject: TSAGE: Display UI cursor correctly in R2RW --- engines/tsage/ringworld2/ringworld2_logic.cpp | 16 ++++++++++++++++ engines/tsage/ringworld2/ringworld2_logic.h | 7 +++++++ 2 files changed, 23 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f9ac2efcbf..642d265e42 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -224,6 +224,22 @@ void SceneExt::refreshBackground(int xAmount, int yAmount) { /*--------------------------------------------------------------------------*/ +void SceneHandlerExt::postInit(SceneObjectList *OwnerList) { + SceneHandler::postInit(OwnerList); +} + +void SceneHandlerExt::process(Event &event) { + if (T2_GLOBALS._uiElements._active) { + T2_GLOBALS._uiElements.process(event); + if (event.handled) + return; + } + + SceneHandler::process(event); +} + +/*--------------------------------------------------------------------------*/ + DisplayHotspot::DisplayHotspot(int regionId, ...) { _sceneRegionId = regionId; diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index b12978344c..b0f388a2ae 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -73,6 +73,13 @@ public: void clearScreen(); }; +class SceneHandlerExt: public SceneHandler { +public: + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void process(Event &event); +}; + + class DisplayHotspot : public SceneObject { private: Common::Array _actions; -- cgit v1.2.3 From 79a9973b4af6acc6146ed33087962327845502c6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 15:52:18 +1100 Subject: TSAGE: Bugfixes for R2RW scene 125 - Console --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 162 ++++++++++++++---------- engines/tsage/ringworld2/ringworld2_scenes0.h | 1 + 2 files changed, 94 insertions(+), 69 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index c03005ba8f..a9959aa9d2 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -360,12 +360,17 @@ bool Scene125::Object5::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ -void Scene125::Icon::postInit(SceneObjectList *OwnerList) { - SceneObject::postInit(); +Scene125::Icon::Icon(): SceneActor() { _lookLineNum = 0; + _field98 = 0; _pressed = false; +} + +void Scene125::Icon::postInit(SceneObjectList *OwnerList) { + SceneObject::postInit(); _object1.postInit(); + _object1.fixPriority(255); _object1.hide(); _sceneText1._color1 = 92; @@ -387,52 +392,55 @@ void Scene125::Icon::synchronize(Serializer &s) { void Scene125::Icon::process(Event &event) { Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; - if (!event.handled && !(_flags & OBJFLAG_HIDING) && R2_GLOBALS._player._uiEnabled && - (event.eventType == EVENT_BUTTON_DOWN)) { + if (!event.handled && !(_flags & OBJFLAG_HIDING) && R2_GLOBALS._player._uiEnabled) { - int regionIndex = R2_GLOBALS._sceneRegions.indexOf(event.mousePos); + if (event.eventType == EVENT_BUTTON_DOWN) { + int regionIndex = R2_GLOBALS._sceneRegions.indexOf(event.mousePos); - switch (R2_GLOBALS._events.getCursor()) { - case CURSOR_LOOK: - if (regionIndex == _sceneRegionId) { - event.handled = true; - if (_lookLineNum == 26) { - SceneItem::display2(130, 7); - } else { - SceneItem::display2(130, _lookLineNum); + switch (R2_GLOBALS._events.getCursor()) { + case CURSOR_LOOK: + if (regionIndex == _sceneRegionId) { + event.handled = true; + if (_lookLineNum == 26) { + SceneItem::display2(130, 7); + } else { + SceneItem::display2(130, _lookLineNum); + } } - } - break; + break; - case CURSOR_USE: - if ((regionIndex == _sceneRegionId) && !_pressed) { - scene->_sound1.play(14); - setFrame(2); - - switch (_object1._strip) { - case 1: - _object1.setStrip(2); - break; - case 3: - _object1.setStrip(4); - break; - case 5: - _object1.setStrip(6); - break; - default: - break; + case CURSOR_USE: + if ((regionIndex == _sceneRegionId) && !_pressed) { + scene->_sound1.play(14); + setFrame(2); + + switch (_object1._strip) { + case 1: + _object1.setStrip(2); + break; + case 3: + _object1.setStrip(4); + break; + case 5: + _object1.setStrip(6); + break; + default: + break; + } + + _pressed = true; + event.handled = true; } + break; - _pressed = true; - event.handled = true; + default: + break; } - break; - - default: - break; } if ((event.eventType == EVENT_BUTTON_UP) && _pressed) { + setFrame(1); + switch (_object1._strip) { case 2: _object1.setStrip(1); @@ -528,7 +536,7 @@ bool Scene125::Item4::startAction(CursorType action, Event &event) { Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._diskScene) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldSceneNumber) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 126; scene->setAction(&scene->_sequenceManager, scene, 126, &scene->_object7, NULL); @@ -564,14 +572,15 @@ void Scene125::postInit(SceneObjectList *OwnerList) { loadScene(160); _palette.loadPalette(0); - if (R2_GLOBALS._v5657C == 125) - R2_GLOBALS._diskScene = R2_GLOBALS._sceneManager._previousScene; + if (R2_GLOBALS._sceneManager._previousScene != 125) + // Save the prior scene to return to when the console is turned off + R2_GLOBALS._player._oldSceneNumber = R2_GLOBALS._sceneManager._previousScene; R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._diskScene) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldSceneNumber) { _object7.postInit(); _object7.setup(160, 3, 5); _object7.setPosition(Common::Point(47, 167)); @@ -602,6 +611,7 @@ void Scene125::signal() { _icon4.postInit(); _icon4._sceneRegionId = 5; + _sceneMode = 2; setAction(&_sequenceManager, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, &R2_GLOBALS._player, NULL); break; case 2: @@ -637,10 +647,12 @@ void Scene125::signal() { _icon5._sceneRegionId = 7; _icon6.postInit(); + _icon6.setup(160, 1, 1); _icon6.setPosition(Common::Point(106, 110)); _icon6.setIcon(5); _icon6._sceneRegionId = 8; + consoleAction(5); R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; break; @@ -724,7 +736,7 @@ void Scene125::signal() { } break; case 125: - warning("TODO: Scene125::signal #125"); + R2_INVENTORY.setObjectScene(R2_OPTO_DISK, R2_GLOBALS._player._oldSceneNumber); break; case 126: R2_INVENTORY.setObjectScene(R2_OPTO_DISK, 1); @@ -768,12 +780,15 @@ void Scene125::dispatch() { Scene::dispatch(); } +/** + * Handles actions on the console screen. + */ void Scene125::consoleAction(int id) { _icon3.setIcon(0); _icon4.setIcon(0); if (id == 5) - _icon5.setIcon(5); + _icon5.setIcon(6); else { switch (_field412) { case 10: @@ -791,29 +806,29 @@ void Scene125::consoleAction(int id) { } switch (id) { - case 0: + case 1: _icon1.setIcon(8); _icon2.setIcon(9); break; - case 1: + case 2: _icon1.setIcon(10); _icon2.setIcon(11); _icon3.setIcon(12); _icon4.setIcon(13); break; - case 2: + case 3: _icon1.setIcon(15); _icon2.setIcon(16); _icon3.setIcon(17); break; - case 3: + case 4: _icon1.setIcon(22); _icon2.setIcon(23); break; - case 5: + case 6: R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldSceneNumber); break; - case 6: + case 7: if (_field412 == 11) consoleAction(2); else if (_field412 == 22) @@ -821,19 +836,19 @@ void Scene125::consoleAction(int id) { else consoleAction(5); break; - case 7: + case 8: _iconFontNumber = 50; stop(); _icon6.setIcon(5); consoleAction(1); break; - case 8: + case 9: _iconFontNumber = 52; stop(); _icon6.setIcon(5); consoleAction(1); break; - case 9: + case 10: R2_GLOBALS._player.disableControl(); consoleAction(2); _icon1.hideIcon(); @@ -852,13 +867,13 @@ void Scene125::consoleAction(int id) { _palette.loadPalette(161); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; - case 10: + case 11: _icon1.setIcon(27); _icon2.setIcon(28); _icon3.setIcon(29); _icon4.setIcon(30); break; - case 11: + case 12: R2_GLOBALS._player.disableControl(); consoleAction(2); _icon1.hideIcon(); @@ -870,7 +885,7 @@ void Scene125::consoleAction(int id) { _icon6.setIcon(26); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; - case 12: + case 13: consoleAction(2); if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != R2_GLOBALS._player._oldSceneNumber) { SceneItem::display2(126, 17); @@ -894,7 +909,7 @@ void Scene125::consoleAction(int id) { R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); } break; - case 14: + case 15: consoleAction(3); if (R2_GLOBALS._v565F5 < 3) { @@ -910,7 +925,7 @@ void Scene125::consoleAction(int id) { SceneItem::display2(126, 14); } break; - case 15: + case 16: consoleAction(3); if (R2_GLOBALS._v565F5 < 4) { @@ -924,7 +939,7 @@ void Scene125::consoleAction(int id) { SceneItem::display2(126, 15); } break; - case 16: + case 17: consoleAction(3); if (R2_GLOBALS._v565F5 < 4) { @@ -938,13 +953,13 @@ void Scene125::consoleAction(int id) { SceneItem::display2(126, 16); } break; - case 21: + case 22: _icon1.setIcon(31); _icon2.setIcon(32); _icon3.setIcon(33); _icon4.setIcon(34); break; - case 22: + case 23: R2_GLOBALS._player.disableControl(); consoleAction(4); _icon1.hideIcon(); @@ -957,7 +972,7 @@ void Scene125::consoleAction(int id) { _sceneMode = 10; _palette.loadPalette(161); break; - case 23: + case 24: _icon4.setIcon(25); _icon4._object2.hide(); @@ -969,7 +984,7 @@ void Scene125::consoleAction(int id) { setDetails(128, --_field418); } break; - case 24: + case 25: _icon4.setIcon(25); _icon4._object2.hide(); @@ -981,7 +996,7 @@ void Scene125::consoleAction(int id) { setDetails(128, ++_field418); } break; - case 25: + case 26: R2_GLOBALS._player.disableControl(); stop(); _icon4.setPosition(Common::Point(80, 62)); @@ -998,10 +1013,10 @@ void Scene125::consoleAction(int id) { _palette.loadPalette(160); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; - case 26: case 27: case 28: case 29: + case 30: R2_GLOBALS._player.disableControl(); consoleAction(11); _field412 = id; @@ -1023,19 +1038,19 @@ void Scene125::consoleAction(int id) { _palette.loadPalette(161); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; - case 30: + case 31: consoleAction(22); R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 63 : 10); break; - case 31: + case 32: consoleAction(22); R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 64 : 10); break; - case 32: + case 33: consoleAction(22); R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 65 : 10); break; - case 33: + case 34: consoleAction(22); R2_GLOBALS._sound1.play((R2_GLOBALS._sound1.getSoundNum() == 10) ? 66 : 10); break; @@ -1051,6 +1066,9 @@ void Scene125::consoleAction(int id) { _field412 = id; } +/** + * Sets the message to be displayed on the console screen. + */ void Scene125::setDetails(int resNum, int lineNum) { stop(); @@ -1089,6 +1107,9 @@ void Scene125::setDetails(int resNum, int lineNum) { } } +/** + * Stops any playing console sounds and hides any current console message. + */ void Scene125::stop() { _sceneText.remove(); _soundIndex = 0; @@ -1097,6 +1118,9 @@ void Scene125::stop() { R2_GLOBALS._playStream.stop(); } +/** + * Parses a message to be displayed on the console to see whether there are any sounds to be played. + */ Common::String Scene125::parseMessage(const Common::String &msg) { _soundIndex = 0; _soundCount = 0; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 9ffe10f132..edc877294e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -99,6 +99,7 @@ class Scene125: public SceneExt { SceneObject _object1, _object2; SceneText _sceneText1, _sceneText2; + Icon(); virtual Common::String getClassName() { return "Scene125_Icon"; } virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void synchronize(Serializer &s); -- cgit v1.2.3 From 6e6fc324470281bc2e6f46343e29e0e5dbfa810d Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Mon, 31 Oct 2011 22:40:38 +0100 Subject: TSAGE: Silece GCC warning --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index a9959aa9d2..afe801b4c3 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1076,14 +1076,14 @@ void Scene125::setDetails(int resNum, int lineNum) { if (msg.empty()) { // Check for any specified sound numbers embedded in the message - Common::String msg = parseMessage(msg); + Common::String msg2 = parseMessage(msg); _sceneText._fontNumber = _iconFontNumber; _sceneText._color1 = 92; _sceneText._color2 = 0; _sceneText._width = 221; _sceneText.fixPriority(20); - _sceneText.setup(msg); + _sceneText.setup(msg2); _sceneText.setPosition(Common::Point(49, 19)); R2_GLOBALS._sceneObjects->draw(); -- cgit v1.2.3 From a1d30786e50224b5dbefa8a6bcd94fd0c0c57154 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Nov 2011 12:14:46 +1100 Subject: TSAGE: Further bugfixes and cleanup for R2RW Scene 125 - Console --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 82 +++++++++++++++---------- engines/tsage/ringworld2/ringworld2_scenes0.h | 2 +- 2 files changed, 51 insertions(+), 33 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index afe801b4c3..2062f6ffd7 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -562,9 +562,13 @@ bool Scene125::Item4::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ Scene125::Scene125(): SceneExt() { - _soundCount = _soundIndex = 0; _iconFontNumber = 50; - _field412 = 5; + _consoleMode = 5; + _logIndex = _databaseIndex = _infodiskIndex = 0; + + _soundCount = _soundIndex = 0; + for (int i = 0; i < 10; ++i) + _soundIndexes[i] = 0; } void Scene125::postInit(SceneObjectList *OwnerList) { @@ -657,7 +661,7 @@ void Scene125::signal() { R2_GLOBALS._player._canWalk = false; break; case 10: - switch (_field412) { + switch (_consoleMode) { case 12: _sceneMode = 129; @@ -676,7 +680,7 @@ void Scene125::signal() { case 13: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field41A = 0; + _infodiskIndex = 0; setDetails(129, 0); break; case 23: @@ -685,31 +689,31 @@ void Scene125::signal() { case 27: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field418 = 0; + _databaseIndex = 0; setDetails(128, 0); break; case 28: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field418 = 37; + _databaseIndex = 37; setDetails(128, 37); break; case 29: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field418 = 68; + _databaseIndex = 68; setDetails(128, 68); break; case 30: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field418 = 105; + _databaseIndex = 105; setDetails(128, 105); break; default: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field416 = 0; + _logIndex = 0; setDetails(127, 0); break; } @@ -718,7 +722,7 @@ void Scene125::signal() { R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - if ((_field412 >= 27) && (_field412 <= 30)) { + if ((_consoleMode >= 27) && (_consoleMode <= 30)) { consoleAction(11); } consoleAction(2); @@ -757,7 +761,18 @@ void Scene125::signal() { } void Scene125::synchronize(Serializer &s) { - error("TODO"); + SceneExt::synchronize(s); + + s.syncAsSint16LE(_consoleMode); + s.syncAsSint16LE(_iconFontNumber); + s.syncAsSint16LE(_logIndex); + s.syncAsSint16LE(_databaseIndex); + s.syncAsSint16LE(_infodiskIndex); + s.syncAsSint16LE(_soundCount); + s.syncAsSint16LE(_soundIndex); + + for (int i = 0; i < 10; ++i) + s.syncAsSint16LE(_soundIndexes[i]); } void Scene125::process(Event &event) { @@ -790,7 +805,7 @@ void Scene125::consoleAction(int id) { if (id == 5) _icon5.setIcon(6); else { - switch (_field412) { + switch (_consoleMode) { case 10: case 12: case 13: @@ -829,9 +844,9 @@ void Scene125::consoleAction(int id) { R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldSceneNumber); break; case 7: - if (_field412 == 11) + if (_consoleMode == 11) consoleAction(2); - else if (_field412 == 22) + else if (_consoleMode == 22) consoleAction(4); else consoleAction(5); @@ -883,6 +898,8 @@ void Scene125::consoleAction(int id) { _icon5.hideIcon(); _icon6.setIcon(26); + _sceneMode = 10; + _palette.loadPalette(161); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; case 13: @@ -976,24 +993,24 @@ void Scene125::consoleAction(int id) { _icon4.setIcon(25); _icon4._object2.hide(); - if (_field412 == 10) { - setDetails(127, --_field416); - } else if (_field412 == 13) { - setDetails(129, --_field41A); + if (_consoleMode == 10) { + setDetails(127, --_logIndex); + } else if (_consoleMode == 13) { + setDetails(129, --_infodiskIndex); } else { - setDetails(128, --_field418); + setDetails(128, --_databaseIndex); } break; case 25: _icon4.setIcon(25); _icon4._object2.hide(); - if (_field412 == 10) { - setDetails(127, ++_field416); - } else if (_field412 == 13) { - setDetails(129, ++_field41A); + if (_consoleMode == 10) { + setDetails(127, ++_logIndex); + } else if (_consoleMode == 13) { + setDetails(129, ++_infodiskIndex); } else { - setDetails(128, ++_field418); + setDetails(128, ++_databaseIndex); } break; case 26: @@ -1019,7 +1036,7 @@ void Scene125::consoleAction(int id) { case 30: R2_GLOBALS._player.disableControl(); consoleAction(11); - _field412 = id; + _consoleMode = id; _icon1.hideIcon(); _icon2.hideIcon(); @@ -1062,8 +1079,8 @@ void Scene125::consoleAction(int id) { break; } - if ((id != 6) && (id != 7) && (id != 23) && (id != 24)) - _field412 = id; + if ((id != 6) && (id != 7) && (id != 24) && (id != 25)) + _consoleMode = id; } /** @@ -1072,18 +1089,18 @@ void Scene125::consoleAction(int id) { void Scene125::setDetails(int resNum, int lineNum) { stop(); - Common::String msg = g_resourceManager->getMessage(resNum, lineNum); + Common::String msg = g_resourceManager->getMessage(resNum, lineNum, true); - if (msg.empty()) { + if (!msg.empty()) { // Check for any specified sound numbers embedded in the message - Common::String msg2 = parseMessage(msg); + msg = parseMessage(msg); _sceneText._fontNumber = _iconFontNumber; _sceneText._color1 = 92; _sceneText._color2 = 0; _sceneText._width = 221; _sceneText.fixPriority(20); - _sceneText.setup(msg2); + _sceneText.setup(msg); _sceneText.setPosition(Common::Point(49, 19)); R2_GLOBALS._sceneObjects->draw(); @@ -1093,6 +1110,7 @@ void Scene125::setDetails(int resNum, int lineNum) { R2_GLOBALS._playStream.play(_soundIndexes[_soundIndex], this); } } else { + // Passed the start or end of the message set, so return to the menu R2_GLOBALS._player.disableControl(); R2_GLOBALS._player.hide(); @@ -1100,7 +1118,7 @@ void Scene125::setDetails(int resNum, int lineNum) { _icon4._sceneRegionId = 5; _icon4.hideIcon(); - _field412 = 0; + _consoleMode = 0; _palette.loadPalette(160); _sceneMode = 11; R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index edc877294e..9b83d03cc7 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -125,7 +125,7 @@ public: Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6; SequenceManager _sequenceManager; SceneText _sceneText; - int _field412, _iconFontNumber, _field416, _field418, _field41A; + int _consoleMode, _iconFontNumber, _logIndex, _databaseIndex, _infodiskIndex; int _soundCount, _soundIndex; int _soundIndexes[10]; -- cgit v1.2.3 From 5ae9c15cdc57ab1f3f07f6e6dcfbee6353d569dd Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Nov 2011 21:07:57 +1100 Subject: TSAGE: Added display logic for character selection dialog in R2RW --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 38 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_dialogs.h | 12 ++++++++ 2 files changed, 50 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 8d4863f332..562ca4cc65 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -176,6 +176,7 @@ void RightClickDialog::execute() { break; case 4: // Change player + CharacterDialog::show(); break; case 5: // Options dialog @@ -188,6 +189,43 @@ void RightClickDialog::execute() { _gfxManager.deactivate(); } +/*--------------------------------------------------------------------------*/ + +void CharacterDialog::show() { + CharacterDialog *dlg = new CharacterDialog(); + dlg->draw(); + + GfxButton *btn = dlg->execute(&dlg->_btnCancel); + + + dlg->remove(); + delete dlg; +} + +CharacterDialog::CharacterDialog() { + // Set the element text + _msgTitle.set(CHAR_TITLE, 140, ALIGN_LEFT); + _btnQuinn.setText(CHAR_QUINN_MSG); + _btnSeeker.setText(CHAR_SEEKER_MSG); + _btnMiranda.setText(CHAR_MIRANDA_MSG); + _btnCancel.setText(CHAR_CANCEL_MSG); + + // Set position of the elements + _msgTitle._bounds.moveTo(5, 5); + _btnQuinn._bounds.moveTo(25, _msgTitle._bounds.bottom + 1); + _btnSeeker._bounds.moveTo(25, _btnQuinn._bounds.bottom + 1); + _btnMiranda._bounds.moveTo(25, _btnSeeker._bounds.bottom + 1); + _btnCancel._bounds.moveTo(25, _btnMiranda._bounds.bottom + 1); + + // Add the items to the dialog + addElements(&_msgTitle, &_btnQuinn, &_btnSeeker, &_btnMiranda, &_btnCancel, NULL); + + // Set the dialog size and position + frame(); + _bounds.collapse(-6, -6); + setCenter(160, 100); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.h b/engines/tsage/ringworld2/ringworld2_dialogs.h index bbc35da3ea..89e50545bf 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.h +++ b/engines/tsage/ringworld2/ringworld2_dialogs.h @@ -59,6 +59,18 @@ public: void execute(); }; +class CharacterDialog: public GfxDialog { +private: + GfxMessage _msgTitle; + GfxButton _btnQuinn, _btnMiranda, _btnSeeker; + GfxButton _btnCancel; +public: + CharacterDialog(); + virtual ~CharacterDialog() {} + + static void show(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 56dc66548048ef90fe3028faf1fe7b40dd104e76 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Nov 2011 22:01:00 +1100 Subject: TSAGE: Fix compiler warning --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 562ca4cc65..7abf2c9a45 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -195,7 +195,7 @@ void CharacterDialog::show() { CharacterDialog *dlg = new CharacterDialog(); dlg->draw(); - GfxButton *btn = dlg->execute(&dlg->_btnCancel); + /*GfxButton *btn = */dlg->execute(&dlg->_btnCancel); dlg->remove(); -- cgit v1.2.3 From 5d08dbfa114fd03b9d811f2a961c13dbc4804d2c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 2 Nov 2011 20:44:28 +1100 Subject: TSAGE: Implemented the character selection dialog logic in R2RW --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 117 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_logic.cpp | 9 ++ engines/tsage/ringworld2/ringworld2_logic.h | 1 + 3 files changed, 126 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 7abf2c9a45..553a10a5a6 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -31,6 +31,7 @@ #include "tsage/staticres.h" #include "tsage/globals.h" #include "tsage/ringworld2/ringworld2_dialogs.h" +#include "tsage/ringworld2/ringworld2_logic.h" namespace TsAGE { @@ -195,11 +196,125 @@ void CharacterDialog::show() { CharacterDialog *dlg = new CharacterDialog(); dlg->draw(); - /*GfxButton *btn = */dlg->execute(&dlg->_btnCancel); + // Make the default button the currently active character + GfxButton *btn = NULL; + int oldCharacter = R2_GLOBALS._player._characterIndex; + switch (oldCharacter) { + case 1: + btn = &dlg->_btnQuinn; + break; + case 2: + btn = &dlg->_btnSeeker; + break; + case 3: + btn = &dlg->_btnMiranda; + break; + default: + break; + } + + // Show the character selection dialog + btn = dlg->execute(btn); + // Figure out the new selected character + if (btn == &dlg->_btnQuinn) + R2_GLOBALS._player._characterIndex = 1; + else if (btn == &dlg->_btnSeeker) + R2_GLOBALS._player._characterIndex = 2; + else if (btn == &dlg->_btnMiranda) + R2_GLOBALS._player._characterIndex = 3; + // Remove the dialog dlg->remove(); delete dlg; + + // Only do transfer if a different character was selected + if (R2_GLOBALS._player._characterIndex != oldCharacter) { + // Save the details of the previously active character + SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene; + scene->saveCharacter(oldCharacter); + + // Play a transition sound as the character is changed + if (R2_GLOBALS._player._characterScene[0] != 300) { + switch (R2_GLOBALS._v565F1[R2_GLOBALS._player._characterIndex]) { + case 0: + R2_GLOBALS._sound4.stop(); + break; + case 1: + R2_GLOBALS._sound4.play(45); + break; + case 2: + R2_GLOBALS._sound4.play(4); + break; + case 3: + R2_GLOBALS._sound4.play(5); + break; + case 4: + R2_GLOBALS._sound4.play(6); + break; + default: + break; + } + } else if (R2_GLOBALS._v565F1[R2_GLOBALS._player._characterIndex] > 1) { + switch (R2_GLOBALS._v565F1[R2_GLOBALS._player._characterIndex]) { + case 2: + R2_GLOBALS._sound4.play(45); + break; + case 3: + R2_GLOBALS._sound4.play(4); + break; + case 4: + R2_GLOBALS._sound4.play(5); + break; + case 5: + R2_GLOBALS._sound4.play(6); + break; + default: + break; + } + } else if ((R2_GLOBALS._player._characterScene[1] == 300) && (R2_GLOBALS._v565F1[1] != 1)) { + switch (R2_GLOBALS._v565F1[1]) { + case 2: + R2_GLOBALS._sound4.play(45); + break; + case 3: + R2_GLOBALS._sound4.play(4); + break; + case 4: + R2_GLOBALS._sound4.play(5); + break; + case 5: + R2_GLOBALS._sound4.play(6); + break; + default: + break; + } + } else if (R2_GLOBALS._player._characterScene[2] != 300) { + R2_GLOBALS._sound4.stop(); + } else if (R2_GLOBALS._v565F1[2] == 1) { + R2_GLOBALS._sound4.stop(); + } else { + switch (R2_GLOBALS._v565F1[1]) { + case 2: + R2_GLOBALS._sound4.play(45); + break; + case 3: + R2_GLOBALS._sound4.play(4); + break; + case 4: + R2_GLOBALS._sound4.play(5); + break; + case 5: + R2_GLOBALS._sound4.play(6); + break; + default: + break; + } + } + + // Change to whichever scene the newly selected character is in + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._characterScene[R2_GLOBALS._player._characterIndex]); + } } CharacterDialog::CharacterDialog() { diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 642d265e42..e9892c6880 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -222,6 +222,15 @@ void SceneExt::refreshBackground(int xAmount, int yAmount) { DEALLOCATE(dataP); } +/** + * Saves the current player position and view in the details for the specified character index + */ +void SceneExt::saveCharacter(int characterIndex) { + R2_GLOBALS._player._characterPos[characterIndex] = R2_GLOBALS._player._position; + R2_GLOBALS._player._characterStrip[characterIndex] = R2_GLOBALS._player._strip; + R2_GLOBALS._player._characterFrame[characterIndex] = R2_GLOBALS._player._frame; +} + /*--------------------------------------------------------------------------*/ void SceneHandlerExt::postInit(SceneObjectList *OwnerList) { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index b0f388a2ae..4adfc9bc05 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -67,6 +67,7 @@ public: virtual void dispatch(); virtual void loadScene(int sceneNum); virtual void refreshBackground(int xAmount, int yAmount); + virtual void saveCharacter(int characterIndex); bool display(CursorType action); void fadeOut(); -- cgit v1.2.3 From 9f61470a99c0218e065e87c694ed2b7cfaff17b9 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 8 Nov 2011 18:36:50 +0100 Subject: TSAGE: R2R - Add switch skeletton for createScene() --- engines/tsage/ringworld2/ringworld2_logic.cpp | 100 +++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 3 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e9892c6880..ee52073e01 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -35,12 +35,106 @@ namespace Ringworld2 { Scene *Ringworld2Game::createScene(int sceneNumber) { switch (sceneNumber) { /* Scene group #0 */ + // + case 50: error("Scene number %d - Not yet implemented", sceneNumber); // Quinn's room case 100: return new Scene100(); - // Computer console case 125: return new Scene125(); - + // + case 150: + case 160: + case 175: + case 180: + case 200: + case 205: + case 250: + case 300: + case 325: + case 400: + case 500: + case 525: + case 600: + case 700: + case 800: + case 825: + case 850: + case 900: + error("Missing scene %d from group 0", sceneNumber); + /* Scene group #1 */ + // + case 1000: + case 1010: + case 1020: + case 1100: + case 1200: + case 1330: + case 1500: + case 1525: + case 1530: + case 1550: + case 1575: + case 1580: + case 1625: + case 1700: + case 1750: + case 1800: + case 1850: + case 1875: + case 1900: + case 1925: + case 1945: + case 1950: + error("Missing scene %d from group 1", sceneNumber); + /* Scene group #2 */ + // + case 2000: + case 2350: + case 2400: + case 2425: + case 2430: + case 2435: + case 2440: + case 2445: + case 2450: + case 2455: + case 2500: + case 2525: + case 2530: + case 2535: + case 2600: + case 2700: + case 2750: + case 2800: + case 2900: + error("Missing scene %d from group 2", sceneNumber); + /* Scene group #3 */ + // + case 3100: + case 3125: + case 3150: + case 3175: + case 3200: + case 3210: + case 3220: + case 3230: + case 3240: + case 3245: + case 3250: + case 3255: + case 3260: + case 3275: + case 3350: + case 3375: + case 3385: + case 3395: + case 3400: + case 3500: + case 3600: + case 3700: + case 3800: + case 3900: + error("Missing scene %d from group 3", sceneNumber); default: error("Unknown scene number - %d", sceneNumber); break; @@ -91,7 +185,7 @@ void SceneExt::remove() { _action->_endHandler = NULL; _action->remove(); } - + _focusObject = NULL; */ } -- cgit v1.2.3 From 58b082bcb1ad23df30ae92adf6f672a753d35611 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 8 Nov 2011 23:41:09 +0100 Subject: TSAGE: R2R - Intro(?) (50): partial implementation. Some missing core functions still have to be implemented. --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 42 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 14 +++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ee52073e01..94aa8c583e 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -36,7 +36,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { switch (sceneNumber) { /* Scene group #0 */ // - case 50: error("Scene number %d - Not yet implemented", sceneNumber); + case 50: return new Scene50(); // Quinn's room case 100: return new Scene100(); // Computer console diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 2062f6ffd7..cbe1fc7846 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -29,6 +29,48 @@ namespace TsAGE { namespace Ringworld2 { +void Scene50::Action1::signal() { + switch (_actionIndex++) { + case 0: + setDelay(2); + break; + case 1: + setDelay(180); + break; + case 2: + R2_GLOBALS._sceneManager.changeScene(100); + break; + default: + break; + } +} + +void Scene50::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(OwnerList); + loadScene(110); + + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._scenePalette.loadPalette(0); + + R2_GLOBALS._sound2.play(10); + R2_GLOBALS._player.disableControl(); + + setAction(&_action1); +} + +void Scene50::process(Event &event) { + if ((event.eventType != EVENT_BUTTON_DOWN) && (event.eventType != EVENT_KEYPRESS) && (event.eventType == 27)) { + event.handled = true; + warning("TODO: incomplete Scene50::process()"); + // CursorType _oldCursorId = _cursorId; + g_globals->_events.setCursor(R2_2); + // _cursorManager.sub_1D474(2, 0); + // sub_5566A(1); + // _cursorManager._fieldE = _oldCursorId; + R2_GLOBALS._sceneManager.changeScene(100); + } +} + /*-------------------------------------------------------------------------- * Scene 100 - Quinn's Room * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 9b83d03cc7..38710a7cbc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -38,6 +38,20 @@ namespace Ringworld2 { using namespace TsAGE; +class Scene50: public SceneExt { + + class Action1: public Action { + public: + void signal(); + }; + +public: + Action1 _action1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void process(Event &event); +}; + class Scene100: public SceneExt { /* Objects */ class Door: public SceneActorExt { -- cgit v1.2.3 From 8eeb8f2814f946730323001462e4fcc8b9c7a652 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 10 Nov 2011 20:58:28 +1100 Subject: TSAGE: Implemented R2R help dialog --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 97 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_dialogs.h | 13 ++++ engines/tsage/ringworld2/ringworld2_logic.cpp | 7 +- 3 files changed, 116 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 553a10a5a6..4cb023d672 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -341,6 +341,103 @@ CharacterDialog::CharacterDialog() { setCenter(160, 100); } +/*--------------------------------------------------------------------------*/ + +void HelpDialog::show() { + HelpDialog *dlg = new HelpDialog(); + dlg->draw(); + + // Show the character selection dialog + GfxButton *btn = dlg->execute(&dlg->_btnResume); + + // If a function button was selected, take care of it + Event evt; + evt.eventType = EVENT_KEYPRESS; + evt.kbd.keycode = Common::KEYCODE_INVALID; + if (btn == &dlg->_btnList[0]) { + evt.kbd.keycode = Common::KEYCODE_F2; + } else if (btn == &dlg->_btnList[1]) { + evt.kbd.keycode = Common::KEYCODE_F3; + } else if (btn == &dlg->_btnList[2]) { + evt.kbd.keycode = Common::KEYCODE_F4; + } else if (btn == &dlg->_btnList[3]) { + evt.kbd.keycode = Common::KEYCODE_F5; + } else if (btn == &dlg->_btnList[4]) { + evt.kbd.keycode = Common::KEYCODE_F7; + } else if (btn == &dlg->_btnList[5]) { + evt.kbd.keycode = Common::KEYCODE_F8; + } else if (btn == &dlg->_btnList[6]) { + evt.kbd.keycode = Common::KEYCODE_F10; + } + + // Remove the dialog + dlg->remove(); + delete dlg; + + // If a action button was selected, dispatch to handle it + if (evt.kbd.keycode != Common::KEYCODE_INVALID) + R2_GLOBALS._game->processEvent(evt); +} + +HelpDialog::HelpDialog() { + // Set the title and game version + _msgTitle.set(HELP_MSG, 172, ALIGN_CENTER); + _msgTitle._bounds.moveTo(5, 0); + _msgVersion.set(GAME_VERSION, 172, ALIGN_CENTER); + _msgVersion._bounds.moveTo(5, _msgTitle._bounds.bottom + 3); + addElements(&_msgTitle, &_msgVersion, NULL); + + // Set buttons + _btnList[0].setText(F2); + _btnList[0]._bounds.moveTo(5, _msgVersion._bounds.bottom + 2); + _btnDescription[0].set(SOUND_OPTIONS, 140, ALIGN_LEFT); + _btnDescription[0]._bounds.moveTo(_btnList[0]._bounds.right + 2, _btnList[0]._bounds.top + 4); + + _btnList[1].setText(F3); + _btnList[1]._bounds.moveTo(5, _btnList[0]._bounds.bottom); + _btnDescription[1].set(QUIT_GAME, 140, ALIGN_LEFT); + _btnDescription[1]._bounds.moveTo(_btnList[1]._bounds.right + 2, _btnList[1]._bounds.top + 4); + + _btnList[2].setText(F4); + _btnList[2]._bounds.moveTo(5, _btnList[1]._bounds.bottom); + _btnDescription[2].set(RESTART_GAME, 140, ALIGN_LEFT); + _btnDescription[2]._bounds.moveTo(_btnList[2]._bounds.right + 2, _btnList[2]._bounds.top + 4); + + _btnList[3].setText(F5); + _btnList[3]._bounds.moveTo(5, _btnList[2]._bounds.bottom); + _btnDescription[3].set(SAVE_GAME, 140, ALIGN_LEFT); + _btnDescription[3]._bounds.moveTo(_btnList[3]._bounds.right + 2, _btnList[3]._bounds.top + 4); + + _btnList[4].setText(F7); + _btnList[4]._bounds.moveTo(5, _btnList[3]._bounds.bottom); + _btnDescription[4].set(RESTORE_GAME, 140, ALIGN_LEFT); + _btnDescription[4]._bounds.moveTo(_btnList[4]._bounds.right + 2, _btnList[4]._bounds.top + 4); + + _btnList[5].setText(F8); + _btnList[5]._bounds.moveTo(5, _btnList[4]._bounds.bottom); + _btnDescription[5].set(SHOW_CREDITS, 140, ALIGN_LEFT); + _btnDescription[5]._bounds.moveTo(_btnList[5]._bounds.right + 2, _btnList[5]._bounds.top + 4); + + _btnList[6].setText(F10); + _btnList[6]._bounds.moveTo(5, _btnList[5]._bounds.bottom); + _btnDescription[6].set(PAUSE_GAME, 140, ALIGN_LEFT); + _btnDescription[6]._bounds.moveTo(_btnList[6]._bounds.right + 2, _btnList[6]._bounds.top + 4); + + for (int i = 0; i < 7; ++i) { + addElements(&_btnList[i], &_btnDescription[i], NULL); + } + + // Add 'Resume' button + _btnResume.setText(RESUME_PLAY); + _btnResume._bounds.moveTo(5, _btnList[6]._bounds.bottom + 2); + addElements(&_btnResume, NULL); + + // Set the dialog size and position + frame(); + _bounds.collapse(-6, -6); + setCenter(160, 100); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.h b/engines/tsage/ringworld2/ringworld2_dialogs.h index 89e50545bf..02a1aed81c 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.h +++ b/engines/tsage/ringworld2/ringworld2_dialogs.h @@ -71,6 +71,19 @@ public: static void show(); }; +class HelpDialog: public GfxDialog { +private: + GfxMessage _msgTitle, _msgVersion; + GfxButton _btnList[7]; + GfxMessage _btnDescription[7]; + GfxButton _btnResume; +public: + HelpDialog(); + virtual ~HelpDialog() {} + + static void show(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 94aa8c583e..fa8d0be1af 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -659,7 +659,7 @@ void Ringworld2Game::processEvent(Event &event) { switch (event.kbd.keycode) { case Common::KEYCODE_F1: // F1 - Help -// MessageDialog::show(HELP_MSG, OK_BTN_STRING); + HelpDialog::show(); break; case Common::KEYCODE_F2: @@ -685,6 +685,11 @@ void Ringworld2Game::processEvent(Event &event) { g_globals->_events.setCursorFromFlag(); break; + case Common::KEYCODE_F8: + // F8 - Credits + warning("TODO: Show Credits"); + break; + case Common::KEYCODE_F10: // F10 - Pause GfxDialog::setPalette(); -- cgit v1.2.3 From 3fb2776c77798022a949454302c705644cfdd628 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 10 Nov 2011 21:02:20 +1100 Subject: TSAGE: Change the cursor to an arrow when showing the R2R help dialog --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 4cb023d672..ade76d501a 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -344,6 +344,10 @@ CharacterDialog::CharacterDialog() { /*--------------------------------------------------------------------------*/ void HelpDialog::show() { + // Set the palette and change the cursor + BF_GLOBALS._events.setCursor(CURSOR_ARROW); + + // Create the dialog and draw it HelpDialog *dlg = new HelpDialog(); dlg->draw(); -- cgit v1.2.3 From 4acd90ac1fa57805217210fd8ea788aae7efb29d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 16 Nov 2011 19:48:52 +1100 Subject: TSAGE: Implemented R2RW SceneArea and SceneExit classes --- engines/tsage/ringworld2/ringworld2_logic.cpp | 123 +++++++++++++++++++++++--- engines/tsage/ringworld2/ringworld2_logic.h | 34 ++++++- 2 files changed, 143 insertions(+), 14 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index fa8d0be1af..7294b3d726 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -176,18 +176,8 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { } void SceneExt::remove() { -/* - R2_GLOBALS._uiElements.hide(); - R2_GLOBALS._uiElements.resetClear(); - - if (_action) { - if (_action->_endHandler) - _action->_endHandler = NULL; - _action->remove(); - } - - _focusObject = NULL; -*/ + _sceneAreas.clear(); + Scene::remove(); } void SceneExt::process(Event &event) { @@ -338,7 +328,17 @@ void SceneHandlerExt::process(Event &event) { return; } - SceneHandler::process(event); + SceneExt *scene = static_cast(R2_GLOBALS._sceneManager._scene); + if (scene) { + // Handle any scene areas that have been registered + SynchronizedList::iterator saIter; + for (saIter = scene->_sceneAreas.begin(); saIter != scene->_sceneAreas.end() && !event.handled; ++saIter) { + (*saIter)->process(event); + } + } + + if (!event.handled) + SceneHandler::process(event); } /*--------------------------------------------------------------------------*/ @@ -880,6 +880,103 @@ void SceneActor::setDetails(int resNum, int lookLineNum, int talkLineNum, int us _useLineNum = useLineNum; } +/*--------------------------------------------------------------------------*/ + +SceneArea::SceneArea(): EventHandler() { + _enabled = true; + _insideArea = false; + _savedCursorNum = CURSOR_NONE; + _cursorState = 0; +} + +void SceneArea::synchronize(Serializer &s) { + EventHandler::synchronize(s); + + _bounds.synchronize(s); + s.syncAsSint16LE(_enabled); + s.syncAsSint16LE(_insideArea); + s.syncAsSint16LE(_cursorNum); + s.syncAsSint16LE(_savedCursorNum); + s.syncAsSint16LE(_cursorState); +} + +void SceneArea::remove() { + static_cast(R2_GLOBALS._sceneManager._scene)->_sceneAreas.remove(this); +} + +void SceneArea::process(Event &event) { + if (!R2_GLOBALS._insetUp && _enabled && R2_GLOBALS._events.isCursorVisible()) { + CursorType cursor = R2_GLOBALS._events.getCursor(); + + if (_bounds.contains(event.mousePos)) { + // Cursor moving in bounded area + if (cursor != _cursorNum) { + _savedCursorNum = cursor; + _cursorState = 0; + R2_GLOBALS._events.setCursor(_cursorNum); + } + _insideArea = true; + } else if ((event.mousePos.y < 171) && _insideArea && (_cursorNum != cursor) && + (_savedCursorNum != CURSOR_NONE)) { + // Cursor moved outside bounded area + R2_GLOBALS._events.setCursor(_savedCursorNum); + } + } +} + +void SceneArea::setDetails(const Rect &bounds, CursorType cursor) { + _bounds = bounds; + _cursorNum = cursor; + + static_cast(R2_GLOBALS._sceneManager._scene)->_sceneAreas.push_front(this); +} + +/*--------------------------------------------------------------------------*/ + +SceneExit::SceneExit(): SceneArea() { + _moving = false; + _destPos = Common::Point(-1, -1); +} + +void SceneExit::synchronize(Serializer &s) { + SceneArea::synchronize(s); + + s.syncAsSint16LE(_moving); + s.syncAsSint16LE(_destPos.x); + s.syncAsSint16LE(_destPos.y); +} + +void SceneExit::setDetails(const Rect &bounds, CursorType cursor, int sceneNumber) { + _sceneNumber = sceneNumber; + SceneArea::setDetails(bounds, cursor); +} + +void SceneExit::changeScene() { + R2_GLOBALS._sceneManager.setNewScene(_sceneNumber); +} + +void SceneExit::process(Event &event) { + if (!R2_GLOBALS._insetUp) { + SceneArea::process(event); + + if (_enabled && (event.eventType == EVENT_BUTTON_DOWN)) { + if (!_bounds.contains(event.mousePos)) + _moving = 0; + else if (!R2_GLOBALS._player._canWalk) { + _moving = 0; + changeScene(); + event.handled = true; + } else { + Common::Point dest((_destPos.x == -1) ? event.mousePos.x : _destPos.x, + (_destPos.y == -1) ? event.mousePos.y : _destPos.y); + ADD_PLAYER_MOVER(dest.x, dest.y); + + _moving = true; + event.handled = true; + } + } + } +} } // End of namespace Ringworld2 diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 4adfc9bc05..152e6f8518 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -42,6 +42,38 @@ public: static Scene *createScene(int sceneNumber); }; +class SceneArea: public EventHandler { +public: + Rect _bounds; + bool _enabled; + bool _insideArea; + CursorType _cursorNum; + CursorType _savedCursorNum; + int _cursorState; +public: + SceneArea(); + void setDetails(const Rect &bounds, CursorType cursor); + + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void process(Event &event); +}; + +class SceneExit: public SceneArea { +public: + bool _moving; + int _sceneNumber; + Common::Point _destPos; +public: + SceneExit(); + void setDetails(const Rect &bounds, CursorType cursor, int sceneNumber); + void setDest(const Common::Point &p) { _destPos = p; } + void changeScene(); + + virtual void synchronize(Serializer &s); + virtual void process(Event &event); +}; + class SceneExt: public Scene { private: static void startStrip(); @@ -55,6 +87,7 @@ public: SceneObject *_focusObject; Visage _cursorVisage; + SynchronizedList _sceneAreas; Rect _v51C34; public: @@ -249,7 +282,6 @@ public: } }; - } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From efcf3a6cbcc731b72c6c9edd8b2863250bd89c90 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 17 Nov 2011 21:59:10 +1100 Subject: TSAGE: Add new speakers file for R2RW --- engines/tsage/ringworld2/ringworld2_speakers.cpp | 460 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 122 ++++++ 2 files changed, 582 insertions(+) create mode 100644 engines/tsage/ringworld2/ringworld2_speakers.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_speakers.h (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp new file mode 100644 index 0000000000..df400bd214 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -0,0 +1,460 @@ +/* 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. + * + */ + +#include "tsage/ringworld2/ringworld2_speakers.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/graphics.h" +#include "tsage/staticres.h" +#include "tsage/ringworld2/ringworld2_scenes0.h" + +namespace TsAGE { + +namespace Ringworld2 { + +VisualSpeaker::VisualSpeaker(): Speaker() { + _delayAmount = 0; + _frameNumber = R2_GLOBALS._events.getFrameNumber(); + _color1 = 8; + _color2 = 0; + _displayMode = 0; + _fieldF6 = 0; +} + +void VisualSpeaker::remove() { + if (_object2) { + if (_fieldF8) { + _fieldF8 = 0; + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, (_fieldF6 == 0xff) ? this : NULL); + } else { + _object1.animate(ANIM_MODE_6, (_fieldF6 == 0xff) ? this : NULL); + } + } + + Speaker::remove(); +} + +void VisualSpeaker::synchronize(Serializer &s) { + Speaker::synchronize(s); + + SYNC_POINTER(_object2); + s.syncAsSint16LE(_fieldF6); + s.syncAsSint16LE(_fieldF8); + s.syncAsSint16LE(_displayMode); + s.syncAsSint16LE(_soundId); + s.syncAsSint16LE(_delayAmount); + s.syncAsByte(_removeObject); + s.syncAsSint32LE(_frameNumber); + s.syncAsSint16LE(_numFrames); +} + +void VisualSpeaker::setText(const Common::String &msg) { + _sceneText.remove(); + + // Position the text depending on the specified display mode + switch (_displayMode) { + case 2: + _textPos = Common::Point(60, 20); + break; + case 3: + _textPos = Common::Point(110, 20); + break; + case 4: + _textPos = Common::Point(10, 100); + break; + case 5: + _textPos = Common::Point(60, 100); + break; + case 6: + _textPos = Common::Point(110, 100); + break; + case 7: + _textPos = Common::Point(170, 20); + break; + case 8: + _textPos = Common::Point(170, 100); + break; + case 9: + _textPos = Common::Point(330, 20); + break; + default: + _textPos = Common::Point(10, 20); + break; + } + + // Check if the message starts with a '!'. If so, it indicates a speech resource Id to be played, + // in which case extract the resource number from the message. + _soundId = 0; + Common::String s = msg; + if (s.hasPrefix("!")) { + s.deleteChar(0); + _soundId = atoi(msg.c_str()); + + while (!s.empty() && (*s.c_str() >= '0' && *s.c_str() <= '9')) + s.deleteChar(0); + } + + // Set up the text details + _sceneText._color1 = _color1; + _sceneText._color2 = _color2; + _sceneText._color3 = _color3; + _sceneText._width = _textWidth; + _sceneText._fontNumber = _fontNumber; + _sceneText._textMode = _textMode; + _sceneText.setup(msg); + + //_sceneText.clone(); + + _sceneText.setPosition(_textPos); + _sceneText.setPriority(0x100); + + // If subtitles are turned off, don't show the text + if (!(R2_GLOBALS._speechSubtitles & 1)) { + _sceneText.hide(); + } + + // Figure out the text delay if subtitles are turned on, or there's no speech resource specified + if ((R2_GLOBALS._speechSubtitles & 1) || !_soundId) { + const char *msgP = s.c_str(); + int numWords = 0; + while (*msgP != '\0') { + if (*msgP++ == ' ') + ++numWords; + } + + if (!numWords && !s.empty()) + ++numWords; + + _numFrames = numWords * 30 + 120; + setFrame(_numFrames); + } else { + _numFrames = 1; + } + + // If the text is empty, no delay is needed + if (s.empty()) + _numFrames = 0; + + + if (_fieldF6) { + if ((R2_GLOBALS._speechSubtitles & 1) || !_soundId) + _sceneText.hide(); + } else { + if ((R2_GLOBALS._speechSubtitles & 2) && _soundId) { + if (!R2_GLOBALS._playStream.play(_soundId, NULL)) + _sceneText.show(); + } + } +} + +void VisualSpeaker::proc16() { + R2_GLOBALS._playStream.stop(); + _fieldF6 = 0; + _object1.remove(); + + assert(_object2); + _object2->show(); + _object2 = NULL; + _fieldF8 = 0; +} + +void VisualSpeaker::setFrame(int numFrames) { + _delayAmount = numFrames; + _frameNumber = R2_GLOBALS._events.getFrameNumber(); +} + +/*--------------------------------------------------------------------------*/ + +SpeakerMiranda300::SpeakerMiranda300(): VisualSpeaker() { + _speakerName = "MIRANDA"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerMiranda300::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) { + _object2 = &R2_GLOBALS._player; + } else { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_miranda; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else if (v == 100) { + _numFrames = 0; + ((SceneItem *)_action)->_sceneRegionId = 0; + + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + if (v == 4) { + _object1.setup(304, 5, 1); + } else { + _object1.setup(305, v * 2 - 1, 1); + } + _object1.animate(ANIM_MODE_5, this); + } +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSeeker300::SpeakerSeeker300(): VisualSpeaker() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker300::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) { + _object2 = &R2_GLOBALS._player; + } else { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + _object1.postInit(); + _object1.fixPriority(140); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else if (v == 100) { + _numFrames = 0; + ((SceneItem *)_action)->_sceneRegionId = 0; + + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(306, v * 2 - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +/*--------------------------------------------------------------------------*/ + +SpeakerSeekerL::SpeakerSeekerL(): VisualSpeaker() { + _speakerName = "SEEKERL"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; + _fontNumber = 10; +}; + +/*--------------------------------------------------------------------------*/ + +SpeakerQuinnL::SpeakerQuinnL(): VisualSpeaker() { + _speakerName = "QUINNL"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; + _fontNumber = 10; +}; + +/*--------------------------------------------------------------------------*/ + +SpeakerQuinn300::SpeakerQuinn300(): VisualSpeaker() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn300::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) { + _object2 = &R2_GLOBALS._player; + } else { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_quinn; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else if (v == 100) { + _numFrames = 0; + ((SceneItem *)_action)->_sceneRegionId = 0; + + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + switch (_object2->_visage) { + case 10: + _object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1); + break; + case 302: + _object1.setup(308, (v - 1) % 8 + 1, 1); + break; + case 308: + _object1.setup(308, 5, 1); + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + +/*--------------------------------------------------------------------------*/ + +SpeakerTeal300::SpeakerTeal300(): VisualSpeaker() { + _speakerName = "TEAL"; + _color1 = 22; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerTeal300::proc15() { + int v = _fieldF6; + + if (!_object2) { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_teal; + _object2->hide(); + + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(303, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + + +/*--------------------------------------------------------------------------*/ + +SpeakerSoldier300::SpeakerSoldier300(): VisualSpeaker() { + _speakerName = "SOLDIER"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSoldier300::proc15() { + int v = _fieldF6; + + if (!_object2) { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_teal; + _object2->hide(); + + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(303, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } +} +} // End of namespace Ringworld2 + +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h new file mode 100644 index 0000000000..97972549fa --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -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. + * + */ + +#ifndef TSAGE_RINGWORLD2_SPEAKERS_H +#define TSAGE_RINGWORLD2_SPEAKERS_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/ringworld2/ringworld2_logic.h" + +namespace TsAGE { + +namespace Ringworld2 { + +using namespace TsAGE; + +class VisualSpeaker: public Speaker { +public: + SceneActor _object1; + SceneObject *_object2; + int _fieldF6, _fieldF8; + int _displayMode; + int _soundId; + int _delayAmount; + bool _removeObject; + int _frameNumber; + int _numFrames; +private: + void setFrame(int numFrames); +public: + VisualSpeaker(); + + virtual Common::String getClassName() { return "VisualSpeaker"; } + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void setText(const Common::String &msg); + virtual void proc15() {} + virtual void proc16(); +}; + +class SpeakerMiranda300: public VisualSpeaker { +public: + SpeakerMiranda300(); + + virtual Common::String getClassName() { return "SpeakerMiranda300"; } + virtual void proc15(); +}; + +class SpeakerSeeker300: public VisualSpeaker { +public: + SpeakerSeeker300(); + + virtual Common::String getClassName() { return "SpeakerSeeker300"; } + virtual void proc15(); +}; + +class SpeakerSeekerL: public VisualSpeaker { +public: + SpeakerSeekerL(); + + virtual Common::String getClassName() { return "SpeakerSeekerL"; } +}; + +class SpeakerQuinnL: public VisualSpeaker { +public: + SpeakerQuinnL(); + + virtual Common::String getClassName() { return "SpeakerQuinnL"; } +}; + +class SpeakerQuinn300: public VisualSpeaker { +public: + SpeakerQuinn300(); + + virtual Common::String getClassName() { return "SpeakerQuinn300"; } + virtual void proc15(); +}; + +class SpeakerTeal300: public VisualSpeaker { +public: + SpeakerTeal300(); + + virtual Common::String getClassName() { return "SpeakerTeal300"; } + virtual void proc15(); +}; + +class SpeakerSoldier300: public VisualSpeaker { +public: + SpeakerSoldier300(); + + virtual Common::String getClassName() { return "SpeakerSoldier300"; } + virtual void proc15(); +}; + +} // End of namespace Ringworld2 + +} // End of namespace TsAGE + +#endif -- cgit v1.2.3 From 718e314601f84fd6b7d43b32fe05668ec28aed21 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 17 Nov 2011 22:03:00 +1100 Subject: TSAGE: Basic implementation of R2RW scene 300 - Bridge --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 769 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 85 +++ 3 files changed, 854 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 7294b3d726..d0921a1eb3 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -49,7 +49,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 200: case 205: case 250: + error("Missing scene %d from group 0", sceneNumber); case 300: + return new Scene300(); case 325: case 400: case 500: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index cbe1fc7846..4df081d0cb 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -24,6 +24,7 @@ #include "tsage/tsage.h" #include "tsage/staticres.h" #include "tsage/ringworld2/ringworld2_scenes0.h" +#include "tsage/ringworld2/ringworld2_speakers.h" namespace TsAGE { @@ -773,7 +774,7 @@ void Scene125::signal() { case 12: if (_soundCount > 0) --_soundCount; - if (!_soundCount || (R2_GLOBALS._v57C2C == 2)) { + if (!_soundCount || (R2_GLOBALS._speechSubtitles & 2)) { _soundIndex = 0; R2_GLOBALS._playStream.stop(); } else { @@ -1147,7 +1148,7 @@ void Scene125::setDetails(int resNum, int lineNum) { R2_GLOBALS._sceneObjects->draw(); - if ((_soundCount > 0) && (R2_GLOBALS._v57C2C != 2)) { + if ((_soundCount > 0) && (R2_GLOBALS._speechSubtitles & 2)) { _sceneMode = 12; R2_GLOBALS._playStream.play(_soundIndexes[_soundIndex], this); } @@ -1197,6 +1198,770 @@ Common::String Scene125::parseMessage(const Common::String &msg) { return Common::String(msgP); } +/*-------------------------------------------------------------------------- + * Scene 300 - Bridge + * + *--------------------------------------------------------------------------*/ + +void Scene300::Action1::signal() { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: + setAction(&scene->_sequenceManager2, this, 311, (R2_GLOBALS._player._characterIndex == 1) ? + (SceneObject *)&R2_GLOBALS._player : (SceneObject *)&scene->_quinn); + _actionIndex = 2; + break; + case 1: + setAction(&scene->_sequenceManager2, this, 312, (R2_GLOBALS._player._characterIndex == 1) ? + (SceneObject *)&R2_GLOBALS._player : (SceneObject *)&scene->_quinn); + _actionIndex = 0; + break; + case 2: + if (!R2_GLOBALS._playStream.isPlaying()) + _actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1); + break; + default: + break; + } +} + +void Scene300::Action2::signal() { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: + setAction(&scene->_sequenceManager3, this, 302, &scene->_seeker, NULL); + _actionIndex = 2; + break; + case 1: + setAction(&scene->_sequenceManager3, this, 303, &scene->_seeker, NULL); + _actionIndex = 2; + break; + case 2: + if (!R2_GLOBALS._playStream.isPlaying()) + _actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1); + + setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(119)); + break; + default: + break; + } +} + +void Scene300::Action3::signal() { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: + setAction(&scene->_sequenceManager3, this, 304, &scene->_miranda, NULL); + _actionIndex = 2; + break; + case 1: + setAction(&scene->_sequenceManager3, this, 305, &scene->_miranda, NULL); + _actionIndex = 2; + break; + case 2: + if (!R2_GLOBALS._playStream.isPlaying()) + _actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1); + + setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(119)); + break; + default: + break; + } +} + + +void Scene300::Action4::signal() { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + if (!R2_GLOBALS._playStream.isPlaying()) { + scene->_object7.setStrip2(R2_GLOBALS._randomSource.getRandomNumber(2)); + scene->_object7.setFrame(1); + + scene->_object9.setStrip2(3); + scene->_object9.setFrame(1); + } + + setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(479)); +} + +/*--------------------------------------------------------------------------*/ + +bool Scene300::QuinnWorkstation::startAction(CursorType action, Event &event) { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex != 1) + SceneItem::display2(300, 46); + else if (R2_GLOBALS.getFlag(44)) { + R2_GLOBALS._player.setAction(NULL); + R2_GLOBALS._sceneManager.changeScene(325); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 306; + scene->setAction(&scene->_sequenceManager1, scene, 306, &R2_GLOBALS._player, NULL); + } + return true; + + case CURSOR_LOOK: + if (R2_GLOBALS._player._characterIndex == 1) { + SceneItem::display2(300, 47); + return true; + } + break; + + default: + break; + } + + return NamedHotspot::startAction(action, event); +} + +bool Scene300::MirandaWorkstation::startAction(CursorType action, Event &event) { + switch (action) { + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex != 3) + SceneItem::display2(300, 49); + else + R2_GLOBALS._sceneManager.changeScene(325); + return true; + + case CURSOR_LOOK: + if (R2_GLOBALS._player._characterIndex == 3) { + SceneItem::display2(300, 47); + return true; + } + break; + + default: + break; + } + + return NamedHotspot::startAction(action, event); +} + +bool Scene300::SeekerWorkstation::startAction(CursorType action, Event &event) { + switch (action) { + case CURSOR_LOOK: + if (R2_GLOBALS._player._characterIndex == 2) { + SceneItem::display2(300, 47); + return true; + } + break; + + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex != 2) + SceneItem::display2(300, 48); + else + R2_GLOBALS._sceneManager.changeScene(325); + return true; + + default: + break; + } + + return NamedHotspot::startAction(action, event); +} + +/*--------------------------------------------------------------------------*/ + +bool Scene300::Miranda::startAction(CursorType action, Event &event) { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_TALK: + if (R2_GLOBALS._player._characterIndex == 1) { + + } else { + scene->_sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_WALK); // TODO: Determine correct cursor + + if (!R2_GLOBALS.getFlag(44)) + scene->_field412 = 174 + R2_GLOBALS._randomSource.getRandomNumber(2); + else if (!R2_GLOBALS.getFlag(55)) + scene->_field412 = 211; + else + scene->_field412 = 438; + } + return true; + + case R2_OPTO_DISK: + SceneItem::display2(300, 54); + return true; + + case R2_2: + if (!R2_GLOBALS.getFlag(2) || !R2_GLOBALS.getFlag(3) || (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 1)) + SceneItem::display2(300, 55); + else { + R2_GLOBALS._player.disableControl(); + scene->_field412 = R2_GLOBALS.getFlag(4) ? 121 : 120; + scene->_sceneMode = 309; + scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); + } + return true; + + default: + break; + } + + return SceneActor::startAction(action, event); +} + +bool Scene300::Seeker::startAction(CursorType action, Event &event) { + return false; +} + +bool Scene300::Quinn::startAction(CursorType action, Event &event) { + return false; +} + +/*--------------------------------------------------------------------------*/ + +Scene300::Scene300(): SceneExt() { + _field412 = 0; + _rotation = NULL; +} + +void Scene300::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + SYNC_POINTER(_rotation); +} + +void Scene300::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(300); + _sound1.play(23); + setZoomPercents(75, 93, 120, 100); + + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._sceneManager._previousScene = 1000; + R2_GLOBALS._player._characterIndex = 1; + } + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_quinnLSpeaker); + _stripManager.addSpeaker(&_seekerLSpeaker); + _stripManager.addSpeaker(&_tealSpeaker); + _stripManager.addSpeaker(&_soldierSpeaker); + + _rotation = R2_GLOBALS._scenePalette.addRotation(237, 254, -1); + _rotation->setDelay(3); + _rotation->_countdown = 1; + + if (R2_GLOBALS.getFlag(51) && !R2_GLOBALS.getFlag(25)) { + _object1.postInit(); + _object1.setup(301, 7, 2); + _object1.setPosition(Common::Point(65, 24)); + + _object2.postInit(); + _object2.setup(301, 8, 2); + _object2.setPosition(Common::Point(254, 24)); + } + + _doorway.postInit(); + _doorway.setVisage(300); + _doorway.setPosition(Common::Point(159, 79)); + + _object3.postInit(); + _object3.setup(300, 4, 1); + _object3.setPosition(Common::Point(84, 48)); + _object3.animate(ANIM_MODE_2, NULL); + _object3._numFrames = 5; + + _object4.postInit(); + _object4.setup(300, 5, 1); + _object4.setPosition(Common::Point(236, 48)); + + _object4.animate(ANIM_MODE_2, NULL); + + _protocolDisplay.postInit(); + _protocolDisplay.setup(300, 6, 1); + _protocolDisplay.setPosition(Common::Point(287, 71)); + _protocolDisplay.animate(ANIM_MODE_7, NULL); + _protocolDisplay._numFrames = 5; + + _object6.postInit(); + _object6.setup(300, 7, 1); + _object6.setPosition(Common::Point(214, 37)); + _object6.animate(ANIM_MODE_2, NULL); + _object6._numFrames = 3; + + _object7.postInit(); + _object7.setup(301, 1, 1); + _object7.setPosition(Common::Point(39, 97)); + _object7.fixPriority(124); + _object7.animate(ANIM_MODE_2, NULL); + _object7._numFrames = 5; + _object7.setAction(&_action4); + + _object8.postInit(); + _object8.setup(300, 8, 1); + _object8.setPosition(Common::Point(105, 37)); + _object8.animate(ANIM_MODE_2, NULL); + _object8._numFrames = 5; + + _object9.postInit(); + _object9.setup(301, 6, 1); + _object9.setPosition(Common::Point(274, 116)); + _object9.fixPriority(143); + _object9.animate(ANIM_MODE_2, NULL); + _object9._numFrames = 5; + + _quinnWorkstation1.setDetails(Rect(243, 148, 315, 167), 300, 30, 31, 32, 1, NULL); + _mirandaWorkstation1.setDetails(Rect(4, 128, 69, 167), 300, 33, 31, 35, 1, NULL); + + switch (R2_GLOBALS._player._characterIndex) { + case 1: + _miranda.postInit(); + _miranda.setup(302, 2, 1); + _miranda.setPosition(Common::Point(47, 128)); + _miranda.setAction(&_action3); + _miranda.setDetails(300, 39, 40, 41, 1, NULL); + + if ((R2_GLOBALS._player._characterScene[2] == 300) || (R2_GLOBALS._player._characterScene[2] == 325)) { + _seeker.postInit(); + _seeker.setVisage(302); + _seeker.setPosition(Common::Point(158, 108)); + _seeker.fixPriority(130); + _seeker.setAction(&_action2); + _seeker.setDetails(300, 42, 43, 44, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + break; + + case 2: + _miranda.postInit(); + _miranda.setup(302, 2, 1); + _miranda.setPosition(Common::Point(47, 128)); + _miranda.setAction(&_action3); + _miranda.setDetails(300, 39, 40, 41, 1, NULL); + + if ((R2_GLOBALS._player._characterScene[1] == 300) || (R2_GLOBALS._player._characterScene[1] == 325)) { + _quinn.postInit(); + _quinn.setup(302, 3, 1); + _quinn.setPosition(Common::Point(271, 150)); + _quinn.setAction(&_action1); + _quinn.setDetails(300, 50, 51, 52, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setup(302, 1, 3); + R2_GLOBALS._player.setPosition(Common::Point(158, 108)); + R2_GLOBALS._player.fixPriority(130); + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + + case 3: + if ((R2_GLOBALS._player._characterScene[2] == 300) || (R2_GLOBALS._player._characterScene[2] == 325)) { + _seeker.postInit(); + _seeker.setVisage(302); + _seeker.setPosition(Common::Point(158, 108)); + _seeker.fixPriority(130); + _seeker.setAction(&_action2); + _seeker.setDetails(300, 42, 43, 44, 1, NULL); + } + + if ((R2_GLOBALS._player._characterScene[1] == 300) || (R2_GLOBALS._player._characterScene[1] == 325)) { + _quinn.postInit(); + _quinn.setup(302, 3, 1); + _quinn.setPosition(Common::Point(271, 150)); + _quinn.setAction(&_action1); + _quinn.setDetails(300, 50, 51, 52, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setup(302, 2, 1); + R2_GLOBALS._player.setPosition(Common::Point(47, 128)); + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + + default: + break; + } + + _seekerWorkstation.setDetails(Rect(101, 95, 217, 143), 300, 36, 31, 35, 1, NULL); + _quinnWorkstation2.setDetails(Rect(224, 102, 315, 143), 300, 30, 31, 32, 1, NULL); + _mirandaWorkstation2.setDetails(Rect(4, 83, 84, 124), 300, 33, 31, 35, 1, NULL); + _hull.setDetails(11, 300, 6, -1, -1); + _statusDisplays.setDetails(12, 300, 9, 10, -1); + _damageControl.setDetails(13, 300, 12, -1, -1); + _manualOverrides.setDetails(14, 300, 15, -1, 17); + _scanners1.setDetails(Rect(126, 15, 183, 25), 300, 18, -1, 20, 1, NULL); + _scanners2.setDetails(Rect(126, 80, 183, 90), 300, 18, -1, 20, 1, NULL); + _protocolDisplay.setDetails(300, 27, -1, 29, 1, NULL); + _indirectLighting1.setDetails(Rect(74, 71, 122, 89), 300, 21, -1, -1, 1, NULL); + _indirectLighting2.setDetails(Rect(197, 71, 245, 89), 300, 21, -1, -1, 1, NULL); + _lighting.setDetails(Rect(129, 3, 190, 14), 300, 24, -1, -1, 1, NULL); + _doorway.setDetails(300, 3, -1, 5, 1, NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 300, 0, -1, -1, 1, NULL); + + switch (R2_GLOBALS._player._characterIndex) { + case 1: + _sceneMode = 300; + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 250: + setAction(&_sequenceManager1, this, 300, &R2_GLOBALS._player, &_doorway, NULL); + break; + case 325: + if (!R2_GLOBALS.getFlag(44) || R2_GLOBALS.getFlag(25)) + setAction(&_sequenceManager1, this, 309, &R2_GLOBALS._player, NULL); + else { + R2_GLOBALS.setFlag(60); + R2_GLOBALS._player.setup(302, 3, 1); + R2_GLOBALS._player.setPosition(Common::Point(271, 150)); + R2_GLOBALS._player.setAction(&_action1); + + if (R2_GLOBALS.getFlag(55)) { + if (R2_GLOBALS.getFlag(57)) { + R2_GLOBALS.clearFlag(60); + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Find correct cursor + _sceneMode = 16; + _stripManager.start(404, this); + } else { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } + } else { + if (R2_GLOBALS.getFlag(45)) { + R2_GLOBALS.clearFlag(60); + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Find correct cursor + _sceneMode = 12; + _stripManager.start3(204, this, R2_GLOBALS._stripManager_lookupList); + } else { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } + } + } + break; + case 1000: + R2_GLOBALS.setFlag(60); + R2_GLOBALS._player.setup(302, 3, 1); + R2_GLOBALS._player.setPosition(Common::Point(271, 150)); + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor #2 + + if (R2_GLOBALS.getFlag(51)) { + _sceneMode = 13; + _stripManager.start3(300, this, R2_GLOBALS._stripManager_lookupList); + } else { + _sceneMode = 11; + _stripManager.start3(200, this, R2_GLOBALS._stripManager_lookupList); + } + break; + + case 1100: + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.setPosition(Common::Point(160, 95)); + _field412 = 400; + _sceneMode = 309; + setAction(&_sequenceManager1, this, 309, &R2_GLOBALS._player, NULL); + break; + + case 1500: + R2_GLOBALS.clearFlag(60); + R2_GLOBALS._player.setup(302, 3, 1); + R2_GLOBALS._player.setPosition(Common::Point(271, 150)); + _sceneMode = 17; + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor #2 + _stripManager.start(413, this); + break; + + default: + if (R2_GLOBALS.getFlag(60)) { + R2_GLOBALS._player.setup(302, 3, 1); + R2_GLOBALS._player.setPosition(Common::Point(271, 150)); + R2_GLOBALS._player.setAction(&_action1); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + } else { + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(200, 150)); + R2_GLOBALS._player.enableControl(); + } + break; + } + break; + + case 3: + if (R2_GLOBALS._sceneManager._previousScene == 1500) { + R2_GLOBALS._player._fieldBC = 3150; + R2_GLOBALS._player._characterScene[3] = 3150; + R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player.setAction(NULL); + R2_GLOBALS._player.disableControl(); + + _quinn.postInit(); + _quinn.setVisage(10); + _quinn.setPosition(Common::Point(10, 10)); + _quinn.hide(); + + _seeker.postInit(); + _seeker.setVisage(20); + _seeker.setPosition(Common::Point(20, 20)); + _seeker.hide(); + + _teal.postInit(); + _soldier.postInit(); + _object12.postInit(); + + R2_GLOBALS._sound1.play(107); + _sceneMode = 308; + + setAction(&_sequenceManager1, this, 308, &R2_GLOBALS._player, &_teal, &_soldier, &_object12, &_doorway, NULL); + } + break; + default: + break; + } +} + +void Scene300::remove() { + R2_GLOBALS._player.setAction(NULL); + SceneExt::remove(); +} + +void Scene300::signal() { + switch (_sceneMode) { + case 10: + switch (_stripManager._field2E8) { + case 0: + R2_GLOBALS._sound1.changeSound(10); + R2_GLOBALS.setFlag(38); + break; + case 1: + R2_GLOBALS.setFlag(3); + break; + case 2: + R2_GLOBALS.setFlag(4); + break; + case 3: + R2_GLOBALS.setFlag(13); + if (R2_GLOBALS._stripManager_lookupList[1] == 6) + R2_GLOBALS.setFlag(40); + break; + case 4: + if (R2_GLOBALS._stripManager_lookupList[1] == 6) + R2_GLOBALS.setFlag(40); + break; + case 5: + R2_GLOBALS._sceneManager.changeScene(1000); + break; + default: + break; + } + + _stripManager._field2E8 = 0; + switch (_field412) { + case 400: + R2_GLOBALS._player.disableControl(); + _sceneMode = 15; + setAction(&_sequenceManager1, this, 306, &R2_GLOBALS._player, NULL); + break; + case 181: + R2_GLOBALS._player.setStrip(6); + // Deliberate fall-through + default: + R2_GLOBALS._player.enableControl(CURSOR_TALK); + + if ((R2_GLOBALS._player._characterIndex != 1) || R2_GLOBALS.getFlag(44)) + R2_GLOBALS._player._canWalk = false; + break; + } + break; + + case 11: + R2_GLOBALS.setFlag(44); + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + + case 12: + R2_GLOBALS._player.setAction(NULL); + R2_GLOBALS._sceneManager.changeScene(1010); + break; + + case 13: + R2_GLOBALS._player.disableControl(); + _seeker.changeZoom(-1); + _sceneMode = 313; + _seeker.setAction(NULL); + setAction(&_sequenceManager1, this, 313, &R2_GLOBALS._player, &_seeker, NULL); + break; + + case 14: + if (_seeker._action) + R2_GLOBALS._player.disableControl(); + _sceneMode = 314; + break; + + case 15: + R2_GLOBALS.setFlag(55); + R2_GLOBALS.setFlag(38); + R2_GLOBALS.setFlag(44); + R2_GLOBALS.setFlag(51); + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + _sceneMode = 16; + _stripManager.start3(401, this, R2_GLOBALS._stripManager_lookupList); + break; + + case 16: + if (_stripManager._field2E8 == 1) { + R2_GLOBALS._player.setAction(NULL); + R2_GLOBALS._sceneManager.changeScene(1000); + } else { + R2_GLOBALS._player.setAction(&_action1); + R2_GLOBALS._player.enableControl(CURSOR_TALK); + } + break; + + case 17: + R2_GLOBALS._player.disableControl(); + _sceneMode = 316; + _seeker.changeZoom(-1); + _seeker.setAction(&_sequenceManager3, this, 316, &_seeker, &_doorway, NULL); + R2_GLOBALS._player.setAction(&_sequenceManager1, NULL, 307, &R2_GLOBALS._player, NULL); + break; + + case 18: + R2_GLOBALS._player.disableControl(); + _sceneMode = 317; + setAction(&_sequenceManager1, this, 317, &_teal, &_doorway, NULL); + break; + + case 19: + R2_GLOBALS._player.disableControl(); + _sceneMode = 318; + setAction(&_sequenceManager1, this, 318, &R2_GLOBALS._player, &_teal, &_soldier, &_object12, NULL); + break; + + case 20: + R2_GLOBALS._player._characterIndex = 1; + R2_GLOBALS._sceneManager.changeScene(1500); + break; + + case 300: + case 307: + R2_GLOBALS._player.enableControl(); + break; + + case 301: + R2_GLOBALS._sceneManager.changeScene(250); + break; + + case 306: + R2_GLOBALS._sceneManager.changeScene(325); + break; + + case 308: + _sceneMode = 18; + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + _stripManager.start(418, this); + break; + + case 310: + R2_GLOBALS._player.setStrip(5); + // Deliberate fall-through + case 309: + signal309(); + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + _sceneMode = 10; + _stripManager.start3(_field412, this, R2_GLOBALS._stripManager_lookupList); + break; + + case 313: + _sceneMode = 14; + R2_GLOBALS._player._effect = 0; + _seeker.setAction(&_sequenceManager3, this, 314, &_seeker, &_doorway, NULL); + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + _stripManager.start(301, this); + break; + + case 314: + R2_GLOBALS._player.disableControl(); + _sceneMode = 315; + R2_GLOBALS._player._effect = 1; + setAction(&_sequenceManager1, this, 315, &R2_GLOBALS._player, &_doorway, NULL); + break; + + case 315: + R2_GLOBALS._sceneManager.changeScene(1100); + break; + + case 316: + R2_GLOBALS._player._characterScene[2] = 500; + _seeker.remove(); + R2_GLOBALS._player.enableControl(/* TODO: Cursor #3 */); + break; + + case 317: + _sceneMode = 19; + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + _stripManager.start(419, this); + break; + + case 318: + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + _stripManager.start(420, this); + break; + + default: + break; + } +} + +void Scene300::signal309() { + if (R2_GLOBALS.getFlag(2)) + R2_GLOBALS._stripManager_lookupList[0] = (R2_INVENTORY.getObjectScene(R2_2) == 1) ? 3 : 2; + + if (R2_GLOBALS.getFlag(4)) + R2_GLOBALS._stripManager_lookupList[0] = 4; + + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 1) + R2_GLOBALS._stripManager_lookupList[0] = 5; + + if (R2_GLOBALS.getFlag(13)) { + R2_GLOBALS._stripManager_lookupList[0] = 6; + R2_GLOBALS._stripManager_lookupList[2] = 2; + } + + if (R2_GLOBALS.getFlag(39)) + R2_GLOBALS._stripManager_lookupList[1] = 2; + + if (R2_GLOBALS.getFlag(5)) + R2_GLOBALS._stripManager_lookupList[1] = 3; + + if (R2_GLOBALS.getFlag(6)) + R2_GLOBALS._stripManager_lookupList[1] = 4; + + if (R2_GLOBALS.getFlag(8)) + R2_GLOBALS._stripManager_lookupList[1] = 5; + + if (R2_GLOBALS.getFlag(9)) { + R2_GLOBALS._stripManager_lookupList[1] = 6; + R2_GLOBALS._stripManager_lookupList[3] = 2; + } + + if (R2_GLOBALS.getFlag(48)) + R2_GLOBALS._stripManager_lookupList[4] = 2; + + if (R2_GLOBALS.getFlag(49)) + R2_GLOBALS._stripManager_lookupList[4] = 3; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 38710a7cbc..c207118372 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -31,6 +31,7 @@ #include "tsage/globals.h" #include "tsage/sound.h" #include "tsage/ringworld2/ringworld2_logic.h" +#include "tsage/ringworld2/ringworld2_speakers.h" namespace TsAGE { @@ -156,6 +157,90 @@ public: Common::String parseMessage(const Common::String &msg); }; +class Scene300: public SceneExt { + /* 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(); + }; + + /* Items */ + class QuinnWorkstation: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class MirandaWorkstation: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class SeekerWorkstation: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Objects */ + class Miranda: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Seeker: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Quinn: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3, _sequenceManager4; + ASoundExt _sound1; + SpeakerMiranda300 _mirandaSpeaker; + SpeakerSeeker300 _seekerSpeaker; + SpeakerSeekerL _seekerLSpeaker; + SpeakerQuinn300 _quinnSpeaker; + SpeakerQuinnL _quinnLSpeaker; + SpeakerTeal300 _tealSpeaker; + SpeakerSoldier300 _soldierSpeaker; + + NamedHotspot _background, _hull, _statusDisplays, _damageControl, _manualOverrides; + NamedHotspot _scanners1, _scanners2, _indirectLighting1, _indirectLighting2, _lighting; + QuinnWorkstation _quinnWorkstation1, _quinnWorkstation2; + SeekerWorkstation _seekerWorkstation; + MirandaWorkstation _mirandaWorkstation1, _mirandaWorkstation2; + SceneActor _object1, _object2, _object3, _object4, _protocolDisplay; + SceneActor _object6, _object7, _object8, _object9; + SceneActor _teal, _soldier, _object12, _doorway; + Miranda _miranda; + Seeker _seeker; + Quinn _quinn; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + PaletteRotation *_rotation; + int _field412; + + Scene300(); + void signal309(); + + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 30c943e3a91d39a25ea0572d6d59f5b910af12b0 Mon Sep 17 00:00:00 2001 From: Alyssa Milburn Date: Thu, 17 Nov 2011 13:44:00 +0100 Subject: TSAGE: Remove extra semicolons. --- engines/tsage/ringworld2/ringworld2_speakers.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index df400bd214..3c9a84c123 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -301,7 +301,7 @@ SpeakerSeekerL::SpeakerSeekerL(): VisualSpeaker() { _displayMode = 1; _numFrames = 0; _fontNumber = 10; -}; +} /*--------------------------------------------------------------------------*/ @@ -316,7 +316,7 @@ SpeakerQuinnL::SpeakerQuinnL(): VisualSpeaker() { _displayMode = 1; _numFrames = 0; _fontNumber = 10; -}; +} /*--------------------------------------------------------------------------*/ -- cgit v1.2.3 From 04ae8dbf207ab45dc6018517ad55c6f14a086321 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 19 Nov 2011 16:28:47 +1100 Subject: TSAGE: Properly update user interface when switching between characters in R2RW --- engines/tsage/ringworld2/ringworld2_logic.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d0921a1eb3..6a390df611 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -175,6 +175,11 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { // Exclude the bottom area of the screen to allow room for the UI T2_GLOBALS._interfaceY = UI_INTERFACE_Y; + + // Initialise fields + _action = NULL; + _field12 = 0; + _sceneMode = 0; } void SceneExt::remove() { @@ -209,6 +214,20 @@ void SceneExt::loadScene(int sceneNum) { _v51C34.top = 0; _v51C34.bottom = 300; + + int prevScene = R2_GLOBALS._sceneManager._previousScene; + int sceneNumber = R2_GLOBALS._sceneManager._sceneNumber; + + if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) || + (sceneNumber == 50) || ((prevScene == 205) && (sceneNumber == 100)) || + ((prevScene == 180) && (sceneNumber == 100))) { + // TODO: sub_17875 + R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements.show(); + } else { + // Update the user interface + R2_GLOBALS._uiElements.updateInventory(); + } } bool SceneExt::display(CursorType action) { -- cgit v1.2.3 From afc92983bea4c060917a2388e89d405df388d522 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 23 Nov 2011 17:55:15 +1100 Subject: TSAGE: Bugfixes for R2RW SceneExit class --- engines/tsage/ringworld2/ringworld2_logic.cpp | 35 +++++++++++++++------------ engines/tsage/ringworld2/ringworld2_logic.h | 6 ++--- 2 files changed, 23 insertions(+), 18 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 6a390df611..2946c9464f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -937,7 +937,7 @@ void SceneArea::process(Event &event) { R2_GLOBALS._events.setCursor(_cursorNum); } _insideArea = true; - } else if ((event.mousePos.y < 171) && _insideArea && (_cursorNum != cursor) && + } else if ((event.mousePos.y < 171) && _insideArea && (_cursorNum == cursor) && (_savedCursorNum != CURSOR_NONE)) { // Cursor moved outside bounded area R2_GLOBALS._events.setCursor(_savedCursorNum); @@ -980,21 +980,26 @@ void SceneExit::process(Event &event) { if (!R2_GLOBALS._insetUp) { SceneArea::process(event); - if (_enabled && (event.eventType == EVENT_BUTTON_DOWN)) { - if (!_bounds.contains(event.mousePos)) - _moving = 0; - else if (!R2_GLOBALS._player._canWalk) { - _moving = 0; - changeScene(); - event.handled = true; - } else { - Common::Point dest((_destPos.x == -1) ? event.mousePos.x : _destPos.x, - (_destPos.y == -1) ? event.mousePos.y : _destPos.y); - ADD_PLAYER_MOVER(dest.x, dest.y); - - _moving = true; - event.handled = true; + if (_enabled) { + if (event.eventType == EVENT_BUTTON_DOWN) { + if (!_bounds.contains(event.mousePos)) + _moving = false; + else if (!R2_GLOBALS._player._canWalk) { + _moving = false; + changeScene(); + event.handled = true; + } else { + Common::Point dest((_destPos.x == -1) ? event.mousePos.x : _destPos.x, + (_destPos.y == -1) ? event.mousePos.y : _destPos.y); + ADD_PLAYER_MOVER(dest.x, dest.y); + + _moving = true; + event.handled = true; + } } + + if (_moving && (_bounds.contains(R2_GLOBALS._player._position) || (R2_GLOBALS._player._position == _destPos))) + changeScene(); } } } diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 152e6f8518..9eaa1b0cd1 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -66,9 +66,9 @@ public: Common::Point _destPos; public: SceneExit(); - void setDetails(const Rect &bounds, CursorType cursor, int sceneNumber); - void setDest(const Common::Point &p) { _destPos = p; } - void changeScene(); + virtual void setDetails(const Rect &bounds, CursorType cursor, int sceneNumber); + virtual void setDest(const Common::Point &p) { _destPos = p; } + virtual void changeScene(); virtual void synchronize(Serializer &s); virtual void process(Event &event); -- cgit v1.2.3 From d92650294fce75da6f2d8840250d3084540700db Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 23 Nov 2011 17:56:20 +1100 Subject: TSAGE: Implemented R2RW Scene 325 - Ship Corridor --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 154 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 37 ++++++ 3 files changed, 194 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 2946c9464f..942d1e451f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -46,7 +46,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 160: case 175: case 180: + error("Missing scene %d from group 0", sceneNumber); case 200: + // Ship Corridor + return new Scene200(); case 205: case 250: error("Missing scene %d from group 0", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 4df081d0cb..5db5ee011c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1198,6 +1198,160 @@ Common::String Scene125::parseMessage(const Common::String &msg) { return Common::String(msgP); } +/*-------------------------------------------------------------------------- + * Scene 200 - Ship Corridor + * + *--------------------------------------------------------------------------*/ + +bool Scene200::NorthDoor::startAction(CursorType action, Event &event) { + Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 202; + scene->setAction(&scene->_sequenceManager, scene, 202, &R2_GLOBALS._player, this, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene200::EastDoor::startAction(CursorType action, Event &event) { + Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 200; + scene->setAction(&scene->_sequenceManager, scene, 200, &R2_GLOBALS._player, this, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene200::WestDoor::startAction(CursorType action, Event &event) { + Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 204; + scene->setAction(&scene->_sequenceManager, scene, 204, &R2_GLOBALS._player, this, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene200::EastExit::changeScene() { + Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 206; + scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); +} + +void Scene200::WestExit::changeScene() { + Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 208; + scene->setAction(&scene->_sequenceManager, scene, 208, &R2_GLOBALS._player, NULL); +} + +/*--------------------------------------------------------------------------*/ + +void Scene200::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(200); + + _westExit.setDetails(Rect(94, 0, 123, 58), CURSOR_9, 175); + _westExit.setDest(Common::Point(125, 52)); + _eastExit.setDetails(Rect(133, 0, 167, 58), CURSOR_10, 150); + _eastExit.setDest(Common::Point(135, 52)); + + _northDoor.postInit(); + _northDoor.setVisage(200); + _northDoor.setPosition(Common::Point(188, 79)); + _northDoor.setDetails(200, 3, -1, -1, 1, NULL); + + _eastDoor.postInit(); + _eastDoor.setVisage(200); + _eastDoor.setStrip(2); + _eastDoor.setPosition(Common::Point(305, 124)); + _eastDoor.setDetails(200, 6, -1, -1, 1, NULL); + + _westDoor.postInit(); + _westDoor.setVisage(200); + _westDoor.setStrip(3); + _westDoor.setPosition(Common::Point(62, 84)); + _westDoor.setDetails(200, 9, -1, -1, 1, NULL); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _compartment.setDetails(Rect(4, 88, 153, 167), 200, 12, -1, -1, 1, NULL); + _westDoorDisplay.setDetails(Rect(41, 51, 48, 61), 200, 15, -1, -1, 1, NULL); + _eastDoorDisplay.setDetails(Rect(279, 67, 286, 78), 200, 18, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 200, 0, -1, -1, 1, NULL); + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 100: + _sceneMode = 201; + setAction(&_sequenceManager, this, 201, &R2_GLOBALS._player, &_eastDoor, NULL); + break; + case 150: + _sceneMode = 207; + setAction(&_sequenceManager, this, 207, &R2_GLOBALS._player, NULL); + break; + case 175: + _sceneMode = 209; + setAction(&_sequenceManager, this, 209, &R2_GLOBALS._player, NULL); + break; + case 250: + _sceneMode = 203; + setAction(&_sequenceManager, this, 203, &R2_GLOBALS._player, &_northDoor, NULL); + break; + case 400: + _sceneMode = 205; + setAction(&_sequenceManager, this, 205, &R2_GLOBALS._player, &_westDoor, NULL); + break; + default: + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(215, 115)); + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene200::signal() { + switch (_sceneMode) { + case 200: + R2_GLOBALS._sceneManager.changeScene(100); + break; + case 202: + R2_GLOBALS._sceneManager.changeScene(250); + break; + case 204: + R2_GLOBALS._sceneManager.changeScene(400); + break; + case 206: + R2_GLOBALS._sceneManager.changeScene(150); + break; + case 208: + R2_GLOBALS._sceneManager.changeScene(175); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + /*-------------------------------------------------------------------------- * Scene 300 - Bridge * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index c207118372..4d2c454c4e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -157,6 +157,43 @@ public: Common::String parseMessage(const Common::String &msg); }; +class Scene200: public SceneExt { + /* Objects */ + class NorthDoor: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class EastDoor: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class WestDoor: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Scene Exits */ + class EastExit: public SceneExit { + public: + virtual void changeScene(); + }; + class WestExit: public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _background, _compartment, _westDoorDisplay, _eastDoorDisplay; + NorthDoor _northDoor; + EastDoor _eastDoor; + WestDoor _westDoor; + EastExit _eastExit; + WestExit _westExit; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + class Scene300: public SceneExt { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From 8a2500cd64afa063557014b3d0e9490abd6c1096 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 23 Nov 2011 10:52:08 +0100 Subject: TSAGE: R2R - Replace oldSceneNumber by an array, as each character has its own --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 5db5ee011c..53f47ce43c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -579,7 +579,7 @@ bool Scene125::Item4::startAction(CursorType action, Event &event) { Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldSceneNumber) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldCharacterScene[1]) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 126; scene->setAction(&scene->_sequenceManager, scene, 126, &scene->_object7, NULL); @@ -621,13 +621,13 @@ void Scene125::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene != 125) // Save the prior scene to return to when the console is turned off - R2_GLOBALS._player._oldSceneNumber = R2_GLOBALS._sceneManager._previousScene; + R2_GLOBALS._player._oldCharacterScene[1] = R2_GLOBALS._sceneManager._previousScene; R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldSceneNumber) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldCharacterScene[1]) { _object7.postInit(); _object7.setup(160, 3, 5); _object7.setPosition(Common::Point(47, 167)); @@ -783,7 +783,7 @@ void Scene125::signal() { } break; case 125: - R2_INVENTORY.setObjectScene(R2_OPTO_DISK, R2_GLOBALS._player._oldSceneNumber); + R2_INVENTORY.setObjectScene(R2_OPTO_DISK, R2_GLOBALS._player._oldCharacterScene[1]); break; case 126: R2_INVENTORY.setObjectScene(R2_OPTO_DISK, 1); @@ -884,7 +884,7 @@ void Scene125::consoleAction(int id) { _icon2.setIcon(23); break; case 6: - R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldSceneNumber); + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldCharacterScene[1]); break; case 7: if (_consoleMode == 11) @@ -947,7 +947,7 @@ void Scene125::consoleAction(int id) { break; case 13: consoleAction(2); - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != R2_GLOBALS._player._oldSceneNumber) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != R2_GLOBALS._player._oldCharacterScene[1]) { SceneItem::display2(126, 17); } else { R2_GLOBALS._player.disableControl(); @@ -1852,7 +1852,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { case 3: if (R2_GLOBALS._sceneManager._previousScene == 1500) { - R2_GLOBALS._player._fieldBC = 3150; + R2_GLOBALS._player._oldCharacterScene[3] = 3150; R2_GLOBALS._player._characterScene[3] = 3150; R2_GLOBALS._player._effect = 0; R2_GLOBALS._player.setAction(NULL); -- cgit v1.2.3 From 7c78fe0d2261b337055fff327f8542b1e87ff903 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 24 Nov 2011 08:17:37 +0100 Subject: TSAGE: R2R - Partial implementation of scene 2000 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 686 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 88 +++ 3 files changed, 776 insertions(+), 1 deletion(-) create mode 100644 engines/tsage/ringworld2/ringworld2_scenes2.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_scenes2.h (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 942d1e451f..36744c099a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -27,6 +27,7 @@ #include "tsage/ringworld2/ringworld2_logic.h" #include "tsage/ringworld2/ringworld2_dialogs.h" #include "tsage/ringworld2/ringworld2_scenes0.h" +#include "tsage/ringworld2/ringworld2_scenes2.h" namespace TsAGE { @@ -93,7 +94,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { error("Missing scene %d from group 1", sceneNumber); /* Scene group #2 */ // - case 2000: + case 2000: return new Scene2000(); case 2350: case 2400: case 2425: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp new file mode 100644 index 0000000000..1d6f620b70 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -0,0 +1,686 @@ +/* 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. + * + */ + +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/ringworld2/ringworld2_scenes2.h" + +namespace TsAGE { + +namespace Ringworld2 { + +/*-------------------------------------------------------------------------- + * Scene 2000 - + * + *--------------------------------------------------------------------------*/ +void Scene2000::Action1::signal() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: { + _actionIndex = 1; + Common::Point pt(-20, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, scene); + break; + } + case 1: + scene->_objList1[_state].setPosition(Common::Point(340, 127)); + --R2_GLOBALS._v56605[4 + _state]; + _actionIndex = 0; + switch (_state - 1) { + case 0: + if (R2_GLOBALS._v56605[4] == 1) + _actionIndex = 10; + break; + case 2: + if (R2_GLOBALS._v56605[6] == 7) + _actionIndex = 10; + break; + case 4: + if (R2_GLOBALS._v56605[8] == 14) + _actionIndex = 10; + break; + case 6: + if (R2_GLOBALS._v56605[10] == 19) + _actionIndex = 10; + break; + case 7: + if (R2_GLOBALS._v56605[11] == 23) + _actionIndex = 10; + break; + default: + break; + } + + if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) + scene->_objList1[_state].show(); + else + scene->_objList1[_state].hide(); + + signal(); + break; + case 5: { + _actionIndex = 6; + Common::Point pt(340, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + break; + } + case 6: + scene->_objList1[_state].setPosition(Common::Point(-20, 127)); + ++R2_GLOBALS._v56605[3 + _state]; + _actionIndex = 5; + switch (_state - 1) { + case 0: + if (R2_GLOBALS._v56605[4] == 5) + _actionIndex = 15; + break; + case 2: + if (R2_GLOBALS._v56605[6] == 13) + _actionIndex = 15; + break; + case 4: + if (R2_GLOBALS._v56605[8] == 16) + _actionIndex = 15; + break; + case 6: + if (R2_GLOBALS._v56605[10] == 22) + _actionIndex = 15; + break; + case 7: + if (R2_GLOBALS._v56605[11] == 27) + _actionIndex = 15; + break; + default: + break; + } + + if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) + scene->_objList1[_state].show(); + else + scene->_objList1[_state].hide(); + + signal(); + break; + case 10: { + Common::Point pt(290, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + _actionIndex = 11; + break; + } + case 11: + if (_state == 1) + scene->_objList1[0].setStrip(1); + else if (_state == 5) + scene->_objList1[4].setStrip(1); + setDelay(600); + _actionIndex = 12; + break; + case 12: + if (_state == 1) + scene->_objList1[0].setStrip(2); + else if (_state == 5) + scene->_objList1[4].setStrip(2); + scene->_objList1[_state].setStrip(1); + _actionIndex = 5; + signal(); + break; + case 15: + if ((R2_GLOBALS._v56605[3 + _state] == 13) || (R2_GLOBALS._v56605[3 + _state] == 22) || (R2_GLOBALS._v56605[3 + _state] == 27)) { + Common::Point pt(30, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + _actionIndex = 16; + } else { + Common::Point pt(120, 127); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + scene->_objList1[_state].addMover(mover, &pt, this); + _actionIndex = 16; + } + break; + case 16: + if (_state == 1) + scene->_objList1[2].setStrip(2); + else if (_state == 8) + scene->_objList1[9].setStrip(2); + setDelay(600); + _actionIndex = 17; + break; + case 17: + if (_state == 1) + scene->_objList1[2].setStrip(1); + else if (_state == 8) + scene->_objList1[9].setStrip(1); + scene->_objList1[_state].setStrip(2); + _actionIndex = 0; + break; + case 99: + error("99"); + break; + default: + break; + } +} + +void Scene2000::Exit1::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 10; + + warning("TODO: Check sub_22D26"); + Common::Point pt(-10, 129); + NpcMover *mover = new NpcMover(); + BF_GLOBALS._player.addMover(mover, &pt, scene); + + scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); +} + +void Scene2000::Exit2::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 11; + + warning("TODO: Check sub_22D26"); + Common::Point pt(330, 129); + NpcMover *mover = new NpcMover(); + BF_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2000::Exit3::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 12; + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 2: + scene->_field414 = 4; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 8; + break; + case 11: + scene->_field414 = 6; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 17; + break; + case 15: + scene->_field414 = 8; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 24; + break; + case 20: + scene->_field414 = 4; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 30; + break; + case 26: + scene->_field414 = 6; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 32; + break; + case 29: + scene->_field414 = 11; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 29; + break; + default: + break; + } + + switch (scene->_field414) { + case 4: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2003, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2023, &R2_GLOBALS._player, NULL); + break; + case 6: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2007, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2027, &R2_GLOBALS._player, NULL); + break; + case 8: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2011, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2031, &R2_GLOBALS._player, NULL); + break; + case 11: + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 2039; + else + scene->_sceneMode = 2041; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + break; + + default: + break; + } +} +void Scene2000::Exit4::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_field412 = 1; + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 13; + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 8: + scene->_field414 = 5; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 2; + break; + case 17: + scene->_field414 = 7; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 11; + break; + case 24: + scene->_field414 = 9; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 15; + break; + case 30: + scene->_field414 = 5; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 20; + break; + case 32: + scene->_field414 = 7; + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 26; + break; + default: + break; + } + + switch (scene->_field414) { + case 5: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2006, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2026, &R2_GLOBALS._player, NULL); + break; + case 7: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2010, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2030, &R2_GLOBALS._player, NULL); + break; + case 9: + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2014, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2034, &R2_GLOBALS._player, NULL); + break; + default: + break; + } +} + +void Scene2000::Exit5::changeScene() { + Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + + scene->_sceneMode = 0; + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + scene->_sceneMode = 14; + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 3: + scene->_field414 = 1; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 4: + scene->_field414 = 7; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + case 10: + scene->_field414 = 8; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 12: + scene->_field414 = 3; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + case 16: + scene->_field414 = 4; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 21: + scene->_field414 = 5; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); + break; + case 25: + scene->_field414 = 2; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + case 34: + scene->_field414 = 6; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); + break; + default: + break; + } +} + +void Scene2000::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(2000); + + if (R2_GLOBALS._sceneManager._previousScene != -1) { + R2_GLOBALS._v56605[1] = 21; + R2_GLOBALS._v56605[2] = 21; + } + if ((R2_GLOBALS._player._characterScene[R2_GLOBALS._player._characterIndex] != R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) && (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 2350)) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 0; + } + _field412 = 0; + + _exit1.setDetails(Rect(0, 100, 14, 140), CURSOR_9, 2000); + _exit1.setDest(Common::Point(14, 129)); + _exit2.setDetails(Rect(305, 100, 320, 140), CURSOR_10, 2000); + _exit2.setDest(Common::Point(315, 129)); + _exit3.setDetails(Rect(71, 130, 154, 168), CURSOR_8, 2000); + _exit3.setDest(Common::Point(94, 129)); + _exit4.setDetails(Rect(138, 83, 211, 125), CURSOR_7, 2000); + _exit4.setDest(Common::Point(188, 128)); + _exit5.setDetails(Rect(61, 68, 90, 125), CURSOR_9, 2000); + _exit5.setDest(Common::Point(92, 129)); + + R2_GLOBALS._sound1.play(200); + warning("STUB: sub_D2676"); + g_globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(2008, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setup(20, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + + _action1._state = 8; + _action2._state = 1; + _action3._state = 5; + _action4._state = 7; + _action5._state = 3; + + for (int i = 0; i < 11; i++) + _objList1[i].postInit(); + + _objList1[0].setVisage(2000); + _objList1[0].setStrip(2); + _objList1[0].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[1].setVisage(2001); + _objList1[1].setStrip(2); + _objList1[1].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[2].setVisage(2003); + _objList1[2].setStrip(1); + _objList1[2].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[3].setVisage(2007); + _objList1[3].setStrip(2); + _objList1[3].setDetails(2001, 12, -1, -1, 1, NULL); + + _objList1[4].setVisage(2004); + _objList1[4].setStrip(2); + _objList1[4].setDetails(2001, 19, -1, -1, 1, NULL); + + _objList1[5].setVisage(2003); + _objList1[5].setStrip(2); + _objList1[5].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[6].setVisage(2000); + _objList1[6].setStrip(1); + _objList1[6].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[7].setVisage(2000); + _objList1[7].setStrip(2); + _objList1[7].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[8].setVisage(2000); + _objList1[8].setStrip(2); + _objList1[8].setDetails(2001, 0, -1, -1, 1, NULL); + + _objList1[9].setVisage(2006); + _objList1[9].setStrip(1); + _objList1[9].setDetails(2001, 6, -1, -1, 1, NULL); + + _objList1[10].setVisage(2007); + _objList1[10].setStrip(1); + _objList1[10].setDetails(2001, 12, -1, -1, 1, NULL); + + for (int i = 0; i < 11; i++) { + _objList1[i].animate(ANIM_MODE_1, NULL); + _objList1[i]._moveDiff.x = 3; + _objList1[i]._moveRate = 8; + _objList1[i].hide(); + switch (i - 1) { + case 0: + if (R2_GLOBALS._v56605[3 + i] == 1) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 5) + --R2_GLOBALS._v56605[3 + i]; + break; + case 2: + if (R2_GLOBALS._v56605[3 + i] == 7) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 13) + --R2_GLOBALS._v56605[3 + i]; + break; + case 4: + if (R2_GLOBALS._v56605[3 + i] == 14) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 16) + --R2_GLOBALS._v56605[3 + i]; + break; + case 6: + if (R2_GLOBALS._v56605[3 + i] == 19) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 22) + --R2_GLOBALS._v56605[3 + i]; + break; + case 8: + if (R2_GLOBALS._v56605[3 + i] == 23) + ++R2_GLOBALS._v56605[3 + i]; + else if (R2_GLOBALS._v56605[3 + i] == 27) + --R2_GLOBALS._v56605[3 + i]; + break; + default: + break; + } + switch (R2_GLOBALS._v56605[3 + i] - 1) { + case 0: + case 6: + case 13: + case 18: + case 22: + case 27: + case 30: + _objList1[i].setPosition(Common::Point(265, 127)); + break; + case 5: + case 12: + case 17: + case 21: + case 26: + _objList1[i].setPosition(Common::Point(55, 127)); + break; + default: + _objList1[i].setPosition(Common::Point(160, 127)); + break; + } + } + _objList1[1].setAction(&_action2); + _objList1[3].setAction(&_action5); + _objList1[5].setAction(&_action4); + _objList1[8].setAction(&_action1); + + warning("STUB: sub_D2FBA"); + + _item1.setDetails(Rect(0, 0, 320, 200), 2000, 0, -1, 23, 1, NULL); +} + +void Scene2000::remove() { + R2_GLOBALS._sound1.fadeOut(NULL); + SceneExt::remove(); +} + +void Scene2000::signal() { + switch (_sceneMode) { + case 10: + if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 6) + g_globals->_sceneManager.changeScene(1900); + else { + _field414 = 1; + --R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; + warning("STUB: sub_D2676"); + warning("STUB: sub_D2FBA"); + } + break; + case 11: + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 5: + g_globals->_sceneManager.changeScene(1900); + break; + case 30: + g_globals->_sceneManager.changeScene(2500); + break; + case 34: + g_globals->_sceneManager.changeScene(2350); + break; + default: + _field414 = 2; + ++R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; + warning("STUB: sub_D2676"); + warning("STUB: sub_D2FBA"); + break; + } + break; + case 12: + case 13: + warning("STUB: sub_D2676"); + warning("STUB: sub_D2FBA"); + break; + case 14: + switch (_field414 - 1) { + case 0: + g_globals->_sceneManager.changeScene(2450); + break; + case 1: + g_globals->_sceneManager.changeScene(2440); + break; + case 2: + g_globals->_sceneManager.changeScene(2435); + break; + case 3: + g_globals->_sceneManager.changeScene(2430); + break; + case 4: + g_globals->_sceneManager.changeScene(2425); + break; + case 5: + g_globals->_sceneManager.changeScene(2525); + break; + case 6: + g_globals->_sceneManager.changeScene(2530); + break; + case 7: + g_globals->_sceneManager.changeScene(2535); + break; + default: + break; + } + break; + case 2039: + case 2041: + g_globals->_sceneManager.changeScene(2350); + break; + default: + break; + } +} + +void Scene2000::process(Event &event) { + if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_3)) { + warning("TODO: Check sub_22D26"); + + Common::Point pt(event.mousePos.x, 129); + PlayerMover *mover = new PlayerMover(); + BF_GLOBALS._player.addMover(mover, &pt, this); + + event.handled = true; + } + Scene::process(event); +} + +void Scene2000::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); +} + + +} // End of namespace Ringworld2 +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h new file mode 100644 index 0000000000..6f57db5943 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -0,0 +1,88 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD2_SCENES2_H +#define TSAGE_RINGWORLD2_SCENES2_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" +#include "tsage/ringworld2/ringworld2_logic.h" + +namespace TsAGE { + +namespace Ringworld2 { + +using namespace TsAGE; + +class Scene2000: public SceneExt { + class Action1 : public ActionExt { + public: + virtual void signal(); + }; + + class Exit1 : public SceneExit { + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + virtual void changeScene(); + }; + class Exit3 : public SceneExit { + virtual void changeScene(); + }; + class Exit4 : public SceneExit { + virtual void changeScene(); + }; + class Exit5 : public SceneExit { + virtual void changeScene(); + }; +public: + int _field412; + int _field414; + + NamedHotspot _item1; + SceneActor _object1; + SceneActor _objList1[11]; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + Exit4 _exit4; + Exit5 _exit5; + Action1 _action1, _action2, _action3, _action4, _action5; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void synchronize(Serializer &s); +}; + + +} // End of namespace Ringworld2 +} // End of namespace TsAGE + +#endif -- cgit v1.2.3 From 026b13af109893871bdb7aae33df675818bef4a3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 26 Nov 2011 15:48:58 +0100 Subject: TSAGE: R2R - Implement initExits in scene 2000 --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 241 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes2.h | 2 + 2 files changed, 239 insertions(+), 4 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 1d6f620b70..19e683f546 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -33,6 +33,239 @@ namespace Ringworld2 { * Scene 2000 - * *--------------------------------------------------------------------------*/ +void Scene2000::initExits() { + + _exit1._enabled = true; + _exit2._enabled = true; + _exit3._enabled = false; + _exit4._enabled = false; + _exit5._enabled = false; + + _exit1._insideArea = false; + _exit2._insideArea = false; + _exit3._insideArea = false; + _exit4._insideArea = false; + _exit5._insideArea = false; + + _exit1._moving = false; + _exit2._moving = false; + _exit3._moving = false; + _exit4._moving = false; + _exit5._moving = false; + + for (int i = 0; i < 11; i++) { + _objList1[i].hide(); + } + + _object1.remove(); + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + case 3: + case 10: + case 16: + case 21: + _exit5._enabled = true; + _exit5._bounds.set(61, 68, 90, 125); + _exit5.setDest(Common::Point(92, 129)); + _exit5._cursorNum = CURSOR_9; + break; + case 4: + case 12: + case 25: + case 34: + _exit5._enabled = true; + _exit5._bounds.set(230, 68, 259, 125); + _exit5.setDest(Common::Point(244, 129)); + _exit5._cursorNum = CURSOR_10; + break; + default: + break; + } + + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] - 1) { + case 0: + case 6: + case 13: + case 18: + case 22: + case 27: + case 30: + _exit1._enabled = false; + loadScene(2225); + R2_GLOBALS._walkRegions.load(2225); + if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + break; + case 1: + case 19: + _exit3._enabled = true; + _exit3._bounds.set(71, 130, 154, 168); + _exit3.setDest(Common::Point(94, 129)); + _exit3._cursorNum = CURSOR_14; + loadScene(2300); + if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._walkRegions.load(2000); + break; + case 2: + case 9: + case 15: + case 20: + loadScene(2150); + R2_GLOBALS._walkRegions.load(2000); + switch(R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) { + case 2400: + _field414 = 1; + break; + case 2425: + case 2430: + case 2435: + case 2450: + _field414 = 3; + break; + default: + if (_field412 == 0) + _field414 = 0; + break; + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._sceneManager._previousScene = 2000; + break; + case 3: + case 11: + case 24: + case 33: + loadScene(2175); + R2_GLOBALS._walkRegions.load(2000); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + if (_field412 == 0) + _field414 = 0; + } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) + _field414 = 1; + else + _field414 = 10; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._sceneManager._previousScene = 2000; + break; + case 4: + case 8: + loadScene(2000); + R2_GLOBALS._walkRegions.load(2000); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1900) + _field414 = 1; + else if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._sceneManager._previousScene = 2000; + break; + case 5: + case 12: + case 17: + case 21: + case 26: + loadScene(2200); + R2_GLOBALS._walkRegions.load(2000); + _exit2._enabled = false; + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1900) + _field414 = 2; + else if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._sceneManager._previousScene = 2000; + break; + case 7: + case 29: + _exit4._enabled = true; + _exit4._bounds.set(138, 83, 211, 125); + _exit4.setDest(Common::Point(129, 188)); + _exit4._cursorNum = CURSOR_16; + loadScene(2250); + R2_GLOBALS._walkRegions.load(2000); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2500) + _field414 = 1; + else if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._sceneManager._previousScene = 2000; + break; + case 10: + case 25: + _exit3._enabled = true; + _exit3._bounds.set(78, 130, 148, 168); + _exit3.setDest(Common::Point(100, 129)); + _exit3._cursorNum = CURSOR_14; + loadScene(2075); + R2_GLOBALS._walkRegions.load(2000); + if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + break; + case 14: + _exit3._enabled = true; + _exit3._bounds.set(160, 130, 248, 168); + _exit3.setDest(Common::Point(225, 129)); + _exit3._cursorNum = CURSOR_15; + loadScene(2325); + R2_GLOBALS._walkRegions.load(2000); + if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + break; + case 16: + case 31: + _exit4._enabled = true; + _exit4._bounds.set(122, 83, 207, 125); + _exit4.setDest(Common::Point(210, 129)); + _exit4._cursorNum = CURSOR_16; + loadScene(2125); + R2_GLOBALS._walkRegions.load(2000); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2400) + _field414 = 2; + else if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + R2_GLOBALS._sceneManager._previousScene = 2000; + break; + case 23: + _exit4._enabled = true; + _exit4._bounds.set(108, 83, 128, 184); + _exit4.setDest(Common::Point(135, 129)); + _exit4._cursorNum = CURSOR_13; + loadScene(2275); + R2_GLOBALS._walkRegions.load(2000); + if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + break; + case 28: + _exit3._enabled = true; + _exit3._bounds.set(171, 130, 241, 168); + _exit3.setDest(Common::Point(218, 129)); + _exit3._cursorNum = CURSOR_15; + loadScene(2050); + R2_GLOBALS._walkRegions.load(2000); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) + _field414 = 11; + else if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + break; + case 32: + loadScene(2025); + R2_GLOBALS._walkRegions.load(2000); + if (_field412 == 0) + _field414 = 0; + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; + break; + default: + break; + } + _field412 = 0; + R2_GLOBALS._uiElements.show(); +} + void Scene2000::Action1::signal() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; @@ -443,7 +676,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { _exit5.setDest(Common::Point(92, 129)); R2_GLOBALS._sound1.play(200); - warning("STUB: sub_D2676"); + initExits(); g_globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE; R2_GLOBALS._player.postInit(); @@ -594,7 +827,7 @@ void Scene2000::signal() { else { _field414 = 1; --R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; - warning("STUB: sub_D2676"); + initExits(); warning("STUB: sub_D2FBA"); } break; @@ -612,14 +845,14 @@ void Scene2000::signal() { default: _field414 = 2; ++R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; - warning("STUB: sub_D2676"); + initExits(); warning("STUB: sub_D2FBA"); break; } break; case 12: case 13: - warning("STUB: sub_D2676"); + initExits(); warning("STUB: sub_D2FBA"); break; case 14: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 6f57db5943..53237dccba 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -79,6 +79,8 @@ public: virtual void signal(); virtual void process(Event &event); virtual void synchronize(Serializer &s); + + void initExits(); }; -- cgit v1.2.3 From 50c44aacf41cc0bb21f98b55afa659a3878233ae Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 26 Nov 2011 16:53:06 +0100 Subject: TSAGE: R2R - Implement initPlayer in scene 2000 --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 133 ++++++++++++++++++++++-- engines/tsage/ringworld2/ringworld2_scenes2.h | 1 + 2 files changed, 127 insertions(+), 7 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 19e683f546..a2cb81a9d8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -33,8 +33,128 @@ namespace Ringworld2 { * Scene 2000 - * *--------------------------------------------------------------------------*/ -void Scene2000::initExits() { +void Scene2000::initPlayer() { + R2_GLOBALS._player.disableControl(); + warning("DisableControl, with argements?"); + + switch (_field414) { + case 0: + R2_GLOBALS._player.setStrip(5); + if (_exit1._enabled) { + if (_exit2._enabled) + R2_GLOBALS._player.setPosition(Common::Point(140, 129)); + else + R2_GLOBALS._player.setPosition(Common::Point(20, 129)); + } else + R2_GLOBALS._player.setPosition(Common::Point(245, 129)); + R2_GLOBALS._player.enableControl(); + warning("EnableControl, with 2 arguments?"); + break; + case 1: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2001; + else + _sceneMode = 2021; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 2: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2002; + else + _sceneMode = 2022; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 3: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2000; + else + _sceneMode = 2020; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 4: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2005; + else + _sceneMode = 2025; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 5: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2004; + else + _sceneMode = 2024; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 6: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2009; + else + _sceneMode = 2029; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 7: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2008; + else + _sceneMode = 2028; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 8: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2013; + else + _sceneMode = 2033; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 9: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2012; + else + _sceneMode = 2032; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 10: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2016; + else + _sceneMode = 2036; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + case 11: + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2038; + else + _sceneMode = 2040; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + for (int i = 0; i < 11; i++) { + if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == R2_GLOBALS._v56605[3 + i]) + _objList1[i].show(); + } + + if ((R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) && (R2_GLOBALS._v56605[1] == R2_GLOBALS._v56605[2])) { + _object1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _object1.setup(20, 5, 1); + _object1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _object1.setup(2008, 5, 1); + _object1.setDetails(9001, 0, 5, 3, 1, NULL); + } + if (_exit1._enabled) { + if (_exit2._enabled) + _object1.setPosition(Common::Point(180, 128)); + else + _object1.setPosition(Common::Point(75, 128)); + } else + _object1.setPosition(Common::Point(300, 128)); + } +} +void Scene2000::initExits() { _exit1._enabled = true; _exit2._enabled = true; _exit3._enabled = false; @@ -53,9 +173,8 @@ void Scene2000::initExits() { _exit4._moving = false; _exit5._moving = false; - for (int i = 0; i < 11; i++) { + for (int i = 0; i < 11; i++) _objList1[i].hide(); - } _object1.remove(); @@ -809,7 +928,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { _objList1[5].setAction(&_action4); _objList1[8].setAction(&_action1); - warning("STUB: sub_D2FBA"); + initPlayer(); _item1.setDetails(Rect(0, 0, 320, 200), 2000, 0, -1, 23, 1, NULL); } @@ -828,7 +947,7 @@ void Scene2000::signal() { _field414 = 1; --R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; initExits(); - warning("STUB: sub_D2FBA"); + initPlayer(); } break; case 11: @@ -846,14 +965,14 @@ void Scene2000::signal() { _field414 = 2; ++R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; initExits(); - warning("STUB: sub_D2FBA"); + initPlayer(); break; } break; case 12: case 13: initExits(); - warning("STUB: sub_D2FBA"); + initPlayer(); break; case 14: switch (_field414 - 1) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 53237dccba..57565f8f32 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -81,6 +81,7 @@ public: virtual void synchronize(Serializer &s); void initExits(); + void initPlayer(); }; -- cgit v1.2.3 From 3739e69e48384feb3c46a43b8c230eb21209883f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 26 Nov 2011 19:26:51 +0100 Subject: TSAGE: R2R - Maze (2000): Rename two variables, add debug traces --- engines/tsage/ringworld2/ringworld2_logic.cpp | 4 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 158 +++++++++++++----------- engines/tsage/ringworld2/ringworld2_scenes2.h | 4 +- 3 files changed, 88 insertions(+), 78 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 36744c099a..d23ecd5ed1 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -94,7 +94,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { error("Missing scene %d from group 1", sceneNumber); /* Scene group #2 */ // - case 2000: return new Scene2000(); + case 2000: + // Maze + return new Scene2000(); case 2350: case 2400: case 2425: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index a2cb81a9d8..e1246c9c91 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -30,14 +30,15 @@ namespace TsAGE { namespace Ringworld2 { /*-------------------------------------------------------------------------- - * Scene 2000 - + * Scene 2000 - Maze * *--------------------------------------------------------------------------*/ void Scene2000::initPlayer() { R2_GLOBALS._player.disableControl(); - warning("DisableControl, with argements?"); + warning("DisableControl, with arguments?"); - switch (_field414) { + warning("initPlayer: %d", _mazePlayerMode); + switch (_mazePlayerMode) { case 0: R2_GLOBALS._player.setStrip(5); if (_exit1._enabled) { @@ -178,6 +179,8 @@ void Scene2000::initExits() { _object1.remove(); + warning("initExits: %d", R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]); + switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { case 3: case 10: @@ -212,8 +215,8 @@ void Scene2000::initExits() { _exit1._enabled = false; loadScene(2225); R2_GLOBALS._walkRegions.load(2225); - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 1: @@ -223,8 +226,8 @@ void Scene2000::initExits() { _exit3.setDest(Common::Point(94, 129)); _exit3._cursorNum = CURSOR_14; loadScene(2300); - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._walkRegions.load(2000); break; @@ -236,17 +239,17 @@ void Scene2000::initExits() { R2_GLOBALS._walkRegions.load(2000); switch(R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) { case 2400: - _field414 = 1; + _mazePlayerMode = 1; break; case 2425: case 2430: case 2435: case 2450: - _field414 = 3; + _mazePlayerMode = 3; break; default: - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; break; } R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; @@ -259,12 +262,12 @@ void Scene2000::initExits() { loadScene(2175); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) - _field414 = 1; + _mazePlayerMode = 1; else - _field414 = 10; + _mazePlayerMode = 10; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._sceneManager._previousScene = 2000; break; @@ -273,9 +276,9 @@ void Scene2000::initExits() { loadScene(2000); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1900) - _field414 = 1; - else if (_field412 == 0) - _field414 = 0; + _mazePlayerMode = 1; + else if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._sceneManager._previousScene = 2000; break; @@ -288,9 +291,9 @@ void Scene2000::initExits() { R2_GLOBALS._walkRegions.load(2000); _exit2._enabled = false; if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1900) - _field414 = 2; - else if (_field412 == 0) - _field414 = 0; + _mazePlayerMode = 2; + else if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._sceneManager._previousScene = 2000; break; @@ -303,9 +306,9 @@ void Scene2000::initExits() { loadScene(2250); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2500) - _field414 = 1; - else if (_field412 == 0) - _field414 = 0; + _mazePlayerMode = 1; + else if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._sceneManager._previousScene = 2000; break; @@ -317,8 +320,8 @@ void Scene2000::initExits() { _exit3._cursorNum = CURSOR_14; loadScene(2075); R2_GLOBALS._walkRegions.load(2000); - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 14: @@ -328,8 +331,8 @@ void Scene2000::initExits() { _exit3._cursorNum = CURSOR_15; loadScene(2325); R2_GLOBALS._walkRegions.load(2000); - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 16: @@ -341,9 +344,9 @@ void Scene2000::initExits() { loadScene(2125); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2400) - _field414 = 2; - else if (_field412 == 0) - _field414 = 0; + _mazePlayerMode = 2; + else if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._sceneManager._previousScene = 2000; break; @@ -354,8 +357,8 @@ void Scene2000::initExits() { _exit4._cursorNum = CURSOR_13; loadScene(2275); R2_GLOBALS._walkRegions.load(2000); - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 28: @@ -366,22 +369,22 @@ void Scene2000::initExits() { loadScene(2050); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) - _field414 = 11; - else if (_field412 == 0) - _field414 = 0; + _mazePlayerMode = 11; + else if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 32: loadScene(2025); R2_GLOBALS._walkRegions.load(2000); - if (_field412 == 0) - _field414 = 0; + if (!_exitingFlag) + _mazePlayerMode = 0; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; default: break; } - _field412 = 0; + _exitingFlag = false; R2_GLOBALS._uiElements.show(); } @@ -543,11 +546,12 @@ void Scene2000::Action1::signal() { void Scene2000::Exit1::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + warning("exit1"); - scene->_field412 = 1; + scene->_exitingFlag = true; scene->_sceneMode = 0; R2_GLOBALS._player.disableControl(); - warning("DisableControl, with argements?"); + warning("DisableControl, with arguments?"); scene->_sceneMode = 10; warning("TODO: Check sub_22D26"); @@ -560,11 +564,12 @@ void Scene2000::Exit1::changeScene() { void Scene2000::Exit2::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + warning("exit2"); - scene->_field412 = 1; + scene->_exitingFlag = true; scene->_sceneMode = 0; R2_GLOBALS._player.disableControl(); - warning("DisableControl, with argements?"); + warning("DisableControl, with arguments?"); scene->_sceneMode = 11; warning("TODO: Check sub_22D26"); @@ -575,43 +580,44 @@ void Scene2000::Exit2::changeScene() { void Scene2000::Exit3::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + warning("exit13"); - scene->_field412 = 1; + scene->_exitingFlag = true; scene->_sceneMode = 0; R2_GLOBALS._player.disableControl(); - warning("DisableControl, with argements?"); + warning("DisableControl, with arguments?"); scene->_sceneMode = 12; switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { case 2: - scene->_field414 = 4; + scene->_mazePlayerMode = 4; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 8; break; case 11: - scene->_field414 = 6; + scene->_mazePlayerMode = 6; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 17; break; case 15: - scene->_field414 = 8; + scene->_mazePlayerMode = 8; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 24; break; case 20: - scene->_field414 = 4; + scene->_mazePlayerMode = 4; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 30; break; case 26: - scene->_field414 = 6; + scene->_mazePlayerMode = 6; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 32; break; case 29: - scene->_field414 = 11; + scene->_mazePlayerMode = 11; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 29; break; default: break; } - switch (scene->_field414) { + switch (scene->_mazePlayerMode) { case 4: if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2003, &R2_GLOBALS._player, NULL); @@ -644,39 +650,40 @@ void Scene2000::Exit3::changeScene() { } void Scene2000::Exit4::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + warning("exit4"); - scene->_field412 = 1; + scene->_exitingFlag = true; scene->_sceneMode = 0; R2_GLOBALS._player.disableControl(); - warning("DisableControl, with argements?"); + warning("DisableControl, with arguments?"); scene->_sceneMode = 13; switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { case 8: - scene->_field414 = 5; + scene->_mazePlayerMode = 5; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 2; break; case 17: - scene->_field414 = 7; + scene->_mazePlayerMode = 7; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 11; break; case 24: - scene->_field414 = 9; + scene->_mazePlayerMode = 9; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 15; break; case 30: - scene->_field414 = 5; + scene->_mazePlayerMode = 5; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 20; break; case 32: - scene->_field414 = 7; + scene->_mazePlayerMode = 7; R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 26; break; default: break; } - switch (scene->_field414) { + switch (scene->_mazePlayerMode) { case 5: if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2006, &R2_GLOBALS._player, NULL); @@ -702,64 +709,65 @@ void Scene2000::Exit4::changeScene() { void Scene2000::Exit5::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; + warning("exit5"); scene->_sceneMode = 0; R2_GLOBALS._player.disableControl(); - warning("DisableControl, with argements?"); + warning("DisableControl, with arguments?"); scene->_sceneMode = 14; switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { case 3: - scene->_field414 = 1; + scene->_mazePlayerMode = 1; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); break; case 4: - scene->_field414 = 7; + scene->_mazePlayerMode = 7; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); break; case 10: - scene->_field414 = 8; + scene->_mazePlayerMode = 8; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); break; case 12: - scene->_field414 = 3; + scene->_mazePlayerMode = 3; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); break; case 16: - scene->_field414 = 4; + scene->_mazePlayerMode = 4; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); break; case 21: - scene->_field414 = 5; + scene->_mazePlayerMode = 5; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2015, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2035, &R2_GLOBALS._player, NULL); break; case 25: - scene->_field414 = 2; + scene->_mazePlayerMode = 2; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); else scene->setAction(&scene->_sequenceManager, scene, 2037, &R2_GLOBALS._player, NULL); break; case 34: - scene->_field414 = 6; + scene->_mazePlayerMode = 6; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2017, &R2_GLOBALS._player, NULL); else @@ -781,7 +789,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { if ((R2_GLOBALS._player._characterScene[R2_GLOBALS._player._characterIndex] != R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) && (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 2350)) { R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 0; } - _field412 = 0; + _exitingFlag = false; _exit1.setDetails(Rect(0, 100, 14, 140), CURSOR_9, 2000); _exit1.setDest(Common::Point(14, 129)); @@ -944,7 +952,7 @@ void Scene2000::signal() { if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 6) g_globals->_sceneManager.changeScene(1900); else { - _field414 = 1; + _mazePlayerMode = 1; --R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; initExits(); initPlayer(); @@ -962,7 +970,7 @@ void Scene2000::signal() { g_globals->_sceneManager.changeScene(2350); break; default: - _field414 = 2; + _mazePlayerMode = 2; ++R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; initExits(); initPlayer(); @@ -975,7 +983,7 @@ void Scene2000::signal() { initPlayer(); break; case 14: - switch (_field414 - 1) { + switch (_mazePlayerMode - 1) { case 0: g_globals->_sceneManager.changeScene(2450); break; @@ -1029,8 +1037,8 @@ void Scene2000::process(Event &event) { void Scene2000::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); - s.syncAsSint16LE(_field414); + s.syncAsByte(_exitingFlag); + s.syncAsSint16LE(_mazePlayerMode); } diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 57565f8f32..3a5c439130 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -60,8 +60,8 @@ class Scene2000: public SceneExt { virtual void changeScene(); }; public: - int _field412; - int _field414; + bool _exitingFlag; + int _mazePlayerMode; NamedHotspot _item1; SceneActor _object1; -- cgit v1.2.3 From c13668ca7eb5214b6ef2ae58a99cb7c3a59a4615 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 27 Nov 2011 22:08:24 +0100 Subject: TSAGE: R2R - Scene 2350: Add Speakers --- engines/tsage/ringworld2/ringworld2_speakers.cpp | 27 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 15 ++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 3c9a84c123..2875652641 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -455,6 +455,33 @@ void SpeakerSoldier300::proc15() { _object1.animate(ANIM_MODE_5, this); } } + +/*--------------------------------------------------------------------------*/ + +SpeakerQuinn2350::SpeakerQuinn2350(): VisualSpeaker() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +SpeakerPharisha2350::SpeakerPharisha2350(): VisualSpeaker() { + _speakerName = "PHARISHA"; + _color1 = 151; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 97972549fa..0d297c41ac 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -115,8 +115,21 @@ public: virtual void proc15(); }; -} // End of namespace Ringworld2 +class SpeakerQuinn2350: public VisualSpeaker { +public: + SpeakerQuinn2350(); + virtual Common::String getClassName() { return "SpeakerQuinn2350"; } +}; + +class SpeakerPharisha2350: public VisualSpeaker { +public: + SpeakerPharisha2350(); + + virtual Common::String getClassName() { return "SpeakerPharisha2350"; } +}; + +} // End of namespace Ringworld2 } // End of namespace TsAGE #endif -- cgit v1.2.3 From e3758f5a5a224c6399eb359fa3331591a2033158 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 28 Nov 2011 21:27:43 +1100 Subject: TSAGE: Fixed array subscript in dialog button loop --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index ade76d501a..997f8ccd6d 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -96,7 +96,7 @@ bool RightClickDialog::process(Event &event) { case EVENT_MOUSE_MOVE: { // Check whether a button is highlighted int buttonIndex; - for (buttonIndex = 6; buttonIndex >= 0; --buttonIndex) { + for (buttonIndex = 5; buttonIndex >= 0; --buttonIndex) { Rect tempRect(0, 0, 28, 29); tempRect.moveTo(_btnList[buttonIndex].x, _btnList[buttonIndex].y); -- cgit v1.2.3 From 400ad3df0512df26f922b8587b92513cb0c2f976 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 28 Nov 2011 18:56:20 +0100 Subject: TSAGE: R2R - Cleanup: Add missing blanks in class definition (thanks LordHoto for point that out) --- engines/tsage/ringworld2/ringworld2_speakers.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 0d297c41ac..5793f4377e 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -37,7 +37,7 @@ namespace Ringworld2 { using namespace TsAGE; -class VisualSpeaker: public Speaker { +class VisualSpeaker : public Speaker { public: SceneActor _object1; SceneObject *_object2; @@ -61,7 +61,7 @@ public: virtual void proc16(); }; -class SpeakerMiranda300: public VisualSpeaker { +class SpeakerMiranda300 : public VisualSpeaker { public: SpeakerMiranda300(); @@ -69,7 +69,7 @@ public: virtual void proc15(); }; -class SpeakerSeeker300: public VisualSpeaker { +class SpeakerSeeker300 : public VisualSpeaker { public: SpeakerSeeker300(); @@ -77,21 +77,21 @@ public: virtual void proc15(); }; -class SpeakerSeekerL: public VisualSpeaker { +class SpeakerSeekerL : public VisualSpeaker { public: SpeakerSeekerL(); virtual Common::String getClassName() { return "SpeakerSeekerL"; } }; -class SpeakerQuinnL: public VisualSpeaker { +class SpeakerQuinnL : public VisualSpeaker { public: SpeakerQuinnL(); virtual Common::String getClassName() { return "SpeakerQuinnL"; } }; -class SpeakerQuinn300: public VisualSpeaker { +class SpeakerQuinn300 : public VisualSpeaker { public: SpeakerQuinn300(); @@ -99,7 +99,7 @@ public: virtual void proc15(); }; -class SpeakerTeal300: public VisualSpeaker { +class SpeakerTeal300 : public VisualSpeaker { public: SpeakerTeal300(); @@ -107,7 +107,7 @@ public: virtual void proc15(); }; -class SpeakerSoldier300: public VisualSpeaker { +class SpeakerSoldier300 : public VisualSpeaker { public: SpeakerSoldier300(); @@ -115,14 +115,14 @@ public: virtual void proc15(); }; -class SpeakerQuinn2350: public VisualSpeaker { +class SpeakerQuinn2350 : public VisualSpeaker { public: SpeakerQuinn2350(); virtual Common::String getClassName() { return "SpeakerQuinn2350"; } }; -class SpeakerPharisha2350: public VisualSpeaker { +class SpeakerPharisha2350 : public VisualSpeaker { public: SpeakerPharisha2350(); -- cgit v1.2.3 From 34b24e50e091cbc1d1d9f796c1b8bae90589d0d5 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 28 Nov 2011 23:04:05 +0100 Subject: TSAGE: R2R - Balloon Launch Platform: First implementation --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 177 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 41 +++++- 3 files changed, 219 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d23ecd5ed1..e9e205bda2 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -98,6 +98,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze return new Scene2000(); case 2350: + // Balloon Launch Platform + return new Scene2350(); case 2400: case 2425: case 2430: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index e1246c9c91..089b615bf6 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1041,6 +1041,183 @@ void Scene2000::synchronize(Serializer &s) { s.syncAsSint16LE(_mazePlayerMode); } +/*-------------------------------------------------------------------------- + * Scene 2350 - Balloon Launch Platform + * + *--------------------------------------------------------------------------*/ +bool Scene2350::Actor2::startAction(CursorType action, Event &event) { + if (action != R2_6) + return(SceneActor::startAction(action, event)); + return true; +} + +bool Scene2350::Actor3::startAction(CursorType action, Event &event) { + Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; + + if ((action == R2_20) && (R2_GLOBALS.getFlag(74))) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + scene->_sceneMode = 2355; + scene->setAction(&scene->_sequenceManager, scene, 2355, &R2_GLOBALS._player, &scene->_actor1, NULL); + return true; + } + + return(SceneActor::startAction(action, event)); +} + +void Scene2350::ExitUp::changeScene() { + Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 12; + if (R2_GLOBALS._player._characterIndex == 1) + scene->setAction(&scene->_sequenceManager, scene, 2350, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 2352, &R2_GLOBALS._player, NULL); +} + +void Scene2350::ExitWest::changeScene() { + Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(-10, 129); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + +} + +void Scene2350::postInit(SceneObjectList *OwnerList) { + loadScene(2350); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(200); + _stripManager.addSpeaker(&_pharishaSpeaker); + _stripManager.addSpeaker(&_quinnSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._player._characterScene[2] = 2350; + + _exitUp.setDetails(Rect(25, 83, 93, 125), CURSOR_16, 2350); + _exitUp.setDest(Common::Point(80, 129)); + _exitWest.setDetails(Rect(0, 100, 14, 140), CURSOR_9, 2350); + _exitWest.setDest(Common::Point(14, 129)); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(2008, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setup(20, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor2.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor2.setup(20, 5, 1); + _actor2.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor2.setup(2008, 5, 1); + _actor2.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor2.setPosition(Common::Point(135, 128)); + } + _actor3.postInit(); + _actor4.postInit(); + + if (R2_INVENTORY.getObjectScene(20) == 2350) { + _actor3.hide(); + _actor4.hide(); + } else { + _actor3.setup(2350, 0, 1); + _actor3.setPosition(Common::Point(197, 101)); + _actor3.setDetails(2000, 12, -1, -1, 1, NULL); + _actor3.fixPriority(10); + _actor4.setup(2350, 1, 2); + _actor4.setPosition(Common::Point(199, 129)); + _actor4.setDetails(2000, 12, -1, -1, 1, NULL); + _actor4.fixPriority(10); + } + _item1.setDetails(Rect(0, 0, 320, 200), 2000, 9, -1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 34) { + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 2351; + else + _sceneMode = 2353; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + } else { + _sceneMode = 10; + R2_GLOBALS._player.setPosition(Common::Point(-20, 129)); + Common::Point pt(20, 129); + warning("TODO: Check sub_22D26"); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + + } + } else { + R2_GLOBALS._player.setPosition(Common::Point(100, 129)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2350; +} + +void Scene2350::remove() { + R2_GLOBALS._sound1.fadeOut(NULL); + SceneExt::remove(); +} + +void Scene2350::signal() { + switch (_sceneMode) { + case 11: + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 34; + g_globals->_sceneManager.changeScene(2000); + break; + case 12: + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 29; + g_globals->_sceneManager.changeScene(2000); + break; + case 20: + _sceneMode = 21; + _stripManager.start(712, this); + break; + case 21: + R2_GLOBALS._player.disableControl(); + R2_INVENTORY.setObjectScene(36, 1); + _sceneMode = 2354; + setAction(&_sequenceManager, this, 2354, &R2_GLOBALS._player, NULL); + break; + case 2354: + R2_INVENTORY.setObjectScene(20, 2350); + g_globals->_sceneManager.changeScene(2900); + break; + case 2355: + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_2); + _stripManager.start(711, this); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene2350::process(Event &event) { + if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_3)){ + Common::Point pt(event.mousePos.x, 129); + PlayerMover *mover = new PlayerMover(); + BF_GLOBALS._player.addMover(mover, &pt); + event.handled = true; + } + Scene::process(event); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 3a5c439130..27803418c2 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -31,6 +31,7 @@ #include "tsage/globals.h" #include "tsage/sound.h" #include "tsage/ringworld2/ringworld2_logic.h" +#include "tsage/ringworld2/ringworld2_speakers.h" namespace TsAGE { @@ -38,25 +39,30 @@ namespace Ringworld2 { using namespace TsAGE; -class Scene2000: public SceneExt { +class Scene2000 : public SceneExt { class Action1 : public ActionExt { public: virtual void signal(); }; class Exit1 : public SceneExit { + public: virtual void changeScene(); }; class Exit2 : public SceneExit { + public: virtual void changeScene(); }; class Exit3 : public SceneExit { + public: virtual void changeScene(); }; class Exit4 : public SceneExit { + public: virtual void changeScene(); }; class Exit5 : public SceneExit { + public: virtual void changeScene(); }; public: @@ -84,6 +90,39 @@ public: void initPlayer(); }; +class Scene2350 : public SceneExt { + class Actor2 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class ExitUp : public SceneExit { + virtual void changeScene(); + }; + class ExitWest : public SceneExit { + virtual void changeScene(); + }; +public: + + SpeakerQuinn2350 _quinnSpeaker; + SpeakerPharisha2350 _pharishaSpeaker; + NamedHotspot _item1; + SceneActor _actor1; + Actor2 _actor2; + Actor3 _actor3; + Actor3 _actor4; + ExitUp _exitUp; + ExitWest _exitWest; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); +// virtual void synchronize(Serializer &s); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From cad52b2cd1713b925b5ec0d6750782af2c35ff85 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 1 Dec 2011 21:30:54 +1100 Subject: TSAGE: Implemented the new R2RW cursors --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 +-- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 40 +++++++++++++------------ 2 files changed, 23 insertions(+), 21 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 53f47ce43c..f542ddecbf 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1268,9 +1268,9 @@ void Scene200::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(200); - _westExit.setDetails(Rect(94, 0, 123, 58), CURSOR_9, 175); + _westExit.setDetails(Rect(94, 0, 123, 58), EXITCURSOR_W, 175); _westExit.setDest(Common::Point(125, 52)); - _eastExit.setDetails(Rect(133, 0, 167, 58), CURSOR_10, 150); + _eastExit.setDetails(Rect(133, 0, 167, 58), EXITCURSOR_E, 150); _eastExit.setDest(Common::Point(135, 52)); _northDoor.postInit(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 089b615bf6..ee3153c0c8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -189,7 +189,7 @@ void Scene2000::initExits() { _exit5._enabled = true; _exit5._bounds.set(61, 68, 90, 125); _exit5.setDest(Common::Point(92, 129)); - _exit5._cursorNum = CURSOR_9; + _exit5._cursorNum = EXITCURSOR_W; break; case 4: case 12: @@ -198,7 +198,7 @@ void Scene2000::initExits() { _exit5._enabled = true; _exit5._bounds.set(230, 68, 259, 125); _exit5.setDest(Common::Point(244, 129)); - _exit5._cursorNum = CURSOR_10; + _exit5._cursorNum = EXITCURSOR_E; break; default: break; @@ -224,7 +224,7 @@ void Scene2000::initExits() { _exit3._enabled = true; _exit3._bounds.set(71, 130, 154, 168); _exit3.setDest(Common::Point(94, 129)); - _exit3._cursorNum = CURSOR_14; + _exit3._cursorNum = EXITCURSOR_SE; loadScene(2300); if (!_exitingFlag) _mazePlayerMode = 0; @@ -302,7 +302,7 @@ void Scene2000::initExits() { _exit4._enabled = true; _exit4._bounds.set(138, 83, 211, 125); _exit4.setDest(Common::Point(129, 188)); - _exit4._cursorNum = CURSOR_16; + _exit4._cursorNum = EXITCURSOR_NW; loadScene(2250); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2500) @@ -317,7 +317,7 @@ void Scene2000::initExits() { _exit3._enabled = true; _exit3._bounds.set(78, 130, 148, 168); _exit3.setDest(Common::Point(100, 129)); - _exit3._cursorNum = CURSOR_14; + _exit3._cursorNum = EXITCURSOR_SE; loadScene(2075); R2_GLOBALS._walkRegions.load(2000); if (!_exitingFlag) @@ -328,7 +328,7 @@ void Scene2000::initExits() { _exit3._enabled = true; _exit3._bounds.set(160, 130, 248, 168); _exit3.setDest(Common::Point(225, 129)); - _exit3._cursorNum = CURSOR_15; + _exit3._cursorNum = EXITCURSOR_SW; loadScene(2325); R2_GLOBALS._walkRegions.load(2000); if (!_exitingFlag) @@ -340,7 +340,7 @@ void Scene2000::initExits() { _exit4._enabled = true; _exit4._bounds.set(122, 83, 207, 125); _exit4.setDest(Common::Point(210, 129)); - _exit4._cursorNum = CURSOR_16; + _exit4._cursorNum = EXITCURSOR_NW; loadScene(2125); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2400) @@ -354,7 +354,7 @@ void Scene2000::initExits() { _exit4._enabled = true; _exit4._bounds.set(108, 83, 128, 184); _exit4.setDest(Common::Point(135, 129)); - _exit4._cursorNum = CURSOR_13; + _exit4._cursorNum = CURSOR_INVALID; loadScene(2275); R2_GLOBALS._walkRegions.load(2000); if (!_exitingFlag) @@ -365,7 +365,7 @@ void Scene2000::initExits() { _exit3._enabled = true; _exit3._bounds.set(171, 130, 241, 168); _exit3.setDest(Common::Point(218, 129)); - _exit3._cursorNum = CURSOR_15; + _exit3._cursorNum = EXITCURSOR_SW; loadScene(2050); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) @@ -791,15 +791,15 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { } _exitingFlag = false; - _exit1.setDetails(Rect(0, 100, 14, 140), CURSOR_9, 2000); + _exit1.setDetails(Rect(0, 100, 14, 140), EXITCURSOR_W, 2000); _exit1.setDest(Common::Point(14, 129)); - _exit2.setDetails(Rect(305, 100, 320, 140), CURSOR_10, 2000); + _exit2.setDetails(Rect(305, 100, 320, 140), EXITCURSOR_E, 2000); _exit2.setDest(Common::Point(315, 129)); - _exit3.setDetails(Rect(71, 130, 154, 168), CURSOR_8, 2000); + _exit3.setDetails(Rect(71, 130, 154, 168), EXITCURSOR_S, 2000); _exit3.setDest(Common::Point(94, 129)); - _exit4.setDetails(Rect(138, 83, 211, 125), CURSOR_7, 2000); + _exit4.setDetails(Rect(138, 83, 211, 125), EXITCURSOR_N, 2000); _exit4.setDest(Common::Point(188, 128)); - _exit5.setDetails(Rect(61, 68, 90, 125), CURSOR_9, 2000); + _exit5.setDetails(Rect(61, 68, 90, 125), EXITCURSOR_W, 2000); _exit5.setDest(Common::Point(92, 129)); R2_GLOBALS._sound1.play(200); @@ -1022,7 +1022,8 @@ void Scene2000::signal() { } void Scene2000::process(Event &event) { - if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_3)) { + if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && + (R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)) { warning("TODO: Check sub_22D26"); Common::Point pt(event.mousePos.x, 129); @@ -1099,9 +1100,9 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS._player._characterScene[2] = 2350; - _exitUp.setDetails(Rect(25, 83, 93, 125), CURSOR_16, 2350); + _exitUp.setDetails(Rect(25, 83, 93, 125), EXITCURSOR_NW, 2350); _exitUp.setDest(Common::Point(80, 129)); - _exitWest.setDetails(Rect(0, 100, 14, 140), CURSOR_9, 2350); + _exitWest.setDetails(Rect(0, 100, 14, 140), EXITCURSOR_W, 2350); _exitWest.setDest(Common::Point(14, 129)); R2_GLOBALS._player.postInit(); @@ -1200,7 +1201,7 @@ void Scene2350::signal() { break; case 2355: _sceneMode = 20; - R2_GLOBALS._events.setCursor(CURSOR_2); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(711, this); break; default: @@ -1210,7 +1211,8 @@ void Scene2350::signal() { } void Scene2350::process(Event &event) { - if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_3)){ + if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) && + (R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)){ Common::Point pt(event.mousePos.x, 129); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt); -- cgit v1.2.3 From 196a30754e70d925c60632fa63b7f80953fef515 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 1 Dec 2011 22:47:06 +1100 Subject: TSAGE: R2R scene areas shouldn't be processed when the player is disabled --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e9e205bda2..079ac62928 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -358,7 +358,7 @@ void SceneHandlerExt::process(Event &event) { } SceneExt *scene = static_cast(R2_GLOBALS._sceneManager._scene); - if (scene) { + if (scene && R2_GLOBALS._player._uiEnabled) { // Handle any scene areas that have been registered SynchronizedList::iterator saIter; for (saIter = scene->_sceneAreas.begin(); saIter != scene->_sceneAreas.end() && !event.handled; ++saIter) { -- cgit v1.2.3 From bdfdfc6166970ada95123fecf409c3d50b0e7e7e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 1 Dec 2011 22:53:15 +1100 Subject: TSAGE: Fixed some cursor constants used in R2R scene 300 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index f542ddecbf..5ca178596f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1528,10 +1528,10 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_TALK: if (R2_GLOBALS._player._characterIndex == 1) { - + warning("TODO: talk sequence"); } else { scene->_sceneMode = 10; - R2_GLOBALS._events.setCursor(CURSOR_WALK); // TODO: Determine correct cursor + R2_GLOBALS._events.setCursor(CURSOR_ARROW); if (!R2_GLOBALS.getFlag(44)) scene->_field412 = 174 + R2_GLOBALS._randomSource.getRandomNumber(2); @@ -1782,7 +1782,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS.getFlag(55)) { if (R2_GLOBALS.getFlag(57)) { R2_GLOBALS.clearFlag(60); - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Find correct cursor + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _sceneMode = 16; _stripManager.start(404, this); } else { @@ -1792,7 +1792,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { } else { if (R2_GLOBALS.getFlag(45)) { R2_GLOBALS.clearFlag(60); - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Find correct cursor + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _sceneMode = 12; _stripManager.start3(204, this, R2_GLOBALS._stripManager_lookupList); } else { @@ -1806,7 +1806,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { R2_GLOBALS.setFlag(60); R2_GLOBALS._player.setup(302, 3, 1); R2_GLOBALS._player.setPosition(Common::Point(271, 150)); - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor #2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); if (R2_GLOBALS.getFlag(51)) { _sceneMode = 13; @@ -1830,7 +1830,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setup(302, 3, 1); R2_GLOBALS._player.setPosition(Common::Point(271, 150)); _sceneMode = 17; - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor #2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(413, this); break; @@ -1966,7 +1966,7 @@ void Scene300::signal() { R2_GLOBALS.setFlag(38); R2_GLOBALS.setFlag(44); R2_GLOBALS.setFlag(51); - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _sceneMode = 16; _stripManager.start3(401, this, R2_GLOBALS._stripManager_lookupList); break; @@ -2021,7 +2021,7 @@ void Scene300::signal() { case 308: _sceneMode = 18; - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(418, this); break; @@ -2030,7 +2030,7 @@ void Scene300::signal() { // Deliberate fall-through case 309: signal309(); - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _sceneMode = 10; _stripManager.start3(_field412, this, R2_GLOBALS._stripManager_lookupList); break; @@ -2039,7 +2039,7 @@ void Scene300::signal() { _sceneMode = 14; R2_GLOBALS._player._effect = 0; _seeker.setAction(&_sequenceManager3, this, 314, &_seeker, &_doorway, NULL); - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(301, this); break; @@ -2057,18 +2057,18 @@ void Scene300::signal() { case 316: R2_GLOBALS._player._characterScene[2] = 500; _seeker.remove(); - R2_GLOBALS._player.enableControl(/* TODO: Cursor #3 */); + R2_GLOBALS._player.enableControl(CURSOR_CROSSHAIRS); break; case 317: _sceneMode = 19; - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(419, this); break; case 318: _sceneMode = 20; - R2_GLOBALS._events.setCursor(CURSOR_USE); // TODO: Cursor 2 + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(420, this); break; -- cgit v1.2.3 From 63f245779c8cd95c18d65e5fd845fafce941116c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 5 Dec 2011 23:42:45 +0100 Subject: TSAGE: R2R - Implement scene 2400 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 62 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 19 +++++++- 3 files changed, 81 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 079ac62928..b33bb65b80 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -101,6 +101,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Balloon Launch Platform return new Scene2350(); case 2400: + return new Scene2400(); case 2425: case 2430: case 2435: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index ee3153c0c8..ad45735dc2 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1221,5 +1221,67 @@ void Scene2350::process(Event &event) { Scene::process(event); } +/*-------------------------------------------------------------------------- + * Scene 2400 - + * + *--------------------------------------------------------------------------*/ +void Scene2400::Exit1::changeScene() { + Scene2400 *scene = (Scene2400 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + + Common::Point pt(-10, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + +} + +void Scene2400::Exit2::changeScene() { + Scene2400 *scene = (Scene2400 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(330, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2400::postInit(SceneObjectList *OwnerList) { + loadScene(2400); + SceneExt::postInit(); + _exit1.setDetails(Rect(0, 125, 14, 165), EXITCURSOR_W, 2000); + _exit1.setDest(Common::Point(14, 150)); + _exit2.setDetails(Rect(305, 125, 320, 165), EXITCURSOR_E, 2000); + _exit2.setDest(Common::Point(315, 150)); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._v56605[1] == 16) { + _sceneMode = 2400; + setAction(&_sequenceManager, this, 2400, &R2_GLOBALS._player, NULL); + } else { + _sceneMode = 2401; + setAction(&_sequenceManager, this, 2401, &R2_GLOBALS._player, NULL); + } +} + +void Scene2400::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._v56605[1] = 16; + g_globals->_sceneManager.changeScene(2000); + break; + case 11: + R2_GLOBALS._v56605[1] = 17; + g_globals->_sceneManager.changeScene(2000); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 27803418c2..15cd40a5d1 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -121,7 +121,24 @@ public: virtual void remove(); virtual void signal(); virtual void process(Event &event); -// virtual void synchronize(Serializer &s); +}; + +class Scene2400 : public SceneExt { + class Exit1 : public SceneExit { + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + virtual void changeScene(); + }; +public: + Exit1 _exit1; + Exit2 _exit2; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +// virtual void remove(); + virtual void signal(); +// virtual void process(Event &event); }; } // End of namespace Ringworld2 -- cgit v1.2.3 From dc62da925f7818056c4880e0d8aa134839e17638 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 5 Dec 2011 23:45:59 +0100 Subject: TSAGE: R2R - Fix several erroneous references to BF_GLOBALS --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 6 +++--- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 997f8ccd6d..54a15f3d98 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -50,7 +50,7 @@ RightClickDialog::RightClickDialog() : GfxDialog() { _btnList[5] = Common::Point(83, 47); // Set the palette and change the cursor - BF_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); setPalette(); @@ -185,7 +185,7 @@ void RightClickDialog::execute() { } if (cursorNum != CURSOR_NONE) - BF_GLOBALS._events.setCursor(cursorNum); + R2_GLOBALS._events.setCursor(cursorNum); _gfxManager.deactivate(); } @@ -345,7 +345,7 @@ CharacterDialog::CharacterDialog() { void HelpDialog::show() { // Set the palette and change the cursor - BF_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); // Create the dialog and draw it HelpDialog *dlg = new HelpDialog(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index ad45735dc2..be96b1e010 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -557,7 +557,7 @@ void Scene2000::Exit1::changeScene() { warning("TODO: Check sub_22D26"); Common::Point pt(-10, 129); NpcMover *mover = new NpcMover(); - BF_GLOBALS._player.addMover(mover, &pt, scene); + R2_GLOBALS._player.addMover(mover, &pt, scene); scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); } @@ -575,7 +575,7 @@ void Scene2000::Exit2::changeScene() { warning("TODO: Check sub_22D26"); Common::Point pt(330, 129); NpcMover *mover = new NpcMover(); - BF_GLOBALS._player.addMover(mover, &pt, scene); + R2_GLOBALS._player.addMover(mover, &pt, scene); } void Scene2000::Exit3::changeScene() { @@ -1028,7 +1028,7 @@ void Scene2000::process(Event &event) { Common::Point pt(event.mousePos.x, 129); PlayerMover *mover = new PlayerMover(); - BF_GLOBALS._player.addMover(mover, &pt, this); + R2_GLOBALS._player.addMover(mover, &pt, this); event.handled = true; } @@ -1215,7 +1215,7 @@ void Scene2350::process(Event &event) { (R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)){ Common::Point pt(event.mousePos.x, 129); PlayerMover *mover = new PlayerMover(); - BF_GLOBALS._player.addMover(mover, &pt); + R2_GLOBALS._player.addMover(mover, &pt); event.handled = true; } Scene::process(event); -- cgit v1.2.3 From a6ab1738243712bbc1db8a10f834542cd9d94c37 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 7 Dec 2011 22:42:40 +0100 Subject: TSAGE: R2R - Implement scene 2425 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 5 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 217 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes2.h | 49 +++++- 3 files changed, 267 insertions(+), 4 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index b33bb65b80..19b4bb6513 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -98,11 +98,14 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze return new Scene2000(); case 2350: - // Balloon Launch Platform + // Maze: Balloon Launch Platform return new Scene2350(); case 2400: + // Maze: Large empty room return new Scene2400(); case 2425: + // Maze: + return new Scene2425(); case 2430: case 2435: case 2440: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index be96b1e010..46c6261413 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1222,7 +1222,7 @@ void Scene2350::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 2400 - + * Scene 2400 - Maze: Large empty room * *--------------------------------------------------------------------------*/ void Scene2400::Exit1::changeScene() { @@ -1283,5 +1283,220 @@ void Scene2400::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2425 - Maze: + * + *--------------------------------------------------------------------------*/ + +bool Scene2425::Item1::startAction(CursorType action, Event &event) { + Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; + + if ((action == R2_37) && (!R2_GLOBALS.getFlag(84))) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2426; + scene->setAction(&scene->_sequenceManager, scene, 2426, &R2_GLOBALS._player, &scene->_actor1, NULL); + R2_GLOBALS.setFlag(84); + return true; + } else if (action == R2_37) { + R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); + R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); + return startAction(R2_STEPPING_DISKS, event); + } else + return startAction(action, event); +} + +bool Scene2425::Item2::startAction(CursorType action, Event &event) { + Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; + + if ((action == R2_37) && (R2_GLOBALS.getFlag(84))) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2427; + scene->setAction(&scene->_sequenceManager, scene, 2427, &R2_GLOBALS._player, &scene->_actor1, NULL); + R2_GLOBALS.clearFlag(84); + return true; + } else if (action == R2_37) { + R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); + R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); + return startAction(R2_STEPPING_DISKS, event); + } else + return startAction(action, event); +} + +bool Scene2425::Item3::startAction(CursorType action, Event &event) { + Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; + + if (action != R2_37) + return startAction(action, event); + else { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS.getFlag(84)) { + scene->_sceneMode = 20; + scene->setAction(&scene->_sequenceManager, scene, 2427, &R2_GLOBALS._player, &scene->_actor1, NULL); + R2_GLOBALS.clearFlag(84); + } else { + scene->_sceneMode = 2425; + scene->setAction(&scene->_sequenceManager, scene, 2425, &R2_GLOBALS._player, &scene->_actor1, NULL); + } + return true; + } +} + +bool Scene2425::Item4::startAction(CursorType action, Event &event) { + if (action != R2_37) + return startAction(action, event); + else { + R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); + R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); + return startAction(R2_STEPPING_DISKS, event); + } +} + +bool Scene2425::Actor1::startAction(CursorType action, Event &event) { + if (action == R2_STEPPING_DISKS) { + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._events.setCursor(R2_37); + return true; + } else { + return startAction(action, event); + } + } else if (R2_GLOBALS._events.getCursor() == R2_37) + return false; + else + return startAction(action, event); +} + +bool Scene2425::Actor2::startAction(CursorType action, Event &event) { + if (action != R2_37) + return startAction(action, event); + else { + R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); + R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); + return startAction(R2_STEPPING_DISKS, event); + } +} + +void Scene2425::Exit1::changeScene() { + Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(340, 200); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + + +void Scene2425::postInit(SceneObjectList *OwnerList) { + loadScene(2425); + SceneExt::postInit(); + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._player._characterIndex = 2; + R2_GLOBALS._sceneManager._previousScene = 2000; + } + + R2_GLOBALS._sound1.play(200); + _exit1.setDetails(Rect(270, 136, 319, 168), EXITCURSOR_SE, 2000); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(2008); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor2.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor2.setup(20, 5, 1); + _actor2.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor2.setup(2008, 5, 1); + _actor2.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor2.setPosition(Common::Point(250, 185)); + } + + _actor1.postInit(); + if (R2_GLOBALS._sceneManager._previousScene == 2455) + _actor1.setup(2426, 1, 1); + else + _actor1.setup(2426, 1, 2); + + _actor1.setPosition(Common::Point(290, 9)); + _actor1.fixPriority(20); + _actor1.setDetails(2455, 12, -1, -1, 1, NULL); + _item1.setDetails(Rect(225, 52, 248, 65), 2425, -1, -1, -1, 1, NULL); + _item2.setDetails(Rect(292, 81, 316, 94), 2425, -1, -1, -1, 1, NULL); + +// CHECKME: SceneActor using a SceneItem function?? +// _actor3.setDetails(11, 2425, 3, -1, 6); + _actor3._sceneRegionId = 11; + _actor3._resNum = 2425; + _actor3._lookLineNum = 3; + _actor3._talkLineNum = -1; + _actor3._useLineNum = 6; + g_globals->_sceneItems.addItems(&_actor3, this); + + _item3.setDetails(12, 2425, 7, -1, 9); + _item4.setDetails(Rect(0, 0, 320, 200), 2425, 0, -1, -1, 1, NULL); + + R2_GLOBALS._player.disableControl(); + switch (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) { + case 2000: { + _sceneMode = 10; + R2_GLOBALS._player.setPosition(Common::Point(340, 200)); + + Common::Point pt(280, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 2425: + _sceneMode = 10; + R2_GLOBALS._player.setPosition(Common::Point(280, 150)); + _action->signal(); + break; + case 2455: + _sceneMode = 2428; + setAction(&_sequenceManager, this, 2428, &R2_GLOBALS._player, &_actor1, NULL); + break; + default: + R2_GLOBALS._player.setPosition(Common::Point(280, 150)); + R2_GLOBALS._player.setStrip(8); + R2_GLOBALS._player.enableControl(); + break; + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2425; +} + +void Scene2425::remove() { + R2_GLOBALS._sound1.fadeOut(NULL); + SceneExt::remove(); +} + +void Scene2425::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 20: + _sceneMode = 2425; + setAction(&_sequenceManager, this, 2425, &R2_GLOBALS._player, &_actor1, NULL); + break; + case 2425: + g_globals->_sceneManager.changeScene(2455); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 15cd40a5d1..f9d4c9f2ce 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -136,9 +136,54 @@ public: SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); -// virtual void remove(); virtual void signal(); -// virtual void process(Event &event); +}; + +class Scene2425 : public SceneExt { + class Item1 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item3 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item4 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor1 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + Item1 _item1; + Item2 _item2; + Item3 _item3; + Item4 _item4; + Actor1 _actor1; + Actor2 _actor2; + Actor2 _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); }; } // End of namespace Ringworld2 -- cgit v1.2.3 From 46ee76b1b44ecd2f9a3ba55096f19f51f9e151e2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 8 Dec 2011 14:47:46 +1100 Subject: TSAGE: Fix objects in R2R scene 2425 to properly call base methods --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 46c6261413..bc431f2303 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1300,9 +1300,9 @@ bool Scene2425::Item1::startAction(CursorType action, Event &event) { } else if (action == R2_37) { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); - return startAction(R2_STEPPING_DISKS, event); + return NamedHotspot::startAction(R2_STEPPING_DISKS, event); } else - return startAction(action, event); + return NamedHotspot::startAction(action, event); } bool Scene2425::Item2::startAction(CursorType action, Event &event) { @@ -1317,16 +1317,16 @@ bool Scene2425::Item2::startAction(CursorType action, Event &event) { } else if (action == R2_37) { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); - return startAction(R2_STEPPING_DISKS, event); + return NamedHotspot::startAction(R2_STEPPING_DISKS, event); } else - return startAction(action, event); + return NamedHotspot::startAction(action, event); } bool Scene2425::Item3::startAction(CursorType action, Event &event) { Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; if (action != R2_37) - return startAction(action, event); + return NamedHotspot::startAction(action, event); else { R2_GLOBALS._player.disableControl(); if (R2_GLOBALS.getFlag(84)) { @@ -1343,11 +1343,11 @@ bool Scene2425::Item3::startAction(CursorType action, Event &event) { bool Scene2425::Item4::startAction(CursorType action, Event &event) { if (action != R2_37) - return startAction(action, event); + return NamedHotspot::startAction(action, event); else { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); - return startAction(R2_STEPPING_DISKS, event); + return NamedHotspot::startAction(R2_STEPPING_DISKS, event); } } @@ -1357,21 +1357,21 @@ bool Scene2425::Actor1::startAction(CursorType action, Event &event) { R2_GLOBALS._events.setCursor(R2_37); return true; } else { - return startAction(action, event); + return SceneActor::startAction(action, event); } } else if (R2_GLOBALS._events.getCursor() == R2_37) return false; else - return startAction(action, event); + return SceneActor::startAction(action, event); } bool Scene2425::Actor2::startAction(CursorType action, Event &event) { if (action != R2_37) - return startAction(action, event); + return SceneActor::startAction(action, event); else { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); - return startAction(R2_STEPPING_DISKS, event); + return SceneActor::startAction(R2_STEPPING_DISKS, event); } } -- cgit v1.2.3 From eb862627f41d49e1811872c855f1a76616645c11 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 8 Dec 2011 15:03:53 +1100 Subject: TSAGE: Bugfix initialisation of R2R scene 2425 that caused crashes when clicking on items --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index bc431f2303..c162638e94 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1441,7 +1441,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { _actor3._lookLineNum = 3; _actor3._talkLineNum = -1; _actor3._useLineNum = 6; - g_globals->_sceneItems.addItems(&_actor3, this); + g_globals->_sceneItems.push_back(&_actor3); _item3.setDetails(12, 2425, 7, -1, 9); _item4.setDetails(Rect(0, 0, 320, 200), 2425, 0, -1, -1, 1, NULL); -- cgit v1.2.3 From fee917cc052a2b7bb086a8d14ba8313bc8e75fa6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 8 Dec 2011 15:16:00 +1100 Subject: TSAGE: Fix crash in R2R fallback scene display method --- engines/tsage/ringworld2/ringworld2_logic.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 19b4bb6513..e740e14e10 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -244,14 +244,16 @@ void SceneExt::loadScene(int sceneNum) { bool SceneExt::display(CursorType action) { switch (action) { + case CURSOR_CROSSHAIRS: + return false; case CURSOR_LOOK: - SceneItem::display2(9000, R2_GLOBALS._randomSource.getRandomNumber(2)); + SceneItem::display2(1, R2_GLOBALS._randomSource.getRandomNumber(4)); break; case CURSOR_USE: - SceneItem::display2(9000, R2_GLOBALS._randomSource.getRandomNumber(2) + 6); + SceneItem::display2(1, R2_GLOBALS._randomSource.getRandomNumber(4) + 5); break; case CURSOR_TALK: - SceneItem::display2(9000, R2_GLOBALS._randomSource.getRandomNumber(2) + 3); + SceneItem::display2(1, R2_GLOBALS._randomSource.getRandomNumber(4) + 10); break; default: return false; -- cgit v1.2.3 From 74a5b8db426fed87d1a31cb69b2bd5382eeb3557 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 8 Dec 2011 23:07:14 +0100 Subject: TSAGE: R2R - Implement scene 2430 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 139 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 41 +++++++ 3 files changed, 182 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e740e14e10..d976c5bd30 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -107,6 +107,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: return new Scene2425(); case 2430: + // Maze: Bedroom + return new Scene2430(); case 2435: case 2440: case 2445: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index c162638e94..08deb5948d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1498,5 +1498,144 @@ void Scene2425::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2430 - Maze: Bedroom + * + *--------------------------------------------------------------------------*/ + +bool Scene2430::Actor1::startAction(CursorType action, Event &event) { + return SceneActor::startAction(action, event); +} + +bool Scene2430::Actor2::startAction(CursorType action, Event &event) { + Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene; + + if ((action != R2_STEPPING_DISKS) || (R2_GLOBALS._player._characterIndex != 2)) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2430; + scene->setAction(&scene->_sequenceManager, scene, 2430, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; +} + +bool Scene2430::Actor3::startAction(CursorType action, Event &event) { + Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene; + + if ((action != R2_STEPPING_DISKS) || (R2_GLOBALS._player._characterIndex != 2)) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2435; + scene->setAction(&scene->_sequenceManager, scene, 2435, &R2_GLOBALS._player, &scene->_actor3, NULL); + return true; +} + +void Scene2430::Exit1::changeScene() { + Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene; + + scene->_sceneMode = 0; + R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + Common::Point pt(108, 200); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2430::postInit(SceneObjectList *OwnerList) { + loadScene(2430); + SceneExt::postInit(); + _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); + _exit1.setDest(Common::Point(108, 160)); + + if (R2_INVENTORY.getObjectScene(37) == 2430) { + _actor2.postInit(); + _actor2.setup(2435, 1, 5); + _actor2.setPosition(Common::Point(205, 119)); + _actor2.fixPriority(152); + _actor2.setDetails(2430, 51, -1, 53, 1, NULL); + } + + if (R2_INVENTORY.getObjectScene(50) == 2435) { + _actor3.postInit(); + _actor3.setup(2435, 1, 1); + _actor3.setPosition(Common::Point(31, 65)); + _actor3.setDetails(2430, 48, -1, -1, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(2008); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + R2_GLOBALS._player.setPosition(Common::Point(100, 200)); + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(20, 5, 1); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor1.setup(2008, 5, 1); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor1.setPosition(Common::Point(189, 137)); + R2_GLOBALS._walkRegions.enableRegion(4); + } + + _item2.setDetails(Rect(11, 30, 37, 45), 2430, 3, -1, 5, 1, NULL); + _item3.setDetails(Rect(9, 58, 63, 92), 2430, 6, -1, -1, 1, NULL); + _item4.setDetails(Rect(20, 89, 127, 107), 2430, 9, -1, 11, 1, NULL); + _item5.setDetails(Rect(49, 7, 60, 27), 2430, 12, 13, 14, 1, NULL); + _item6.setDetails(Rect(69, 10, 95, 72), 2430, 15, -1, 14, 1, NULL); + _item10.setDetails(Rect(198, 4, 222, 146), 2430, 30, 31, 32, 1, NULL); + _item7.setDetails(Rect(155, 40, 304, 120), 2430, 21, -1, 23, 1, NULL); + _item8.setDetails(Rect(249, 3, 261, 39), 2430, 24, 25, -1, 1, NULL); + _item9.setDetails(Rect(279, 13, 305, 34), 2430, 33, -1, 18, 1, NULL); + // CHECKME: initialized for the 2nd time?? + _item2.setDetails(Rect(11, 30, 37, 45), 2430, 33, -1, 18, 1, NULL); + _item11.setDetails(Rect(116, 104, 148, 111), 2430, 39, -1, -1, 1, NULL); + _item12.setDetails(Rect(66, 77, 84, 83), 2430, 39, -1, -1, 1, NULL); + _item13.setDetails(Rect(117, 118, 201, 141), 2430, 9, -1, 11, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2430; + Common::Point pt(108, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(105, 145)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } +} + +void Scene2430::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 2430: + _actor2.remove(); + R2_INVENTORY.setObjectScene(R2_37, 2); + R2_GLOBALS._player.enableControl(); + break; + case 2435: + _actor3.remove(); + R2_INVENTORY.setObjectScene(R2_50, 2); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index f9d4c9f2ce..f2bb95568f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -186,6 +186,47 @@ public: virtual void signal(); }; +class Scene2430 : public SceneExt { + class Actor1 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + NamedHotspot _item6; + NamedHotspot _item7; + NamedHotspot _item8; + NamedHotspot _item9; + NamedHotspot _item10; + NamedHotspot _item11; + NamedHotspot _item12; + NamedHotspot _item13; + Actor1 _actor1; + Actor2 _actor2; + Actor3 _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From ca51f1681b01cb2746b56ed143807b82a93ac708 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 10 Dec 2011 00:23:07 +0100 Subject: TSAGE: R2R - Implement scene 2435 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 158 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 32 +++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 110 ++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 23 ++++ 5 files changed, 325 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d976c5bd30..86e81786ea 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -110,6 +110,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Bedroom return new Scene2430(); case 2435: + // Maze: Throne room + return new Scene2435(); case 2440: case 2445: case 2450: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 08deb5948d..a8decd365d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1637,5 +1637,163 @@ void Scene2430::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2435 - Maze: Throne room + * + *--------------------------------------------------------------------------*/ +bool Scene2435::Actor1::startAction(CursorType action, Event &event) { + return SceneActor::startAction(action, event); +} + +bool Scene2435::Actor2::startAction(CursorType action, Event &event) { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case R2_34: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(R2_2); + R2_GLOBALS.setFlag(82); + scene->_stripManager.start(603, scene); + return true; + case R2_35: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(R2_2); + R2_GLOBALS.setFlag(82); + scene->_stripManager.start(602, scene); + R2_INVENTORY.setObjectScene(R2_35, 2000); + return true; + case CURSOR_TALK: + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 20; + R2_GLOBALS._events.setCursor(R2_2); + if ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS.getFlag(82))) { + scene->_stripManager.start(605, scene); + return true; + } else if (R2_INVENTORY.getObjectScene(R2_35) == 2) { + scene->_stripManager.start(601, scene); + return true; + } else { + R2_GLOBALS.setFlag(82); + scene->_stripManager.start(600, scene); + return true; + } + default: + return SceneActor::startAction(action, event); + } +} + +void Scene2435::Exit1::changeScene() { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + Common::Point pt(175, 200); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + +} + +void Scene2435::postInit(SceneObjectList *OwnerList) { + loadScene(2435); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(201); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_pharishaSpeaker); + _exit1.setDetails(Rect(142, 155, 207, 167), EXITCURSOR_S, 2000); + _exit1.setDest(Common::Point(175, 160)); + _actor2.postInit(); + _actor2.setup(2005, 3, 1); + _actor2.setPosition(Common::Point(219, 106)); + _actor2.setDetails(2001, 25, 26, -1, 1, NULL); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(2008); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + R2_GLOBALS._player.setPosition(Common::Point(715, 200)); + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(20, 5, 1); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor1.setup(2008, 5, 1); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor1.setPosition(Common::Point(107, 145)); + R2_GLOBALS._walkRegions.enableRegion(2); + } + + _item2.setDetails(Rect(52, 44, 96, 82), 2430, 3, -1, 5, 1, NULL); + _item3.setDetails(Rect(117, 36, 161, 74), 2430, 3, -1, 5, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + _sceneMode = 10; + Common::Point pt(175, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2450) { + _sceneMode = 30; + Common::Point pt(175, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(210, 150)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2435; + R2_GLOBALS._v56605[1 + R2_GLOBALS._player._characterIndex] = 12; +} + +void Scene2435::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene2435::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 20: + R2_GLOBALS._player.enableControl(R2_6); + break; + case 30: + R2_GLOBALS._player._characterScene[1] = 2435; + R2_GLOBALS._player._characterScene[2] = 2435; + R2_GLOBALS._player._oldCharacterScene[1] = 2435; + R2_GLOBALS._player._oldCharacterScene[2] = 2435; + R2_GLOBALS._v56605[1] = 12; + R2_GLOBALS._v56605[2] = 12; + R2_GLOBALS.setFlag(81); + _sceneMode = 2436; + R2_GLOBALS._player.setStrip(7); + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + _actor1.setVisage(20); + else + _actor1.setVisage(2008); + setAction(&_sequenceManager, this, 2436, &_actor1, NULL); + break; + case 2436: + R2_GLOBALS._walkRegions.enableRegion(2); + _sceneMode = 20; + R2_GLOBALS._events.setCursor(R2_2); + _stripManager.start(709, this); + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index f2bb95568f..d3db8e1eb3 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -227,6 +227,38 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene2435 : public SceneExt { + class Actor1 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SpeakerQuinn2435 _quinnSpeaker; + SpeakerSeeker2435 _seekerSpeaker; + SpeakerPharisha2435 _pharishaSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + Actor1 _actor1; + Actor2 _actor2; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 2875652641..4fabc3643b 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -26,6 +26,7 @@ #include "tsage/graphics.h" #include "tsage/staticres.h" #include "tsage/ringworld2/ringworld2_scenes0.h" +#include "tsage/ringworld2/ringworld2_scenes2.h" namespace TsAGE { @@ -482,6 +483,115 @@ SpeakerPharisha2350::SpeakerPharisha2350(): VisualSpeaker() { _numFrames = 0; } +/*--------------------------------------------------------------------------*/ + +SpeakerQuinn2435::SpeakerQuinn2435() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +void SpeakerQuinn2435::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object2->setStrip(7); + _object1.setup(2020, 5, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerSeeker2435::SpeakerSeeker2435() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker2435::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object2->setStrip(7); + _object1.setup(4099, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerPharisha2435::SpeakerPharisha2435() { + _speakerName = "PHARISHA"; + _color1 = 151; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerPharisha2435::proc15() { + int v = _fieldF6; + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4098, 5, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 5793f4377e..e788fb7f9c 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -129,6 +129,29 @@ public: virtual Common::String getClassName() { return "SpeakerPharisha2350"; } }; +class SpeakerQuinn2435 : public VisualSpeaker { +public: + SpeakerQuinn2435(); + + virtual Common::String getClassName() { return "SpeakerQuinn2435"; } + virtual void proc15(); +}; + +class SpeakerSeeker2435 : public VisualSpeaker { +public: + SpeakerSeeker2435(); + + virtual Common::String getClassName() { return "SpeakerSeeker2435"; } + virtual void proc15(); +}; + +class SpeakerPharisha2435 : public VisualSpeaker { +public: + SpeakerPharisha2435(); + + virtual Common::String getClassName() { return "SpeakerPharisha2435"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From c68d6ed585799300d4103acf275cb2e2ecf8e73c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 10 Dec 2011 10:23:15 +0100 Subject: TSAGE: R2R - Implement scene 2440 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 113 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 31 +++++++ 3 files changed, 146 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 86e81786ea..9b7272e6dc 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -113,6 +113,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Throne room return new Scene2435(); case 2440: + // Maze: Another bedroom + return new Scene2440(); case 2445: case 2450: case 2455: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index a8decd365d..0e824f6742 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1795,5 +1795,118 @@ void Scene2435::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2440 - Maze: Another bedroom + * + *--------------------------------------------------------------------------*/ + +bool Scene2440::Actor1::startAction(CursorType action, Event &event) { + return SceneActor::startAction(action, event); +} + +bool Scene2440::Actor2::startAction(CursorType action, Event &event) { + Scene2440 *scene = (Scene2440 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == 2)){ + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2440; + scene->setAction(&scene->_sequenceManager, scene, 2440, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; + } + + return SceneActor::startAction(action, event); +} + +void Scene2440::Exit1::changeScene() { + Scene2440 *scene = (Scene2440 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + Common::Point pt(210, 200); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2440::postInit(SceneObjectList *OwnerList) { + loadScene(2440); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(200); + // Fix exit cursor, the original was using NW + _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_SE, 2000); + _exit1.setDest(Common::Point(210, 160)); + if (R2_INVENTORY.getObjectScene(49) == 2440) { + _actor2.postInit(); + _actor2.setup(2435, 1, 1); + _actor2.setPosition(Common::Point(94, 80)); + _actor2.fixPriority(106); + _actor2.setDetails(2430, 48, -1, -1, 1, NULL); + } + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(2008); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + R2_GLOBALS._player.setPosition(Common::Point(210, 200)); + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(20, 5, 1); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor1.setup(2008, 5, 1); + _actor1.setDetails(9002, 0, 5, 3, 1, NULL); + } + _actor1.setPosition(Common::Point(38, 119)); + } + + _item2.setDetails(Rect(125, 25, 142, 73), 2430, 15, -1, 14, 1, NULL); + _item3.setDetails(Rect(124, 78, 237, 120), 2430, 36, -1, 38, 1, NULL); + _item4.setDetails(Rect(250, 3, 265, 133), 2430, 30, 31, 32, 1, NULL); + _item5.setDetails(Rect(91, 117, 203, 140), 2430, 9, -1, 11, 1, NULL); + _item6.setDetails(Rect(48, 78, 103, 112), 2430, 6, -1, -1, 1, NULL); + _item7.setDetails(Rect(48, 31, 73, 52), 2430, 33, -1, 18, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2440; + Common::Point pt(210, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(210, 150)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } +} + +void Scene2440::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene2440::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 2440: + _actor2.remove(); + R2_INVENTORY.setObjectScene(49, 2); + // No break on purpose + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index d3db8e1eb3..1fef5a8c78 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -259,6 +259,37 @@ public: virtual void signal(); }; +class Scene2440 : public SceneExt { + class Actor1 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + NamedHotspot _item6; + NamedHotspot _item7; + Actor1 _actor1; + Actor2 _actor2; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 75478959ab5204f59b4b90793d8618d24fe6d2d8 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 10 Dec 2011 10:37:52 +0100 Subject: TSAGE: R2R - Implement scene 2445 (unused+broken?) --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 ++ engines/tsage/ringworld2/ringworld2_scenes2.cpp | 17 +++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 8 ++++++++ 3 files changed, 27 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 9b7272e6dc..ba624b9db3 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -116,6 +116,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Another bedroom return new Scene2440(); case 2445: + // Maze: + return new Scene2445(); case 2450: case 2455: case 2500: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 0e824f6742..fdfc5fcbdc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1908,5 +1908,22 @@ void Scene2440::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2445 - Maze: + * + *--------------------------------------------------------------------------*/ +void Scene2445::postInit(SceneObjectList *OwnerList) { + loadScene(2445); + SceneExt::postInit(); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.setPosition(Common::Point(160, 140)); + R2_GLOBALS._player.disableControl(); +} + +void Scene2445::signal() { + R2_GLOBALS._player.enableControl(); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 1fef5a8c78..fa7a641114 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -290,6 +290,14 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene2445 : public SceneExt { +public: + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 5ac244313f16be73ab33cab68ee7b6d7b742b9e0 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 11 Dec 2011 00:36:04 +0100 Subject: TSAGE: R2R - Implement scene 2450 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 293 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 33 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 90 +++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 23 ++ 5 files changed, 441 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ba624b9db3..658937f0a5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -119,6 +119,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: return new Scene2445(); case 2450: + // Maze: Another bedroom + return new Scene2450(); case 2455: case 2500: case 2525: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index fdfc5fcbdc..c83d605d45 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1925,5 +1925,298 @@ void Scene2445::postInit(SceneObjectList *OwnerList) { void Scene2445::signal() { R2_GLOBALS._player.enableControl(); } + +/*-------------------------------------------------------------------------- + * Scene 2450 - Maze: Another bedroom + * + *--------------------------------------------------------------------------*/ + +bool Scene2450::Actor2::startAction(CursorType action, Event &event) { + Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == 1)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2452; + scene->setAction(&scene->_sequenceManager, scene, 2452, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; + } + return SceneActor::startAction(action, event); +} + +bool Scene2450::Actor3::startAction(CursorType action, Event &event) { + Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_TALK) { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._v565AE < 3) { + ++R2_GLOBALS._v565AE; + scene->_sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_stripManager.start(699 + (R2_GLOBALS._v565AE * 2), scene); + else + scene->_stripManager.start(700 + (R2_GLOBALS._v565AE * 2), scene); + } + return true;} else { + return SceneActor::startAction(action, event); + } +} + +void Scene2450::Exit1::changeScene() { + Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; + + if ((R2_GLOBALS._player._characterIndex == 2) || (R2_GLOBALS.getFlag(61))) { + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + Common::Point pt(-10, 180); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } else { + _moving = false; + SceneItem::display(2450, 3, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + Common::Point pt(60, 140); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, NULL); + } +} + +void Scene2450::postInit(SceneObjectList *OwnerList) { + loadScene(2450); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(200); + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._sceneManager._previousScene = 1900; + R2_GLOBALS._player._oldCharacterScene[1] = 1900; + R2_GLOBALS._player._oldCharacterScene[2] = 1900; + } + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_caretakerSpeaker); + + if (R2_GLOBALS.getFlag(72)) { + _exit1.setDetails(Rect(0, 143, 47, 168), EXITCURSOR_SW, 2000); + _exit1.setDest(Common::Point(10, 160)); + } + + if (!R2_GLOBALS.getFlag(61)) { + _actor2.postInit(); + _actor2.setVisage(2009); + _actor2.setPosition(Common::Point(190, 119)); + _actor2.fixPriority(50); + _actor2.setDetails(2450, 0, -1, -1, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + switch (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) { + case 1900: + R2_GLOBALS._v565AE = 0; + R2_GLOBALS._player._characterScene[1] = 2450; + R2_GLOBALS._player._characterScene[2] = 2450; + R2_GLOBALS._player._oldCharacterScene[1] = 2450; + R2_GLOBALS._player._oldCharacterScene[2] = 2450; + R2_GLOBALS._player.setup(2450, 1, 1); + R2_GLOBALS._player.setPosition(Common::Point(126, 101)); + setAction(&_sequenceManager, this, 2450, &R2_GLOBALS._player, NULL); + break; + case 2000: + _sceneMode = 2451; + if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterScene[2] == 2450) { + _actor1.postInit(); + _actor1.setup(20, 6, 1); + _actor1.setPosition(Common::Point(240, 120)); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } + setAction(&_sequenceManager, this, 2451, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player._oldCharacterScene[2] = 2450; + R2_GLOBALS._player._characterScene[2] = 2450; + if (R2_GLOBALS._player._characterScene[1] == 2450) { + _actor1.postInit(); + if (R2_GLOBALS.getFlag(61)) + _actor1.setup(2008, 6, 1); + else + _actor1.setup(10, 6, 1); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setPosition(Common::Point(106, 111)); + } + setAction(&_sequenceManager, this, 2456, &R2_GLOBALS._player, NULL); + } + break; + case 2450: + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.postInit(); + if (R2_GLOBALS.getFlag(61)) { + R2_GLOBALS._player.setup(2008, 6, 1); + } else { + R2_GLOBALS._player.setup(10, 6, 1); + } + R2_GLOBALS._player.setPosition(Common::Point(106, 111)); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS.getFlag(72)) { + if (R2_GLOBALS._player._characterScene[2] == 2450) { + _actor1.postInit(); + _actor1.setup(20, 6, 1); + _actor1.setPosition(Common::Point(240, 120)); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } + } else { + _actor1.postInit(); + _actor1.setup(20, 8, 1); + _actor1.setPosition(Common::Point(93, 158)); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + + _actor3.postInit(); + _actor3.setup(2001, 7, 1); + _actor3.setPosition(Common::Point(34, 153)); + _actor3.setDetails(2001, 40, -1, -1, 1, NULL); + + _exit1._enabled = false; + } + } else { + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setup(20, 8, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(93, 158)); + if (R2_GLOBALS.getFlag(72)) { + if (R2_GLOBALS._player._characterScene[1] == 2450) { + _actor1.postInit(); + if (R2_GLOBALS.getFlag(61)) { + _actor1.setup(2008, 6, 1); + } else { + _actor1.setup(10, 6, 1); + } + _actor1.setPosition(Common::Point(106, 111)); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + } + } else { + _actor1.postInit(); + if (R2_GLOBALS.getFlag(61)) { + _actor1.setup(2008, 6, 1); + } else { + _actor1.setup(10, 6, 1); + } + _actor1.setPosition(Common::Point(106, 111)); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + + _actor3.postInit(); + _actor3.setup(2001, 7, 1); + _actor3.setPosition(Common::Point(34, 153)); + _actor3.setDetails(2001, 40, -1, -1, 1, NULL); + + _exit1._enabled = false; + } + } + R2_GLOBALS._player.enableControl(); + if (!R2_GLOBALS.getFlag(72)) { + R2_GLOBALS._player._canWalk = false; + } + break; + default: + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS.getFlag(61)) { + R2_GLOBALS._player.setup(2008, 3, 1); + } else { + R2_GLOBALS._player.setup(10, 3, 1); + } + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + R2_GLOBALS._player.setPosition(Common::Point(100, 130)); + R2_GLOBALS._player.enableControl(); + break; + } + _item2.setDetails(Rect(174, 4, 199, 123), 2430, 30, 31, 32, 1, NULL); + _item3.setDetails(Rect(67, 73, 207, 121), 2430, 36, -1, 38, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); +} + +void Scene2450::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene2450::signal() { + switch (_sceneMode) { + case 10: + g_globals->_sceneManager.changeScene(2000); + break; + case 20: + if (R2_GLOBALS._v565AE == 3) { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._v565AE = 4; + _sceneMode = 2454; + setAction(&_sequenceManager, this, 2454, &_actor3, NULL); + } else { + R2_GLOBALS._player.enableControl(CURSOR_TALK); + if (R2_GLOBALS._v565AE < 4) + R2_GLOBALS._player._canWalk = false; + } + break; + case 30: + R2_GLOBALS._player.disableControl(); + _sceneMode = 2455; + setAction(&_sequenceManager, this, 2455, &_actor1, NULL); + break; + case 31: + R2_GLOBALS.setFlag(61); + g_globals->_sceneManager.changeScene(2435); + break; + case 2451: + R2_GLOBALS._player.enableControl(); + break; + case 2452: + R2_GLOBALS.setFlag(61); + _actor2.remove(); + R2_GLOBALS._player.enableControl(); + if (!R2_GLOBALS.getFlag(72)) { + R2_GLOBALS._player.setStrip(6); + R2_GLOBALS._player._canWalk = false; + } + break; + case 2453: + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(700, this); + break; + case 2454: + _exit1._enabled = true; + R2_GLOBALS.setFlag(72); + _actor3.remove(); + if (R2_GLOBALS.getFlag(61)) { + g_globals->_sceneManager.changeScene(2435); + } else { + _sceneMode = 31; + if (R2_GLOBALS._player._characterIndex == 1) { + setAction(&_sequenceManager, this, 2452, &R2_GLOBALS._player, NULL); + } else { + setAction(&_sequenceManager, this, 2452, &_actor1, &_actor2, NULL); + } + } + break; + case 2455: + R2_GLOBALS._player._oldCharacterScene[2] = 2450; + R2_GLOBALS._player._characterScene[2] = 2000; + R2_GLOBALS._v56605[2] = 3; + _actor1.remove(); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + default: + _actor1.postInit(); + _actor1.setDetails(9002, 0, 4, 3, 2, NULL); + _actor3.postInit(); + _actor3.setDetails(2001, 40, -1, -1, 2, NULL); + _sceneMode = 2453; + setAction(&_sequenceManager, this, 2453, &_actor3, &_actor1, NULL); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index fa7a641114..aba5e2ab68 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -298,6 +298,39 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene2450 : public SceneExt { + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SpeakerQuinn2450 _quinnSpeaker; + SpeakerSeeker2450 _seekerSpeaker; + SpeakerCaretaker2450 _caretakerSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + SceneActor _actor1; + Actor2 _actor2; + Actor3 _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 4fabc3643b..29a564e672 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -592,6 +592,96 @@ void SpeakerPharisha2435::proc15() { } } +/*--------------------------------------------------------------------------*/ + +SpeakerQuinn2450::SpeakerQuinn2450() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +void SpeakerQuinn2450::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + if (R2_GLOBALS.getFlag(61)) + _object1.setup(2020, 3, 1); + else + _object1.setup(2020, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerSeeker2450::SpeakerSeeker2450() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker2450::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4099, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerCaretaker2450::SpeakerCaretaker2450() { + _speakerName = "CARETAKER"; + _color1 = 43; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index e788fb7f9c..1a7f9510be 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -152,6 +152,29 @@ public: virtual Common::String getClassName() { return "SpeakerPharisha2435"; } virtual void proc15(); }; + +class SpeakerQuinn2450 : public VisualSpeaker { +public: + SpeakerQuinn2450(); + + virtual Common::String getClassName() { return "SpeakerQuinn2450"; } + virtual void proc15(); +}; + +class SpeakerSeeker2450 : public VisualSpeaker { +public: + SpeakerSeeker2450(); + + virtual Common::String getClassName() { return "SpeakerSeeker2450"; } + virtual void proc15(); +}; + +class SpeakerCaretaker2450 : public VisualSpeaker { +public: + SpeakerCaretaker2450(); + + virtual Common::String getClassName() { return "SpeakerCaretaker2450"; } +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 518d4cd429924f145626401c194f42fd76783c03 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 11 Dec 2011 17:46:58 +1100 Subject: TSAGE: Changed the Player characterIndex int field to be a proper enum --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 6 +++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 6 ++++-- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 54a15f3d98..ddb4eae9c4 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -218,11 +218,11 @@ void CharacterDialog::show() { // Figure out the new selected character if (btn == &dlg->_btnQuinn) - R2_GLOBALS._player._characterIndex = 1; + R2_GLOBALS._player._characterIndex = R2_QUINN; else if (btn == &dlg->_btnSeeker) - R2_GLOBALS._player._characterIndex = 2; + R2_GLOBALS._player._characterIndex = R2_SEEKER; else if (btn == &dlg->_btnMiranda) - R2_GLOBALS._player._characterIndex = 3; + R2_GLOBALS._player._characterIndex = R2_MIRANDA; // Remove the dialog dlg->remove(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 5ca178596f..88dfe11298 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1539,6 +1539,8 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { scene->_field412 = 211; else scene->_field412 = 438; + + scene->_stripManager.start3(scene->_field412, scene, R2_GLOBALS._stripManager_lookupList); } return true; @@ -1594,7 +1596,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == -1) { R2_GLOBALS._sceneManager._previousScene = 1000; - R2_GLOBALS._player._characterIndex = 1; + R2_GLOBALS._player._characterIndex = R2_QUINN; } _stripManager.setColors(60, 255); @@ -2002,7 +2004,7 @@ void Scene300::signal() { break; case 20: - R2_GLOBALS._player._characterIndex = 1; + R2_GLOBALS._player._characterIndex = R2_QUINN; R2_GLOBALS._sceneManager.changeScene(1500); break; diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index c83d605d45..4d8f7aa9d8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1393,7 +1393,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { loadScene(2425); SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) { - R2_GLOBALS._player._characterIndex = 2; + R2_GLOBALS._player._characterIndex = R2_SEEKER; R2_GLOBALS._sceneManager._previousScene = 2000; } -- cgit v1.2.3 From 887d56d9ca9cc488c8793321da0685bee5f2206a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 11 Dec 2011 18:00:39 +1100 Subject: TSAGE: add missing hotspot code for Miranda in R2R Scene 300 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 34 ++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 88dfe11298..9e87ebbe0b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1528,7 +1528,39 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_TALK: if (R2_GLOBALS._player._characterIndex == 1) { - warning("TODO: talk sequence"); + R2_GLOBALS._player.disableControl(); + + if (!R2_GLOBALS.getFlag(44)) { + if (R2_GLOBALS.getFlag(40)) + scene->_field412 = 119; + else if (R2_GLOBALS.getFlag(38)) + scene->_field412 = 101; + else { + R2_GLOBALS._sound1.play(69); + scene->_field412 = 100; + } + + scene->_sceneMode = 309; + scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); + } else if (!R2_GLOBALS.getFlag(55)) { + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + scene->_sceneMode = 10; + scene->_stripManager.start3(scene->_field412, scene, R2_GLOBALS._stripManager_lookupList); + } else { + scene->_sceneMode = 16; + + if (!R2_GLOBALS.getFlag(57)) { + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + scene->_stripManager.start3(434, scene, R2_GLOBALS._stripManager_lookupList); + } else if (R2_GLOBALS._player._characterScene[R2_MIRANDA] != 500) { + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + scene->_stripManager.start3(407, scene, R2_GLOBALS._stripManager_lookupList); + } else { + scene->_field412 = 433; + scene->_sceneMode = 309; + scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); + } + } } else { scene->_sceneMode = 10; R2_GLOBALS._events.setCursor(CURSOR_ARROW); -- cgit v1.2.3 From ae98c3dc18295eeee0a4b3f6b5b2fbed2e68b60f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 11 Dec 2011 18:12:56 +0100 Subject: TSAGE: R2R - Implement scene 2455 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 181 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 30 ++++ 3 files changed, 213 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 658937f0a5..cb85a9d10f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -122,6 +122,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Another bedroom return new Scene2450(); case 2455: + // Mze: Inside crevasse + return new Scene2455(); case 2500: case 2525: case 2530: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 4d8f7aa9d8..aeee3cdedf 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2218,5 +2218,186 @@ void Scene2450::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2455 - Maze: Inside crevasse + * + *--------------------------------------------------------------------------*/ + +bool Scene2455::Actor1::startAction(CursorType action, Event &event) { + Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; + + if (action == R2_29) { + if ((R2_INVENTORY.getObjectScene(49) == 2455) || (R2_INVENTORY.getObjectScene(50) == 2455)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2458; + scene->_actor2._lookLineNum = 9; + scene->_actor1.remove(); + scene->_actor3.postInit(); + scene->_actor3.setDetails(2455, 16, 1, -1, 2, NULL); + scene->setAction(&scene->_sequenceManager, scene, 2458, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor3, NULL); + return true; + } + } + + return SceneActor::startAction(action, event); +} + +bool Scene2455::Actor2::startAction(CursorType action, Event &event) { + Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case R2_49: + if (R2_INVENTORY.getObjectScene(50) != 2455) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + scene->_actor1.setup(2456, 3, 3); + scene->_actor1.setPosition(Common::Point(162, 165)); + scene->_actor1.setDetails(2455, 15, 1, -1, 2, NULL); + scene->_sceneMode = 11; + scene->setAction(&scene->_sequenceManager, scene, 2457, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; + } + break; + case R2_50: + if (R2_INVENTORY.getObjectScene(49) != 2455) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + scene->_actor1.setup(2456, 3, 3); + scene->_actor1.setPosition(Common::Point(162, 165)); + scene->_actor1.setDetails(2455, 15, 1, -1, 2, NULL); + scene->_sceneMode = 12; + scene->setAction(&scene->_sequenceManager, scene, 2457, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; + } + break; + default: + break; + } + + return SceneActor::startAction(action, event); +} + +bool Scene2455::Actor3::startAction(CursorType action, Event &event) { + Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2459; + scene->setAction(&scene->_sequenceManager, scene, 2459, &R2_GLOBALS._player, &scene->_actor3, NULL); + return true; + } + + return SceneActor::startAction(action, event); +} + +void Scene2455::Exit1::changeScene() { + Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2461; + scene->setAction(&scene->_sequenceManager, scene, 2461, &R2_GLOBALS._player, NULL); +} + +void Scene2455::postInit(SceneObjectList *OwnerList) { + loadScene(2455); + SceneExt::postInit(); + + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_INVENTORY.setObjectScene(29, 2); + R2_INVENTORY.setObjectScene(50, 2); + } + + R2_GLOBALS._sound1.play(200); + _exit1.setDetails(Rect(0, 0, 320, 15), EXITCURSOR_N, 2425); + + if (R2_INVENTORY.getObjectScene(29) == 2455) { + if ((R2_INVENTORY.getObjectScene(50) == 2455) || (R2_INVENTORY.getObjectScene(49) == 2455)) { + _actor1.postInit(); + _actor1.setup(2456, 3, 3); + _actor1.setPosition(Common::Point(162, 165)); + _actor1.setDetails(2455, 15, 1, -1, 1, NULL); + } + } else { + _actor3.postInit(); + _actor3.setup(2456, 3, 1); + _actor3.setPosition(Common::Point(176, 165)); + _actor3.setDetails(2455, 16, 1, -1, 1, NULL); + } + + _actor2.postInit(); + if (R2_INVENTORY.getObjectScene(29) == 2455) { + _actor2.setup(2456, 3, 2); + _actor2.setDetails(2455, 9, 1, -1, 1, NULL); + } else { + if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455)) + _actor2.setup(2455, 1, 1); + else + _actor2.setup(2456, 1, 1); + _actor2.setDetails(2455, 3, 1, -1, 1, NULL); + } + _actor2.setPosition(Common::Point(162, 165)); + _actor2.fixPriority(20); + if (R2_INVENTORY.getObjectScene(29) != 2455) + _actor2.animate(ANIM_MODE_2, NULL); + + R2_GLOBALS._player.postInit(); + _item1.setDetails(Rect(0, 0, 320, 200), 2455, 0, 1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2425) { + _sceneMode = 2460; + setAction(&_sequenceManager, this, 2460, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player.setup(2455, 2, 9); + R2_GLOBALS._player.setPosition(Common::Point(118, 165)); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2455; +} + +void Scene2455::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene2455::signal() { + switch (_sceneMode) { + case 10: + // No break on purpose + case 2461: + g_globals->_sceneManager.changeScene(2425); + break; + case 11: + R2_INVENTORY.setObjectScene(49, 2455); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + case 12: + R2_INVENTORY.setObjectScene(50, 2455); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + case 2458: + R2_INVENTORY.setObjectScene(29, 2455); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + case 2459: + _actor3.remove(); + R2_INVENTORY.setObjectScene(31, 2); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + default: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + } +} + + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index aba5e2ab68..81e8f58ace 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -331,6 +331,36 @@ public: virtual void signal(); }; +class Scene2455 : public SceneExt { + class Actor1 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + Actor1 _actor1; + Actor2 _actor2; + Actor3 _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From cbe97db8f076e5a09b7f57791ddd44bfaae616ef Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 11 Dec 2011 23:34:27 +0100 Subject: TSAGE: R2R - Implement scene 2500 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 4 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 104 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 22 +++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 53 +++++++++++- engines/tsage/ringworld2/ringworld2_speakers.h | 28 ++++++ 5 files changed, 209 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index cb85a9d10f..dca3dcead5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -122,9 +122,11 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Another bedroom return new Scene2450(); case 2455: - // Mze: Inside crevasse + // Maze: Inside crevasse return new Scene2455(); case 2500: + // Maze: Large Cave + return new Scene2500(); case 2525: case 2530: case 2535: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index aeee3cdedf..18fd6e6bde 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2398,6 +2398,110 @@ void Scene2455::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2500 - Maze: Large Cave + * + *--------------------------------------------------------------------------*/ + +void Scene2500::Exit1::changeScene() { + Scene2500 *scene = (Scene2500 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(20, 105); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2500::postInit(SceneObjectList *OwnerList) { + loadScene(2500); + SceneExt::postInit(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 3100) + R2_GLOBALS._v58CE2 = 0; + + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._sceneManager._previousScene = 2000; + + _exit1.setDetails(Rect(30, 50, 85, 105), EXITCURSOR_W, 2000); + _exit1.setDest(Common::Point(84, 104)); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(11); + R2_GLOBALS._player._moveDiff = Common::Point(2, 1); + } else { + R2_GLOBALS._player.setVisage(21); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(21, 3, 1); + _actor1.setDetails(9002, 1, -1, -1, 1, NULL); + } else { + _actor1.setup(2008, 3, 1); + _actor1.changeZoom(50); + _actor1.setDetails(9001, 0, -1, -1, 1, NULL); + } + _actor1.setPosition(Common::Point(141, 94)); + } + + _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + _sceneMode = 10; + R2_GLOBALS._player.setPosition(Common::Point(20, 105)); + Common::Point pt(95, 105); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 3100) { + _sceneMode = 2500; + _actor2.postInit(); + _actor3.postInit(); + setAction(&_sequenceManager, this, 2500, &R2_GLOBALS._player, &_actor2, &_actor3, NULL); + } else { + R2_GLOBALS._player.setPosition(Common::Point(160, 150)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2500; +} + +void Scene2500::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 20: + R2_GLOBALS._player.disableControl(); + _sceneMode = 2501; + setAction(&_sequenceManager, this, 2501, &R2_GLOBALS._player, &_actor2, &_actor3, NULL); + break; + case 2500: + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(900, this); + break; + case 2501: + g_globals->_sceneManager.changeScene(1000); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 81e8f58ace..82898a45dd 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -361,6 +361,28 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene2500 : public SceneExt { + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SpeakerQuinn2500 _quinnSpeaker; + SpeakerSeeker2500 _seekerSpeaker; + SpeakerMiranda2500 _mirandaSpeaker; + SpeakerWebbster2500 _webbsterSpeaker; + NamedHotspot _item1; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 29a564e672..7f39e3d630 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -682,6 +682,57 @@ SpeakerCaretaker2450::SpeakerCaretaker2450() { _numFrames = 0; } -} // End of namespace Ringworld2 +/*--------------------------------------------------------------------------*/ + +SpeakerQuinn2500::SpeakerQuinn2500() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +SpeakerSeeker2500::SpeakerSeeker2500() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +SpeakerMiranda2500::SpeakerMiranda2500() { + // Not in uppercase in the original + _speakerName = "Miranda"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +SpeakerWebbster2500::SpeakerWebbster2500() { + // Not in uppercase in the original + _speakerName = "Webbster"; + _color1 = 27; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +} // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 1a7f9510be..e6a805f31b 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -175,6 +175,34 @@ public: virtual Common::String getClassName() { return "SpeakerCaretaker2450"; } }; + +class SpeakerQuinn2500 : public VisualSpeaker { +public: + SpeakerQuinn2500(); + + virtual Common::String getClassName() { return "SpeakerQuinn2500"; } +}; + +class SpeakerSeeker2500 : public VisualSpeaker { +public: + SpeakerSeeker2500(); + + virtual Common::String getClassName() { return "SpeakerSeeker2500"; } +}; + +class SpeakerMiranda2500 : public VisualSpeaker { +public: + SpeakerMiranda2500(); + + virtual Common::String getClassName() { return "SpeakerMiranda2500"; } +}; + +class SpeakerWebbster2500 : public VisualSpeaker { +public: + SpeakerWebbster2500(); + + virtual Common::String getClassName() { return "SpeakerWebbster2500"; } +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 58c7a8dcb847f3ee03b704d3dd6bfc80018cbece Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 12 Dec 2011 19:07:35 +1100 Subject: TSAGE: Added missing hotspot logic for R2R Scene 300 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 137 ++++++++++++++++++++---- engines/tsage/ringworld2/ringworld2_scenes0.h | 2 +- 2 files changed, 120 insertions(+), 19 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 9e87ebbe0b..b442ab8c46 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1527,17 +1527,18 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_TALK: - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + // Quinn talking to Miranda R2_GLOBALS._player.disableControl(); if (!R2_GLOBALS.getFlag(44)) { if (R2_GLOBALS.getFlag(40)) - scene->_field412 = 119; + scene->_stripId = 119; else if (R2_GLOBALS.getFlag(38)) - scene->_field412 = 101; + scene->_stripId = 101; else { R2_GLOBALS._sound1.play(69); - scene->_field412 = 100; + scene->_stripId = 100; } scene->_sceneMode = 309; @@ -1545,7 +1546,7 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { } else if (!R2_GLOBALS.getFlag(55)) { R2_GLOBALS._events.setCursor(CURSOR_ARROW); scene->_sceneMode = 10; - scene->_stripManager.start3(scene->_field412, scene, R2_GLOBALS._stripManager_lookupList); + scene->_stripManager.start3(scene->_stripId, scene, R2_GLOBALS._stripManager_lookupList); } else { scene->_sceneMode = 16; @@ -1556,23 +1557,24 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { R2_GLOBALS._events.setCursor(CURSOR_ARROW); scene->_stripManager.start3(407, scene, R2_GLOBALS._stripManager_lookupList); } else { - scene->_field412 = 433; + scene->_stripId = 433; scene->_sceneMode = 309; scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); } } } else { + // Seeker talking to Miranda scene->_sceneMode = 10; R2_GLOBALS._events.setCursor(CURSOR_ARROW); if (!R2_GLOBALS.getFlag(44)) - scene->_field412 = 174 + R2_GLOBALS._randomSource.getRandomNumber(2); + scene->_stripId = 174 + R2_GLOBALS._randomSource.getRandomNumber(2); else if (!R2_GLOBALS.getFlag(55)) - scene->_field412 = 211; + scene->_stripId = 211; else - scene->_field412 = 438; + scene->_stripId = 438; - scene->_stripManager.start3(scene->_field412, scene, R2_GLOBALS._stripManager_lookupList); + scene->_stripManager.start3(scene->_stripId, scene, R2_GLOBALS._stripManager_lookupList); } return true; @@ -1585,7 +1587,7 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { SceneItem::display2(300, 55); else { R2_GLOBALS._player.disableControl(); - scene->_field412 = R2_GLOBALS.getFlag(4) ? 121 : 120; + scene->_stripId = R2_GLOBALS.getFlag(4) ? 121 : 120; scene->_sceneMode = 309; scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); } @@ -1599,24 +1601,123 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { } bool Scene300::Seeker::startAction(CursorType action, Event &event) { - return false; + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_TALK: + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(44)) { + if (!R2_GLOBALS.getFlag(38)) { + R2_GLOBALS._sound1.play(69); + scene->_stripId = 181; + scene->_sceneMode = 310; + scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); + } else { + scene->_stripId = R2_GLOBALS.getFlag(40) ? 170 : 150; + scene->_sceneMode = 310; + scene->setAction(&scene->_sequenceManager1, scene, 309, &R2_GLOBALS._player, NULL); + } + } else { + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + if (!R2_GLOBALS.getFlag(55)) { + scene->_sceneMode = 10; + scene->_stripManager.start3(205, scene, R2_GLOBALS._stripManager_lookupList); + } else { + scene->_sceneMode = 16; + scene->_stripManager.start3(R2_GLOBALS.getFlag(57) ? 407 : 401, scene, R2_GLOBALS._stripManager_lookupList); + } + } + } else { + scene->_sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + + if (!R2_GLOBALS.getFlag(44)) + scene->_stripId = 122 + R2_GLOBALS._randomSource.getRandomNumber(2); + else if (!R2_GLOBALS.getFlag(55)) + scene->_stripId = 209; + else + scene->_stripId = 440; + + scene->_stripManager.start3(scene->_stripId, scene, R2_GLOBALS._stripManager_lookupList); + } + return true; + + case R2_OPTO_DISK: + if (R2_GLOBALS.getFlag(13)) { + SceneItem::display2(300, 53); + } else { + R2_GLOBALS._player.disableControl(); + scene->_stripId = 171; + } + + scene->_sceneMode = 310; + scene->setAction(&scene->_sequenceManager1, scene, 310, &R2_GLOBALS._player, NULL); + return true; + + case R2_2: + if (!R2_GLOBALS.getFlag(2) || !R2_GLOBALS.getFlag(3) || (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 1)) + break; + + R2_GLOBALS._player.disableControl(); + scene->_stripId = R2_GLOBALS.getFlag(4) ? 173 : 172; + scene->_sceneMode = 310; + scene->setAction(&scene->_sequenceManager1, scene, 310, &R2_GLOBALS._player, NULL); + return true; + + default: + break; + } + + return SceneActor::startAction(action, event); } bool Scene300::Quinn::startAction(CursorType action, Event &event) { - return false; + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_TALK: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + scene->_sceneMode = 10; + + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) { + if (R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500) + scene->_stripId = 442; + else if (!R2_GLOBALS.getFlag(44)) + scene->_stripId = 177 + R2_GLOBALS._randomSource.getRandomNumber(2); + else if (!R2_GLOBALS.getFlag(55)) + scene->_stripId = 208; + else + scene->_stripId = 441; + } else if (R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500) { + scene->_stripId = 442; + } else if (R2_GLOBALS.getFlag(44)) { + scene->_stripId = R2_GLOBALS.getFlag(55) ? 441 : 208; + } else { + scene->_stripId = 125 + R2_GLOBALS._randomSource.getRandomNumber(2); + } + + scene->_stripManager.start3(scene->_stripId, scene, R2_GLOBALS._stripManager_lookupList); + return true; + + default: + return SceneActor::startAction(action, event); + } } /*--------------------------------------------------------------------------*/ Scene300::Scene300(): SceneExt() { - _field412 = 0; + _stripId = 0; _rotation = NULL; } void Scene300::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_stripId); SYNC_POINTER(_rotation); } @@ -1854,7 +1955,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { case 1100: R2_GLOBALS._player.setVisage(10); R2_GLOBALS._player.setPosition(Common::Point(160, 95)); - _field412 = 400; + _stripId = 400; _sceneMode = 309; setAction(&_sequenceManager1, this, 309, &R2_GLOBALS._player, NULL); break; @@ -1953,7 +2054,7 @@ void Scene300::signal() { } _stripManager._field2E8 = 0; - switch (_field412) { + switch (_stripId) { case 400: R2_GLOBALS._player.disableControl(); _sceneMode = 15; @@ -2066,7 +2167,7 @@ void Scene300::signal() { signal309(); R2_GLOBALS._events.setCursor(CURSOR_ARROW); _sceneMode = 10; - _stripManager.start3(_field412, this, R2_GLOBALS._stripManager_lookupList); + _stripManager.start3(_stripId, this, R2_GLOBALS._stripManager_lookupList); break; case 313: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 4d2c454c4e..834b91c01c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -267,7 +267,7 @@ public: Action3 _action3; Action4 _action4; PaletteRotation *_rotation; - int _field412; + int _stripId; Scene300(); void signal309(); -- cgit v1.2.3 From 18cfbc6c2da9a55ac4ead063348e264f50924075 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 12 Dec 2011 22:07:38 +1100 Subject: TSAGE: Bugfixes and extra commenting for R2R conversation display --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 ++-- engines/tsage/ringworld2/ringworld2_speakers.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index b442ab8c46..214853ce86 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -774,7 +774,7 @@ void Scene125::signal() { case 12: if (_soundCount > 0) --_soundCount; - if (!_soundCount || (R2_GLOBALS._speechSubtitles & 2)) { + if (!_soundCount || (R2_GLOBALS._speechSubtitles & SPEECH_VOICE)) { _soundIndex = 0; R2_GLOBALS._playStream.stop(); } else { @@ -1148,7 +1148,7 @@ void Scene125::setDetails(int resNum, int lineNum) { R2_GLOBALS._sceneObjects->draw(); - if ((_soundCount > 0) && (R2_GLOBALS._speechSubtitles & 2)) { + if ((_soundCount > 0) && (R2_GLOBALS._speechSubtitles & SPEECH_VOICE)) { _sceneMode = 12; R2_GLOBALS._playStream.play(_soundIndexes[_soundIndex], this); } diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 7f39e3d630..8c8bd7171a 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -110,7 +110,7 @@ void VisualSpeaker::setText(const Common::String &msg) { Common::String s = msg; if (s.hasPrefix("!")) { s.deleteChar(0); - _soundId = atoi(msg.c_str()); + _soundId = atoi(s.c_str()); while (!s.empty() && (*s.c_str() >= '0' && *s.c_str() <= '9')) s.deleteChar(0); @@ -123,7 +123,7 @@ void VisualSpeaker::setText(const Common::String &msg) { _sceneText._width = _textWidth; _sceneText._fontNumber = _fontNumber; _sceneText._textMode = _textMode; - _sceneText.setup(msg); + _sceneText.setup(s); //_sceneText.clone(); @@ -131,12 +131,12 @@ void VisualSpeaker::setText(const Common::String &msg) { _sceneText.setPriority(0x100); // If subtitles are turned off, don't show the text - if (!(R2_GLOBALS._speechSubtitles & 1)) { + if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { _sceneText.hide(); } // Figure out the text delay if subtitles are turned on, or there's no speech resource specified - if ((R2_GLOBALS._speechSubtitles & 1) || !_soundId) { + if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) { const char *msgP = s.c_str(); int numWords = 0; while (*msgP != '\0') { @@ -159,10 +159,10 @@ void VisualSpeaker::setText(const Common::String &msg) { if (_fieldF6) { - if ((R2_GLOBALS._speechSubtitles & 1) || !_soundId) + if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) _sceneText.hide(); } else { - if ((R2_GLOBALS._speechSubtitles & 2) && _soundId) { + if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && _soundId) { if (!R2_GLOBALS._playStream.play(_soundId, NULL)) _sceneText.show(); } -- cgit v1.2.3 From d5b69f0c0218bd83f8e246541e2094b807435852 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 12 Dec 2011 23:47:46 +0100 Subject: TSAGE: R2R - Implement scene 2525 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 140 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 31 ++++++ 3 files changed, 173 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index dca3dcead5..8f85bbdea3 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -128,6 +128,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Large Cave return new Scene2500(); case 2525: + // Maze: Furnace room + return new Scene2525(); case 2530: case 2535: case 2600: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 18fd6e6bde..d15763fb29 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2503,5 +2503,145 @@ void Scene2500::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2525 - Furnace room + * + *--------------------------------------------------------------------------*/ +bool Scene2525::Item5::startAction(CursorType action, Event &event) { + Scene2525 *scene = (Scene2525 *)R2_GLOBALS._sceneManager._scene; + + if ((action == R2_20) && (!R2_GLOBALS.getFlag(74))) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2526; + scene->setAction(&scene->_sequenceManager, scene, 2526, &R2_GLOBALS._player, NULL); + return true; + } + + return SceneItem::startAction(action, event); +} + +bool Scene2525::Actor3::startAction(CursorType action, Event &event) { + Scene2525 *scene = (Scene2525 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2525; + scene->setAction(&scene->_sequenceManager, scene, 2525, &R2_GLOBALS._player, &scene->_actor3, NULL); + } else { + SceneItem::display(2530, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + return true; +} + +void Scene2525::Exit1::changeScene() { + Scene2525 *scene = (Scene2525 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(R2_GLOBALS._player._position.x, 200); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2525::postInit(SceneObjectList *OwnerList) { + loadScene(2525); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(200); + R2_GLOBALS._sound2.play(207); + + _exit1.setDetails(Rect(86, 155, 228, 168), EXITCURSOR_S, 2000); + + if (R2_INVENTORY.getObjectScene(29) == 2525) { + _actor3.postInit(); + _actor3.setup(2435, 1, 2); + _actor3.setPosition(Common::Point(78, 155)); + _actor3.fixPriority(155); + _actor3.setDetails(2525, 27, -1, -1, 1, NULL); + } + + _actor2.postInit(); + _actor2.setup(2525, 1, 1); + _actor2.setPosition(Common::Point(183, 114)); + _actor2.setDetails(2525, 15, -1, -1, 1, NULL); + _actor2.animate(ANIM_MODE_2, NULL); + _actor2._numFrames = 3; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(2008, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setup(20, 3, 1); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(20, 5, 1); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor1.setup(2008, 5, 1); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor1.setPosition(Common::Point(209, 162)); + + R2_GLOBALS._walkRegions.enableRegion(4); + } + + _item5.setDetails(Rect(125, 73, 140, 86), 2525, 6, -1, -1, 1, NULL); + _item3.setDetails(Rect(137, 11, 163, 72), 2525, 12, -1, -1, 1, NULL); + _item4.setDetails(Rect(204, 20, 234, 78), 2525, 12, -1, -1, 1, NULL); + _item2.setDetails(Rect(102, 62, 230, 134), 2525, 0, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2525, 24, -1, -1, 1, NULL); + + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2525; + R2_GLOBALS._player.setPosition(Common::Point(160, 200)); + Common::Point pt(160, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(160, 150)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } +} + +void Scene2525::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._sound2.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene2525::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 2525: + _actor3.remove(); + R2_INVENTORY.setObjectScene(29, 2); + R2_GLOBALS._player.enableControl(); + break; + case 2526: + R2_GLOBALS.setFlag(74); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 82898a45dd..b906921842 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -383,6 +383,37 @@ public: virtual void signal(); }; +class Scene2525 : public SceneExt { + class Item5 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor3 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + Item5 _item5; + SceneActor _actor1; + SceneActor _actor2; + Actor3 _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 8a9eaa58dfc163da4e1588dcf45faae5f1e62f15 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 13 Dec 2011 01:29:05 +0100 Subject: TSAGE: R2R - Implement scene 2530 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 157 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 30 +++++ 3 files changed, 189 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 8f85bbdea3..296da52da5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -131,6 +131,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Furnace room return new Scene2525(); case 2530: + // Maze: Well + return new Scene2530(); case 2535: case 2600: case 2700: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index d15763fb29..cbb6dbc42e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2643,5 +2643,162 @@ void Scene2525::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2530 - Maze: Well + * + *--------------------------------------------------------------------------*/ +bool Scene2530::Actor2::startAction(CursorType action, Event &event) { + Scene2530 *scene = (Scene2530 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2530; + scene->setAction(&scene->_sequenceManager, scene, 2530, &R2_GLOBALS._player, &scene->_actor2, NULL); + } else { + SceneItem::display(2530, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + + return true; +} + +bool Scene2530::Actor3::startAction(CursorType action, Event &event) { + Scene2530 *scene = (Scene2530 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS.getFlag(73)) + SceneItem::display(2530, 35, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2532; + scene->setAction(&scene->_sequenceManager, scene, 2532, &R2_GLOBALS._player, &scene->_actor3, NULL); + } + } else { + if (R2_GLOBALS.getFlag(73)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2533; + scene->setAction(&scene->_sequenceManager, scene, 2533, &R2_GLOBALS._player, &scene->_actor3, NULL); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2531; + scene->setAction(&scene->_sequenceManager, scene, 2531, &R2_GLOBALS._player, &scene->_actor3, NULL); + } + } + + return true; +} + +void Scene2530::Exit1::changeScene() { + Scene2530 *scene = (Scene2530 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(108, 200); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2530::postInit(SceneObjectList *OwnerList) { + loadScene(2530); + SceneExt::postInit(); + + _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); + _exit1.setDest(Common::Point(108, 160)); + + if (R2_INVENTORY.getObjectScene(33) == 2530) { + _actor2.postInit(); + _actor2.setup(2435, 1, 3); + _actor2.setPosition(Common::Point(299, 80)); + _actor2.fixPriority(80); + _actor2.setDetails(2530, 28, -1, -1, 1, NULL); + } + + _actor3.postInit(); + if (R2_GLOBALS.getFlag(73)) { + _actor3.setup(2531, 4, 2); + _actor3.setPosition(Common::Point(154, 130)); + } else { + _actor3.setup(2531, 4, 1); + _actor3.setPosition(Common::Point(173, 131)); + } + _actor3.setDetails(2530, 22, -1, -1, 1, NULL); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(2008); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + R2_GLOBALS._player.setPosition(Common::Point(100, 200)); + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(20, 5, 1); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor1.setup(2008, 5, 1); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor1.setPosition(Common::Point(20, 130)); + R2_GLOBALS._walkRegions.enableRegion(1); + } + + _item2.setDetails(Rect(108, 90, 135, 205), 2530, 22, -1, -1, 1, NULL); + _item5.setDetails(Rect(115, 112, 206, 130), 2530, 25, -1, 27, 1, NULL); + _item3.setDetails(Rect(256, 64, 311, 85), 2530, 31, -1, 33, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2530, 0, 1, -1, 1, NULL); + + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2530; + Common::Point pt(108, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(105, 145)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } +} + +void Scene2530::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 2530: + R2_INVENTORY.setObjectScene(33, 2); + _actor2.remove(); + break; + case 2531: + // No break on purpose + case 2532: + R2_GLOBALS.setFlag(73); + R2_GLOBALS._player.enableControl(); + break; + case 2533: + R2_GLOBALS.clearFlag(73); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index b906921842..bef1fc9ea8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -414,6 +414,36 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene2530 : public SceneExt { + class Actor2 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + SceneActor _actor1; + Actor2 _actor2; + Actor3 _actor3; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From d124e25cfe6b022c7030842493065fa91c616bd5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 13 Dec 2011 20:33:45 +1100 Subject: TSAGE: Bugfix to show R2R conversations in front of other on-screen objects --- engines/tsage/ringworld2/ringworld2_speakers.cpp | 9 +++++++-- engines/tsage/ringworld2/ringworld2_speakers.h | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 8c8bd7171a..cff7334090 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -128,7 +128,7 @@ void VisualSpeaker::setText(const Common::String &msg) { //_sceneText.clone(); _sceneText.setPosition(_textPos); - _sceneText.setPriority(0x100); + _sceneText.fixPriority(256); // If subtitles are turned off, don't show the text if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { @@ -148,7 +148,7 @@ void VisualSpeaker::setText(const Common::String &msg) { ++numWords; _numFrames = numWords * 30 + 120; - setFrame(_numFrames); + setDelay(_numFrames); } else { _numFrames = 1; } @@ -185,6 +185,11 @@ void VisualSpeaker::setFrame(int numFrames) { _frameNumber = R2_GLOBALS._events.getFrameNumber(); } +void VisualSpeaker::setDelay(int delay) { + _delayAmount = delay; + _frameNumber = R2_GLOBALS._events.getFrameNumber(); +} + /*--------------------------------------------------------------------------*/ SpeakerMiranda300::SpeakerMiranda300(): VisualSpeaker() { diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index e6a805f31b..b8ad17886a 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -59,6 +59,8 @@ public: virtual void setText(const Common::String &msg); virtual void proc15() {} virtual void proc16(); + + void setDelay(int delay); }; class SpeakerMiranda300 : public VisualSpeaker { -- cgit v1.2.3 From a1dfacb4c9df35928372db4472dba117e72e2590 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 13 Dec 2011 20:49:42 +1100 Subject: TSAGE: Implement missing doorway code in R2R scene 300 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 20 +++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 7 ++++++- 2 files changed, 25 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 214853ce86..4a0443e798 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1707,6 +1707,25 @@ bool Scene300::Quinn::startAction(CursorType action, Event &event) { } } +bool Scene300::Doorway::startAction(CursorType action, Event &event) { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + if ((R2_GLOBALS._player._characterIndex == R2_QUINN) && + (!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 301; + scene->setAction(&scene->_sequenceManager1, scene, 301, &R2_GLOBALS._player, this, NULL); + } else { + SceneItem::display2(300, 45); + } + + return true; + } else { + return SceneActor::startAction(action, event); + } +} + /*--------------------------------------------------------------------------*/ Scene300::Scene300(): SceneExt() { @@ -1769,7 +1788,6 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _object4.postInit(); _object4.setup(300, 5, 1); _object4.setPosition(Common::Point(236, 48)); - _object4.animate(ANIM_MODE_2, NULL); _protocolDisplay.postInit(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 834b91c01c..be07a4064b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -240,6 +240,10 @@ class Scene300: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; + class Doorway: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; public: SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3, _sequenceManager4; ASoundExt _sound1; @@ -258,7 +262,8 @@ public: MirandaWorkstation _mirandaWorkstation1, _mirandaWorkstation2; SceneActor _object1, _object2, _object3, _object4, _protocolDisplay; SceneActor _object6, _object7, _object8, _object9; - SceneActor _teal, _soldier, _object12, _doorway; + SceneActor _teal, _soldier, _object12; + Doorway _doorway; Miranda _miranda; Seeker _seeker; Quinn _quinn; -- cgit v1.2.3 From a4f74ddf8a98a1a6c37ea415ab7d19f12cd8d3d5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 13 Dec 2011 21:46:24 +1100 Subject: TSAGE: Clarified some hotspot names in R2R Scene 100, and created derived Scene 150 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 4 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 149 +++++++++++++++++++----- engines/tsage/ringworld2/ringworld2_scenes0.h | 17 ++- 3 files changed, 136 insertions(+), 34 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 296da52da5..f86bab3a87 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -42,8 +42,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 100: return new Scene100(); // Computer console case 125: return new Scene125(); - // - case 150: + // Empty Bedroom + case 150: return new Scene150(); case 160: case 175: case 180: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 4a0443e798..661a52d601 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -94,11 +94,11 @@ bool Scene100::Door::startAction(CursorType action, Event &event) { if (_state) { SceneItem::display2(100, 26); _state = 0; - scene->_object10.setFrame(1); + scene->_doorDisplay.setFrame(1); } else { SceneItem::display2(100, 27); _state = 1; - scene->_object10.setFrame(2); + scene->_doorDisplay.setFrame(2); } return true; default: @@ -176,7 +176,7 @@ bool Scene100::StasisNegator::startAction(CursorType action, Event &event) { } } -bool Scene100::Object10::startAction(CursorType action, Event &event) { +bool Scene100::DoorDisplay::startAction(CursorType action, Event &event) { Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -242,34 +242,35 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _door.setPosition(Common::Point(160, 84)); _door.setDetails(100, 3, 4, 5, 1, NULL); - _object10.postInit(); - _object10.setup(100, 2, 1); - _object10.setDetails(100, -1, -1, -1, 1, NULL); + _doorDisplay.postInit(); + _doorDisplay.setup(100, 2, 1); + _doorDisplay.setPosition(Common::Point(202, 53)); + _doorDisplay.setDetails(100, -1, -1, -1, 1, NULL); _table.postInit(); _table.setup(100, 2, 3); _table.setPosition(Common::Point(175, 157)); _table.setDetails(100, 17, 18, 20, 1, NULL); - _object1.postInit(); - _object1.setup(100, 3, 1); - _object1.setPosition(Common::Point(89, 79)); - _object1.fixPriority(250); - _object1.animate(ANIM_MODE_2, NULL); - _object1._numFrames = 3; - - _object2.postInit(); - _object2.setup(100, 3, 1); - _object2.setPosition(Common::Point(89, 147)); - _object2.fixPriority(250); - _object2.animate(ANIM_MODE_7, 0, NULL); - _object2._numFrames = 3; - - _object6.postInit(); - _object6.setVisage(101); - _object6.setPosition(Common::Point(231, 126)); - _object6.fixPriority(10); - _object6.setDetails(100, 37, -1, 39, 1, NULL); + _bedLights1.postInit(); + _bedLights1.setup(100, 3, 1); + _bedLights1.setPosition(Common::Point(89, 79)); + _bedLights1.fixPriority(250); + _bedLights1.animate(ANIM_MODE_2, NULL); + _bedLights1._numFrames = 3; + + _bedLights2.postInit(); + _bedLights2.setup(100, 3, 1); + _bedLights2.setPosition(Common::Point(89, 147)); + _bedLights2.fixPriority(250); + _bedLights2.animate(ANIM_MODE_7, 0, NULL); + _bedLights2._numFrames = 3; + + _wardrobe.postInit(); + _wardrobe.setVisage(101); + _wardrobe.setPosition(Common::Point(231, 126)); + _wardrobe.fixPriority(10); + _wardrobe.setDetails(100, 37, -1, 39, 1, NULL); if (R2_INVENTORY.getObjectScene(R2_STEPPING_DISKS) == 100) { _steppingDisks.postInit(); @@ -296,7 +297,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _object5.postInit(); _object4.postInit(); _sceneMode = 104; - setAction(&_sequenceManager1, this, 104, &R2_GLOBALS._player, &_object6, &_object4, &_object5, NULL); + setAction(&_sequenceManager1, this, 104, &R2_GLOBALS._player, &_wardrobe, &_object4, &_object5, NULL); break; case 125: _sceneMode = 100; @@ -356,10 +357,10 @@ void Scene100::signal() { case 110: if (_door._state) { _door._state = 0; - _object10.setFrame(1); + _doorDisplay.setFrame(1); } else { _door._state = 1; - _object10.setFrame(2); + _doorDisplay.setFrame(2); } R2_GLOBALS._player.enableControl(); break; @@ -1198,6 +1199,98 @@ Common::String Scene125::parseMessage(const Common::String &msg) { return Common::String(msgP); } +/*-------------------------------------------------------------------------- + * Scene 150 - Empty Bedroom + * + *--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------*/ + +void Scene150::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(100); + + _door.postInit(); + _door._state = 0; + _door.setVisage(100); + _door.setPosition(Common::Point(160, 84)); + _door.setDetails(100, 3, -1, -1, 1, NULL); + + _doorDisplay.postInit(); + _doorDisplay.setup(100, 2, 1); + _doorDisplay.setPosition(Common::Point(202, 53)); + _doorDisplay.setDetails(100, -1, -1, -1, 1, NULL); + + _emptyRoomTable.postInit(); + _emptyRoomTable.setVisage(100); + _emptyRoomTable.setStrip(4); + _emptyRoomTable.setFrame(1); + _emptyRoomTable.setPosition(Common::Point(175, 157)); + _emptyRoomTable.setDetails(150, 3, 4, 5, 1, NULL); + + _wardrobe.postInit(); + _wardrobe.setVisage(101); + _wardrobe.setPosition(Common::Point(231, 126)); + _wardrobe.fixPriority(10); + _wardrobe.setDetails(100, 37, -1, 39, 1, NULL); + + _terminal.setDetails(11, 100, 14, 15, 16); + _desk.setDetails(12, 100, 11, -1, 13); + _bed.setDetails(13, 100, 8, 9, 10); + _duct.setDetails(14, 100, 34, -1, 36); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 150, 0, 1, -1, 1, NULL); + _sceneMode = 100; + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 100: + setAction(&_sequenceManager1, this, 106, &R2_GLOBALS._player, NULL); + break; + case 200: + setAction(&_sequenceManager1, this, 100, &R2_GLOBALS._player, &_door, NULL); + break; + default: + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(180, 100)); + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene150::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene150::signal() { + switch (_sceneMode) { + case 101: + R2_GLOBALS._sceneManager.changeScene(200); + break; + case 105: + R2_GLOBALS._sceneManager.changeScene(125); + break; + case 110: + if (_door._state) { + _door._state = 0; + _doorDisplay.setFrame(1); + } else { + _door._state = 1; + _doorDisplay.setFrame(2); + } + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + /*-------------------------------------------------------------------------- * Scene 200 - Ship Corridor * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index be07a4064b..5b3123b37f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -67,7 +67,7 @@ class Scene100: public SceneExt { public: bool startAction(CursorType action, Event &event); }; - class Object10: public SceneActorExt { + class DoorDisplay: public SceneActorExt { public: bool startAction(CursorType action, Event &event); }; @@ -85,12 +85,12 @@ class Scene100: public SceneExt { public: NamedHotspot _background, _duct, _bed, _desk; Terminal _terminal; - SceneActor _object1, _object2, _object3, _object4, _object5; - SceneActor _object6; + SceneActor _bedLights1, _bedLights2, _object3, _object4, _object5; + SceneActor _wardrobe; Door _door; Table _table; StasisNegator _stasisNegator; - Object10 _object10; + DoorDisplay _doorDisplay; SteppingDisks _steppingDisks; SequenceManager _sequenceManager1, _sequenceManager2; @@ -157,6 +157,15 @@ public: Common::String parseMessage(const Common::String &msg); }; +class Scene150: public Scene100 { +public: + SceneActor _emptyRoomTable; +public: + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + class Scene200: public SceneExt { /* Objects */ class NorthDoor: public SceneActor { -- cgit v1.2.3 From a97a359ea3825f6fdef40a57e3c3b6e96b4afda3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 14 Dec 2011 00:58:10 +0100 Subject: TSAGE: R2R - Implement scene 2535 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 183 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 34 +++++ 3 files changed, 219 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f86bab3a87..e2e0c71a03 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -134,6 +134,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Well return new Scene2530(); case 2535: + // Maze: Tannery + return new Scene2535(); case 2600: case 2700: case 2750: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index cbb6dbc42e..4b4f9b8375 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2800,5 +2800,188 @@ void Scene2530::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2535 - Maze: Tannery + * + *--------------------------------------------------------------------------*/ + +bool Scene2535::Actor3::startAction(CursorType action, Event &event) { + Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.disableControl(); + if (R2_INVENTORY.getObjectScene(20) == 2535) { + scene->_sceneMode = 2536; + scene->setAction(&scene->_sequenceManager, scene, 2536, &R2_GLOBALS._player, &scene->_actor3, NULL); + } else { + scene->_sceneMode = 2537; + scene->setAction(&scene->_sequenceManager, scene, 2537, &R2_GLOBALS._player, &scene->_actor3, NULL); + } + } else { + SceneItem::display(2530, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + + return true; +} + +bool Scene2535::Actor4::startAction(CursorType action, Event &event) { + Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2535; + scene->setAction(&scene->_sequenceManager, scene, 2535, &R2_GLOBALS._player, &scene->_actor4, NULL); + } else { + SceneItem::display(2530, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + + return true; +} + +void Scene2535::Exit1::changeScene() { + Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + Common::Point pt(210, 200); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene2535::postInit(SceneObjectList *OwnerList) { + loadScene(2535); + SceneExt::postInit(); + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS.setFlag(73); + R2_INVENTORY.setObjectScene(20, 2535); + } + _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_S, 2000); + _exit1.setDest(Common::Point(210, 160)); + + if (R2_INVENTORY.getObjectScene(32) == 2535) { + _actor4.postInit(); + _actor4.setup(2435, 1, 4); + _actor4.setPosition(Common::Point(47, 74)); + _actor4.fixPriority(74); + _actor4.setDetails(2535, 21, -1, -1, 1, NULL); + } + + if (R2_INVENTORY.getObjectScene(20) == 2535) { + _actor3.postInit(); + _actor3.setup(2535, 3, 1); + _actor3.setPosition(Common::Point(203, 131)); + _actor3.setDetails(3, 20, -1, -1, 1, NULL); + R2_GLOBALS._walkRegions.enableRegion(6); + } + + if ((R2_INVENTORY.getObjectScene(20) == 0) && (R2_GLOBALS.getFlag(73))) { + _actor3.postInit(); + _actor3.setup(2536, 1, 2); + _actor3.setPosition(Common::Point(164, 133)); + _actor3.setDetails(3, 20, -1, -1, 1, NULL); + } + + if (R2_GLOBALS.getFlag(73)) { + _actor2.postInit(); + _actor2.setup(2536, 1, 1); + _actor2.setPosition(Common::Point(160, 130)); + _actor2.fixPriority(122); + _actor2.setDetails(2535, 37, -1, -1, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setVisage(2008); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } else { + R2_GLOBALS._player.setVisage(20); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } + R2_GLOBALS._player.setPosition(Common::Point(210, 200)); + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) { + _actor1.setup(20, 5, 1); + _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + } else { + _actor1.setup(2008, 5, 1); + _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + } + _actor1.setPosition(Common::Point(245, 115)); + R2_GLOBALS._walkRegions.enableRegion(2); + } + + _item2.setDetails(Rect(96, 3, 215, 33), 2535, 3, 6, 5, 1, NULL); + _item3.setDetails(Rect(4, 43, 40, 101), 2535, 6, 7, 8, 1, NULL); + _item4.setDetails(Rect(55, 13, 140, 89), 2535, 6, 7, 8, 1, NULL); + _item5.setDetails(Rect(144, 23, 216, 76), 2535, 6, 7, 8, 1, NULL); + _item6.setDetails(Rect(227, 8, 307, 99), 2535, 6, 7, 8, 1, NULL); + _item7.setDetails(Rect(116, 111, 201, 132), 2535, 18, 19, 20, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2535, 0, 1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2535; + Common::Point pt(210, 150); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(210, 150)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } +} + +void Scene2535::signal() { + switch (_sceneMode) { + case 11: + g_globals->_sceneManager.changeScene(2000); + break; + case 2535: + R2_INVENTORY.setObjectScene(32, 2); + _actor4.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 2536: + R2_INVENTORY.setObjectScene(20, 0); + R2_GLOBALS._walkRegions.disableRegion(6); + if (!R2_GLOBALS.getFlag(73)) { + _actor3.remove(); + R2_GLOBALS._player.enableControl(); + } else { + _sceneMode = 20; + _actor3.show(); + _actor3.setup(2536, 1, 2); + _actor3.setDetails(3, 20, -1, -1, 3, NULL); + _actor3.setPosition(Common::Point(164, 150)); + _actor3.fixPriority(130); + _actor3._moveDiff.y = 1; + Common::Point pt(164, 133); + PlayerMover *mover = new PlayerMover(); + _actor3.addMover(mover, &pt, this); + } + break; + case 2537: + _actor3.remove(); + R2_INVENTORY.setObjectScene(20, 1); + R2_GLOBALS._player.enableControl(); + break; + case 20: + // No break on purpose + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index bef1fc9ea8..e655d1e8a8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -444,6 +444,40 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene2535 : public SceneExt { + class Actor3 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + NamedHotspot _item6; + NamedHotspot _item7; + SceneActor _actor1; + SceneActor _actor2; + Actor3 _actor3; + Actor4 _actor4; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 907e9bc0cc4d1601c34d57edb3c4ce7233cb786e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 14 Dec 2011 21:36:37 +1100 Subject: TSAGE: Implemented R2R Scene 400 - Science Lab --- engines/tsage/ringworld2/ringworld2_logic.cpp | 9 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 242 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 46 +++++ engines/tsage/ringworld2/ringworld2_scenes2.cpp | 12 +- 4 files changed, 294 insertions(+), 15 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e2e0c71a03..c6ad92bd91 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -57,7 +57,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 300: return new Scene300(); case 325: + error("Missing scene %d from group 0", sceneNumber); case 400: + // Science Lab + return new Scene400(); case 500: case 525: case 600: @@ -576,11 +579,11 @@ void Ringworld2InvObjectList::reset() { // Set up default inventory setObjectScene(R2_OPTO_DISK, 800); - setObjectScene(R2_2, 400); + setObjectScene(R2_READER, 400); setObjectScene(R2_NEGATOR_GUN, 100); setObjectScene(R2_STEPPING_DISKS, 100); - setObjectScene(R2_5, 400); - setObjectScene(R2_6, 400); + setObjectScene(R2_ATTRACTOR_UNIT, 400); + setObjectScene(R2_SENSOR_PROBE, 400); setObjectScene(R2_7, 500); setObjectScene(R2_8, 700); setObjectScene(R2_9, 800); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 661a52d601..c3f97f1eef 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -64,7 +64,7 @@ void Scene50::process(Event &event) { event.handled = true; warning("TODO: incomplete Scene50::process()"); // CursorType _oldCursorId = _cursorId; - g_globals->_events.setCursor(R2_2); + g_globals->_events.setCursor(CURSOR_ARROW); // _cursorManager.sub_1D474(2, 0); // sub_5566A(1); // _cursorManager._fieldE = _oldCursorId; @@ -1204,8 +1204,6 @@ Common::String Scene125::parseMessage(const Common::String &msg) { * *--------------------------------------------------------------------------*/ -/*--------------------------------------------------------------------------*/ - void Scene150::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(100); @@ -1675,7 +1673,7 @@ bool Scene300::Miranda::startAction(CursorType action, Event &event) { SceneItem::display2(300, 54); return true; - case R2_2: + case R2_READER: if (!R2_GLOBALS.getFlag(2) || !R2_GLOBALS.getFlag(3) || (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 1)) SceneItem::display2(300, 55); else { @@ -1749,7 +1747,7 @@ bool Scene300::Seeker::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager1, scene, 310, &R2_GLOBALS._player, NULL); return true; - case R2_2: + case R2_READER: if (!R2_GLOBALS.getFlag(2) || !R2_GLOBALS.getFlag(3) || (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 1)) break; @@ -2325,7 +2323,7 @@ void Scene300::signal() { void Scene300::signal309() { if (R2_GLOBALS.getFlag(2)) - R2_GLOBALS._stripManager_lookupList[0] = (R2_INVENTORY.getObjectScene(R2_2) == 1) ? 3 : 2; + R2_GLOBALS._stripManager_lookupList[0] = (R2_INVENTORY.getObjectScene(R2_READER) == 1) ? 3 : 2; if (R2_GLOBALS.getFlag(4)) R2_GLOBALS._stripManager_lookupList[0] = 4; @@ -2362,6 +2360,238 @@ void Scene300::signal309() { R2_GLOBALS._stripManager_lookupList[4] = 3; } +/*-------------------------------------------------------------------------- + * Scene 400 - Science Lab + * + *--------------------------------------------------------------------------*/ + +bool Scene400::Terminal::startAction(CursorType action, Event &event) { + Scene400 *scene = (Scene400 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 402; + scene->setAction(&scene->_sequenceManager1, scene, 402, &R2_GLOBALS._player, this, NULL); + + return true; + } else { + return NamedHotspot::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +bool Scene400::Door::startAction(CursorType action, Event &event) { + Scene400 *scene = (Scene400 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 401; + scene->setAction(&scene->_sequenceManager1, scene, 401, &R2_GLOBALS._player, this, NULL); + + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene400::Reader::startAction(CursorType action, Event &event) { + Scene400 *scene = (Scene400 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 405; + scene->setAction(&scene->_sequenceManager1, scene, 405, &R2_GLOBALS._player, this, NULL); + + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene400::SensorProbe::startAction(CursorType action, Event &event) { + Scene400 *scene = (Scene400 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 404; + scene->setAction(&scene->_sequenceManager1, scene, 404, &R2_GLOBALS._player, this, NULL); + + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene400::AttractorUnit::startAction(CursorType action, Event &event) { + Scene400 *scene = (Scene400 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 406; + scene->setAction(&scene->_sequenceManager1, scene, 406, &R2_GLOBALS._player, this, NULL); + + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene400::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(400); + _sound1.play(20); + + _door.postInit(); + _door.setVisage(100); + _door.setPosition(Common::Point(123, 84)); + _door.setDetails(400, 24, -1, 26, 1, NULL); + + _consoleDisplay.postInit(); + _consoleDisplay.setup(400, 4, 1); + _consoleDisplay.setPosition(Common::Point(236, 92)); + _consoleDisplay.fixPriority(120); + _consoleDisplay.animate(ANIM_MODE_2, NULL); + _consoleDisplay._numFrames = 5; + + _testerDisplay.postInit(); + _testerDisplay.setup(400, 2, 1); + _testerDisplay.setPosition(Common::Point(198, 83)); + _testerDisplay.animate(ANIM_MODE_2, NULL); + _testerDisplay._numFrames = 20; + + if (R2_INVENTORY.getObjectScene(R2_READER) == 400) { + _reader.postInit(); + _reader.setup(400, 5, 2); + _reader.setPosition(Common::Point(301, 95)); + _reader.setDetails(400, 54, -1, 56, 1, NULL); + } + + if (R2_INVENTORY.getObjectScene(R2_SENSOR_PROBE) == 400) { + _sensorProbe.postInit(); + _sensorProbe.setup(400, 5, 1); + _sensorProbe.setPosition(Common::Point(251, 104)); + _sensorProbe.fixPriority(121); + _sensorProbe.setDetails(400, 57, -1, 59, 1, NULL); + } + + if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_UNIT) == 400) { + _attractorUnit.postInit(); + _attractorUnit.setup(400, 5, 3); + _attractorUnit.setPosition(Common::Point(265, 129)); + _attractorUnit.setDetails(400, 60, -1, 62, 1, NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _equipment1.setDetails(11, 400, 3, -1, -1); + _equipment2.setDetails(24, 400, 3, -1, -1); + _equipment3.setDetails(25, 400, 3, -1, -1); + _equipment4.setDetails(26, 400, 3, -1, -1); + _equipment5.setDetails(28, 400, 3, -1, -1); + _equipment6.setDetails(29, 400, 3, -1, -1); + _desk.setDetails(12, 400, 6, -1, -1); + _desk2.setDetails(27, 400, 6, -1, -1); + _terminal.setDetails(13, 400, 6, -1, 11); + _duct.setDetails(14, 400, 12, -1, -1); + _console.setDetails(15, 400, 15, -1, 17); + _equalizer.setDetails(Rect(284, 99, 308, 108), 400, 36, -1, 38, 1, NULL); + _transducer.setDetails(Rect(295, 67, 314, 79), 400, 39, -1, 41, 1, NULL); + _optimizer.setDetails(Rect(308, 106, 315, 113), 400, 42, -1, 44, 1, NULL); + _soundModule.setDetails(Rect(291, 118, 315, 131), 400, 45, -1, 47, 1, NULL); + _tester.setDetails(Rect(179, 62, 217, 92), 400, 30, -1, 32, 1, NULL); + _helmet.setDetails(Rect(181, 53, 197, 65), 400, 48, -1, 50, 1, NULL); + _nullifier.setDetails(Rect(201, 56, 212, 65), 400, 51, -1, 50, 1, NULL); + _shelves.setDetails(16, 400, 18, -1, 20); + _cabinet.setDetails(17, 400, 21, -1, -1); + _doorDisplay.setDetails(Rect(161, 43, 166, 52), 400, 27, -1, -1, 1, NULL); + _lights.setDetails(Rect(113, 3, 168, 14), 400, 33, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 400, 0, 1, -1, 1, NULL); + + _sceneMode = 400; + switch (R2_GLOBALS._sceneManager._previousScene) { + case 125: + setAction(&_sequenceManager1, this, 403, &R2_GLOBALS._player, NULL); + break; + case 200: + setAction(&_sequenceManager1, this, 400, &R2_GLOBALS._player, &_door, NULL); + break; + default: + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(180, 100)); + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene400::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene400::signal() { + switch (_sceneMode) { + case 400: + case 403: + R2_GLOBALS._player.enableControl(); + break; + case 401: + R2_GLOBALS._sceneManager.changeScene(200); + break; + case 402: + R2_GLOBALS._sceneManager.changeScene(125); + break; + case 404: + // Getting the sensor probe + R2_INVENTORY.setObjectScene(R2_SENSOR_PROBE, 1); + _sensorProbe.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 405: + // Getting the reader + R2_INVENTORY.setObjectScene(R2_READER, 1); + _reader.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 406: + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 1); + _attractorUnit.remove(); + R2_GLOBALS._player.enableControl(); + break; + default: + break; + } +} + +void Scene400::dispatch() { + switch (R2_GLOBALS._player.getRegionIndex() - 15) { + case 0: + case 11: + case 12: + R2_GLOBALS._player._shade = 2; + break; + case 9: + R2_GLOBALS._player._shade = 0; + break; + case 10: + R2_GLOBALS._player._shade = 1; + break; + case 13: + R2_GLOBALS._player._shade = 3; + break; + case 14: + R2_GLOBALS._player._shade = 4; + break; + default: + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 5b3123b37f..646d23286a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -292,6 +292,52 @@ public: virtual void signal(); }; +class Scene400: public SceneExt { + /* Items */ + class Terminal: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Objects */ + class Door: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Reader: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class SensorProbe: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class AttractorUnit: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + NamedHotspot _background, _equipment1, _equipment2, _equipment3; + NamedHotspot _equipment4, _equipment5, _equipment6; + NamedHotspot _desk, _desk2, _console; + NamedHotspot _duct, _shelves, _cabinet, _doorDisplay, _lights; + NamedHotspot _equalizer, _transducer, _optimizer, _soundModule, _tester; + NamedHotspot _helmet, _nullifier; + Terminal _terminal; + SceneActor _consoleDisplay, _testerDisplay; + Door _door; + Reader _reader; + SensorProbe _sensorProbe; + AttractorUnit _attractorUnit; + SequenceManager _sequenceManager1; + ASoundExt _sound1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 4b4f9b8375..d820784c45 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1047,7 +1047,7 @@ void Scene2000::synchronize(Serializer &s) { * *--------------------------------------------------------------------------*/ bool Scene2350::Actor2::startAction(CursorType action, Event &event) { - if (action != R2_6) + if (action != R2_SENSOR_PROBE) return(SceneActor::startAction(action, event)); return true; } @@ -1651,13 +1651,13 @@ bool Scene2435::Actor2::startAction(CursorType action, Event &event) { switch (action) { case R2_34: R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(R2_2); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); R2_GLOBALS.setFlag(82); scene->_stripManager.start(603, scene); return true; case R2_35: R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(R2_2); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); R2_GLOBALS.setFlag(82); scene->_stripManager.start(602, scene); R2_INVENTORY.setObjectScene(R2_35, 2000); @@ -1665,7 +1665,7 @@ bool Scene2435::Actor2::startAction(CursorType action, Event &event) { case CURSOR_TALK: R2_GLOBALS._player.disableControl(); scene->_sceneMode = 20; - R2_GLOBALS._events.setCursor(R2_2); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); if ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS.getFlag(82))) { scene->_stripManager.start(605, scene); return true; @@ -1765,7 +1765,7 @@ void Scene2435::signal() { g_globals->_sceneManager.changeScene(2000); break; case 20: - R2_GLOBALS._player.enableControl(R2_6); + R2_GLOBALS._player.enableControl(CURSOR_TALK); break; case 30: R2_GLOBALS._player._characterScene[1] = 2435; @@ -1787,7 +1787,7 @@ void Scene2435::signal() { case 2436: R2_GLOBALS._walkRegions.enableRegion(2); _sceneMode = 20; - R2_GLOBALS._events.setCursor(R2_2); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(709, this); default: R2_GLOBALS._player.enableControl(); -- cgit v1.2.3 From 991bcb680607853e79dcf2d5caa9cfe225d300a3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 14 Dec 2011 21:44:45 +1100 Subject: TSAGE: Return to R2R scene 175 - Empty Bedroom #2 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 8 ++++++-- engines/tsage/ringworld2/ringworld2_scenes0.h | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index c6ad92bd91..8abe44a766 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -42,10 +42,14 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 100: return new Scene100(); // Computer console case 125: return new Scene125(); - // Empty Bedroom - case 150: return new Scene150(); + case 150: + // Empty Bedroom #1 + return new Scene150(); case 160: + error("Missing scene %d from group 0", sceneNumber); case 175: + // Empty Bedroom #2 + return new Scene175(); case 180: error("Missing scene %d from group 0", sceneNumber); case 200: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 646d23286a..16133e81a0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -166,6 +166,9 @@ public: virtual void signal(); }; +class Scene175: public Scene150 { +}; + class Scene200: public SceneExt { /* Objects */ class NorthDoor: public SceneActor { -- cgit v1.2.3 From bd45f291d5f11ba4884b22d22341baf9e43e2b2b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 14 Dec 2011 21:48:38 +1100 Subject: TSAGE: Bugfix for using terminal in R2R scene 400 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index c3f97f1eef..61e3f8e00b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -2569,6 +2569,8 @@ void Scene400::signal() { } void Scene400::dispatch() { + SceneExt::dispatch(); + switch (R2_GLOBALS._player.getRegionIndex() - 15) { case 0: case 11: -- cgit v1.2.3 From 8d804a855307ba8d16854ab12a1d5a1a576a6475 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 14 Dec 2011 21:50:46 +1100 Subject: TSAGE: Clean up comments in R2R scene factory method --- engines/tsage/ringworld2/ringworld2_logic.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 8abe44a766..ef1cb76c91 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -36,12 +36,15 @@ namespace Ringworld2 { Scene *Ringworld2Game::createScene(int sceneNumber) { switch (sceneNumber) { /* Scene group #0 */ - // - case 50: return new Scene50(); - // Quinn's room - case 100: return new Scene100(); - // Computer console - case 125: return new Scene125(); + case 50: + // Waking up cutscene + return new Scene50(); + case 100: + // Quinn's room + return new Scene100(); + case 125: + // Computer console + return new Scene125(); case 150: // Empty Bedroom #1 return new Scene150(); -- cgit v1.2.3 From cf77cc922d8efdb95c9f0f8e20bc3773d0788206 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 14 Dec 2011 18:08:46 +0100 Subject: TSAGE: R2R - Implement scene 2600 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 ++ engines/tsage/ringworld2/ringworld2_scenes2.cpp | 41 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 12 ++++++++ 3 files changed, 55 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ef1cb76c91..b93e9c202a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -147,6 +147,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Maze: Tannery return new Scene2535(); case 2600: + // Maze: Exit + return new Scene2600(); case 2700: case 2750: case 2800: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index d820784c45..b2e7b46420 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2983,5 +2983,46 @@ void Scene2535::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 2600 - Maze: Exit + * + *--------------------------------------------------------------------------*/ +Scene2600::Scene2600(): SceneExt() { + _rotation = NULL; +} + +void Scene2600::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + SYNC_POINTER(_rotation); +} + +void Scene2600::postInit(SceneObjectList *OwnerList) { + loadScene(2600); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + R2_GLOBALS._sound1.fadeSound(214); + R2_GLOBALS._sound2.play(215); + _rotation = R2_GLOBALS._scenePalette.addRotation(176, 191, 1); + _rotation->setDelay(3); + _rotation->_countdown = 1; + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + _sceneMode = 2600; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2600, &R2_GLOBALS._player, NULL); +} + +void Scene2600::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._sound2.fadeOut2(NULL); +// _rotation->remove(); + SceneExt::remove(); +} + +void Scene2600::signal() { + if (_sceneMode == 2600) + g_globals->_sceneManager.changeScene(3800); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index e655d1e8a8..8684078860 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -478,6 +478,18 @@ public: virtual void signal(); }; +class Scene2600 : public SceneExt { +public: + SequenceManager _sequenceManager; + PaletteRotation *_rotation; + + Scene2600(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From d97d8b1d06e4ca0d6fdc5ff7a2c8f6f44d361585 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 15 Dec 2011 21:28:01 +1100 Subject: TSAGE: Implemented R2R Scene 250 - Lift --- engines/tsage/ringworld2/ringworld2_logic.cpp | 7 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 306 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 29 +++ 3 files changed, 340 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index b93e9c202a..b3cbd86412 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -56,12 +56,15 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 180: error("Missing scene %d from group 0", sceneNumber); case 200: - // Ship Corridor + // Deck #2 - By Lift return new Scene200(); case 205: - case 250: error("Missing scene %d from group 0", sceneNumber); + case 250: + // Lift + return new Scene250(); case 300: + // Bridge return new Scene300(); case 325: error("Missing scene %d from group 0", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 61e3f8e00b..1c25c896a6 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1443,6 +1443,312 @@ void Scene200::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 250 - Lift + * + *--------------------------------------------------------------------------*/ + +Scene250::Button::Button(): SceneActor() { + _floorNumber = _v2 = 0; +} + +void Scene250::Button::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_floorNumber); + s.syncAsSint16LE(_v2); +} + +bool Scene250::Button::startAction(CursorType action, Event &event) { + Scene250 *scene = (Scene250 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (scene->_field414) { + SceneItem::display2(250, 15); + } else { + switch (_floorNumber) { + case 1: + case 2: + case 5: + case 9: + scene->_sound1.play(14); + scene->changeFloor(_floorNumber); + break; + case 10: + // Current Floor + scene->_sound1.play(14); + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._sceneManager._previousScene); + break; + default: + SceneItem::display2(250, 16); + break; + } + } + return true; + + case CURSOR_LOOK: + switch (_floorNumber) { + case 1: + case 2: + case 5: + case 9: + SceneItem::display2(250, 12); + break; + case 10: + SceneItem::display2(250, 13); + break; + case 11: + SceneItem::display2(250, 14); + break; + default: + SceneItem::display2(250, 16); + break; + } + return true; + + default: + return SceneActor::startAction(action, event); + } +} + +void Scene250::Button::setFloor(int floorNumber) { + SceneActor::postInit(); + _floorNumber = floorNumber; + _v2 = 0; + + if (_floorNumber <= 9) { + SceneObject::setup(250, 1, 4); + + switch (_floorNumber) { + case 1: + case 2: + case 5: + case 9: + setFrame(6); + break; + default: + break; + } + + setPosition(Common::Point(111, (_floorNumber - 1) * 12 + 43)); + fixPriority(10); + setDetails(250, -1, -1, -1, 1, NULL); + } +} + +/*--------------------------------------------------------------------------*/ + +Scene250::Scene250(): SceneExt() { + _field412 = _field414 = _field416 = _field418 = _field41A = 0; +} + +void Scene250::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); + s.syncAsSint16LE(_field418); + s.syncAsSint16LE(_field41A); +} + +void Scene250::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(250); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + + _currentFloor.setFloor(10); + _currentFloor.setup(250, 1, 5); + _currentFloor.setDetails(250, 13, -1, -1, 1, NULL); + + _button1.setFloor(11); + _button1.setup(250, 1, 3); + _button1.setPosition(Common::Point(400, 100)); + _button1.setDetails(250, 14, -1, -1, 1, NULL); + _button1.fixPriority(190); + _button1.hide(); + + _floor1.setFloor(1); + _floor2.setFloor(2); + _floor3.setFloor(3); + _floor4.setFloor(4); + _floor5.setFloor(5); + _floor6.setFloor(6); + _floor7.setFloor(7); + _floor8.setFloor(8); + _floor9.setFloor(9); + + _item2.setDetails(Rect(0, 0, 73, SCREEN_HEIGHT), 250, 9, -1, 9, 1, NULL); + _item4.setDetails(Rect(239, 16, 283, 164), 250, 6, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 250, 0, 1, -1, 1, NULL); + + R2_GLOBALS._events.setCursor(CURSOR_USE); + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 200: + _field412 = 55; + break; + case 300: + _field412 = 43; + break; + case 700: + _field412 = 139; + break; + case 850: + _field412 = 91; + break; + default: + R2_GLOBALS._sceneManager._previousScene = 200; + _field412 = 55; + break; + } + + _currentFloor.setPosition(Common::Point(111, _field412)); +} + +void Scene250::signal() { + if (_field41A) + _sceneMode = 20; + + switch (_sceneMode) { + case 1: + _sound1.play(22); + R2_GLOBALS._player.show(); + R2_GLOBALS._player.setup(250, 1, 2); + R2_GLOBALS._player.setPosition(Common::Point(261, 185)); + ADD_MOVER(R2_GLOBALS._player, 261, 15); + + _field416 = 0; + _sceneMode = 2; + break; + case 2: + _sceneMode = ((_field414 - 12) == _field412) ? 4 : 3; + signal(); + break; + case 3: + _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y + 12)); + _field412 += 12; + R2_GLOBALS._player.setPosition(Common::Point(261, 185)); + ADD_MOVER(R2_GLOBALS._player, 261, 15); + + if ((_field414 - 12) == _field412) + _sceneMode = 4; + break; + case 4: + _sound1.play(21); + + _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y + 12)); + R2_GLOBALS._player.setPosition(Common::Point(261, 185)); + ADD_MOVER(R2_GLOBALS._player, 261, 15); + _sceneMode = 5; + break; + case 5: + R2_GLOBALS._player.disableControl(); + _sceneMode = 20; + signal(); + break; + case 6: + _sound1.play(22); + R2_GLOBALS._player.show(); + R2_GLOBALS._player.setup(250, 1, 2); + R2_GLOBALS._player.setPosition(Common::Point(261, 15)); + ADD_MOVER(R2_GLOBALS._player, 261, 185); + _field416 = 0; + _sceneMode = 7; + break; + case 7: + _field418 = 1; + if ((_field414 + 12) == _field412) + _sceneMode = 8; + signal(); + break; + case 8: + _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y - 12)); + _field412 -= 12; + R2_GLOBALS._player.setPosition(Common::Point(261, 15)); + ADD_MOVER(R2_GLOBALS._player, 261, 185); + + if ((_field414 + 12) == _field412) + _sceneMode = 9; + break; + case 9: + _sound1.play(21); + _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y - 12)); + R2_GLOBALS._player.setPosition(Common::Point(261, 15)); + ADD_MOVER(R2_GLOBALS._player, 261, 185); + _sceneMode = 10; + break; + case 10: + _sceneMode = 20; + signal(); + break; + case 20: + // Handle changing scene + switch (_field414) { + case 55: + R2_GLOBALS._sceneManager.changeScene(200); + break; + case 43: + R2_GLOBALS._sceneManager.changeScene(300); + break; + case 139: + R2_GLOBALS._sceneManager.changeScene(139); + break; + case 91: + R2_GLOBALS._sceneManager.changeScene(91); + break; + default: + break; + } + break; + default: + break; + } +} + +void Scene250::changeFloor(int floorNumber) { + _field414 = (floorNumber - 1) * 12 + 43; + _button1.setPosition(Common::Point(111, _field414)); + _button1.show(); + + _sceneMode = (_field412 >= _field414) ? 6 : 1; + if (_field414 == _field412) + _sceneMode = 20; + + signal(); +} + +void Scene250::process(Event &event) { + if (!event.handled) { + if (((event.eventType == EVENT_KEYPRESS) || (event.btnState != 0)) && _field418) { + _field41A = 1; + event.handled = true; + } + + SceneExt::process(event); + } +} + +void Scene250::dispatch() { + SceneExt::dispatch(); + + if (((_sceneMode == 2) || (_sceneMode == 7)) && (_field416 < 100)) { + ++_field416; + R2_GLOBALS._player._moveDiff.y = _field416 / 5; + } + + if (((_sceneMode == 5) || (_sceneMode == 10)) && (R2_GLOBALS._player._moveDiff.y > 4)) { + --_field416; + R2_GLOBALS._player._moveDiff.y = _field416 / 7 + 3; + } +} + /*-------------------------------------------------------------------------- * Scene 300 - Bridge * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 16133e81a0..a0c3f92668 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -206,6 +206,35 @@ public: virtual void signal(); }; +class Scene250: public SceneExt { + class Button: public SceneActor { + public: + int _floorNumber, _v2; + Button(); + void setFloor(int floorNumber); + + virtual void synchronize(Serializer &s); + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _field412, _field414, _field416, _field418, _field41A; + NamedHotspot _background, _item2, _item3, _item4; + Button _button1, _currentFloor; + Button _floor1, _floor2, _floor3, _floor4, _floor5; + Button _floor6, _floor7, _floor8, _floor9; + ASoundExt _sound1; + SequenceManager _sequenceManager1; +public: + Scene250(); + void changeFloor(int floorNumber); + + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + class Scene300: public SceneExt { /* Actions */ class Action1: public Action { -- cgit v1.2.3 From ee43bfed74f313115fc9cb537f614f26fa3d6fa2 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 15 Dec 2011 13:09:43 +0100 Subject: TSAGE: R2R - Implement Scene 2700 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 32 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 708 ++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes2.h | 57 ++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 90 +++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 + 5 files changed, 875 insertions(+), 28 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index b3cbd86412..3e0d36be8d 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -108,51 +108,53 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { /* Scene group #2 */ // case 2000: - // Maze + // Ice Maze return new Scene2000(); case 2350: - // Maze: Balloon Launch Platform + // Ice Maze: Balloon Launch Platform return new Scene2350(); case 2400: - // Maze: Large empty room + // Ice Maze: Large empty room return new Scene2400(); case 2425: - // Maze: + // Ice Maze: return new Scene2425(); case 2430: - // Maze: Bedroom + // Ice Maze: Bedroom return new Scene2430(); case 2435: - // Maze: Throne room + // Ice Maze: Throne room return new Scene2435(); case 2440: - // Maze: Another bedroom + // Ice Maze: Another bedroom return new Scene2440(); case 2445: - // Maze: + // Ice Maze: return new Scene2445(); case 2450: - // Maze: Another bedroom + // Ice Maze: Another bedroom return new Scene2450(); case 2455: - // Maze: Inside crevasse + // Ice Maze: Inside crevasse return new Scene2455(); case 2500: - // Maze: Large Cave + // Ice Maze: Large Cave return new Scene2500(); case 2525: - // Maze: Furnace room + // Ice Maze: Furnace room return new Scene2525(); case 2530: - // Maze: Well + // Ice Maze: Well return new Scene2530(); case 2535: - // Maze: Tannery + // Ice Maze: Tannery return new Scene2535(); case 2600: - // Maze: Exit + // Ice Maze: Exit return new Scene2600(); case 2700: + // Forest Maze + return new Scene2700(); case 2750: case 2800: case 2900: diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index b2e7b46420..a81aee41de 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -30,7 +30,7 @@ namespace TsAGE { namespace Ringworld2 { /*-------------------------------------------------------------------------- - * Scene 2000 - Maze + * Scene 2000 - Ice Maze * *--------------------------------------------------------------------------*/ void Scene2000::initPlayer() { @@ -1222,7 +1222,7 @@ void Scene2350::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 2400 - Maze: Large empty room + * Scene 2400 - Ice Maze: Large empty room * *--------------------------------------------------------------------------*/ void Scene2400::Exit1::changeScene() { @@ -1284,7 +1284,7 @@ void Scene2400::signal() { } /*-------------------------------------------------------------------------- - * Scene 2425 - Maze: + * Scene 2425 - Ice Maze: * *--------------------------------------------------------------------------*/ @@ -1499,7 +1499,7 @@ void Scene2425::signal() { } /*-------------------------------------------------------------------------- - * Scene 2430 - Maze: Bedroom + * Scene 2430 - Ice Maze: Bedroom * *--------------------------------------------------------------------------*/ @@ -1638,7 +1638,7 @@ void Scene2430::signal() { } /*-------------------------------------------------------------------------- - * Scene 2435 - Maze: Throne room + * Scene 2435 - Ice Maze: Throne room * *--------------------------------------------------------------------------*/ bool Scene2435::Actor1::startAction(CursorType action, Event &event) { @@ -1796,7 +1796,7 @@ void Scene2435::signal() { } /*-------------------------------------------------------------------------- - * Scene 2440 - Maze: Another bedroom + * Scene 2440 - Ice Maze: Another bedroom * *--------------------------------------------------------------------------*/ @@ -1909,7 +1909,7 @@ void Scene2440::signal() { } /*-------------------------------------------------------------------------- - * Scene 2445 - Maze: + * Scene 2445 - Ice Maze: * *--------------------------------------------------------------------------*/ void Scene2445::postInit(SceneObjectList *OwnerList) { @@ -1927,7 +1927,7 @@ void Scene2445::signal() { } /*-------------------------------------------------------------------------- - * Scene 2450 - Maze: Another bedroom + * Scene 2450 - Ice Maze: Another bedroom * *--------------------------------------------------------------------------*/ @@ -2219,7 +2219,7 @@ void Scene2450::signal() { } /*-------------------------------------------------------------------------- - * Scene 2455 - Maze: Inside crevasse + * Scene 2455 - Ice Maze: Inside crevasse * *--------------------------------------------------------------------------*/ @@ -2399,7 +2399,7 @@ void Scene2455::signal() { } /*-------------------------------------------------------------------------- - * Scene 2500 - Maze: Large Cave + * Scene 2500 - Ice Maze: Large Cave * *--------------------------------------------------------------------------*/ @@ -2644,7 +2644,7 @@ void Scene2525::signal() { } /*-------------------------------------------------------------------------- - * Scene 2530 - Maze: Well + * Scene 2530 - Ice Maze: Well * *--------------------------------------------------------------------------*/ bool Scene2530::Actor2::startAction(CursorType action, Event &event) { @@ -2801,7 +2801,7 @@ void Scene2530::signal() { } /*-------------------------------------------------------------------------- - * Scene 2535 - Maze: Tannery + * Scene 2535 - Ice Maze: Tannery * *--------------------------------------------------------------------------*/ @@ -2846,6 +2846,7 @@ bool Scene2535::Actor4::startAction(CursorType action, Event &event) { void Scene2535::Exit1::changeScene() { Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; + _enabled = false; R2_GLOBALS._events.setCursor(CURSOR_ARROW); R2_GLOBALS._player.disableControl(); @@ -2984,7 +2985,7 @@ void Scene2535::signal() { } /*-------------------------------------------------------------------------- - * Scene 2600 - Maze: Exit + * Scene 2600 - Ice Maze: Exit * *--------------------------------------------------------------------------*/ Scene2600::Scene2600(): SceneExt() { @@ -3024,5 +3025,686 @@ void Scene2600::signal() { g_globals->_sceneManager.changeScene(3800); } +/*-------------------------------------------------------------------------- + * Scene 2700 - Forest Maze + * + *--------------------------------------------------------------------------*/ +Scene2700::Scene2700(): SceneExt() { + _field412 = _field414 = _field416 = 0; +} + +void Scene2700::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); +} + +void Scene2700::Action1::signal() { + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor2.animate(ANIM_MODE_5, NULL); +} + +void Scene2700::Action2::signal() { + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + + setDelay(300 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor3.animate(ANIM_MODE_5, NULL); +} + +void Scene2700::Action3::signal() { + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + + setDelay(450 + R2_GLOBALS._randomSource.getRandomNumber(450)); + scene->_actor4.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2700::Action4::signal() { + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + + setDelay(300 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor5.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2700::Area1::process(Event &event) { + SceneArea::process(event); + if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + scene->_field414 = 2703; + switch (scene->_field412) { + case 0: + // No break on purpose + case 6: + scene->_sceneMode = 2703; + scene->setAction(&scene->_sequenceManager, scene, 2703, &R2_GLOBALS._player, NULL); + break; + case 1: { + Common::Point pt(80, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 2: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 3: { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 4: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 5: { + Common::Point pt(235, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + default: + break; + } + } +} + +void Scene2700::Area2::process(Event &event) { + SceneArea::process(event); + if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + scene->_field414 = 2704; + switch (scene->_field412) { + case 0: { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 1: { + Common::Point pt(80, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 2: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 3: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 4: { + Common::Point pt(235, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 5: + scene->_sceneMode = 2704; + scene->setAction(&scene->_sequenceManager, scene, 2704, &R2_GLOBALS._player, NULL); + break; + case 6: { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + default: + break; + } + } +} + +void Scene2700::postInit(SceneObjectList *OwnerList) { + loadScene(2700); + SceneExt::postInit(); + R2_GLOBALS._sound1.stop(); + R2_GLOBALS._sound2.stop(); + + _area1.setDetails(Rect(135, 160, 185, 168), SHADECURSOR_DOWN); + _area2.setDetails(Rect(300, 90, 320, 135), EXITCURSOR_E); + _rect1.set(70, 122, 90, 132); + _rect2.set(150, 122, 160, 132); + _rect3.set(90, 142, 130, 157); + _rect4.set(175, 137, 200, 147); + _rect5.set(280, 127, 300, 137); + _rect6.set(240, 157, 265, 167); + + _actor2.postInit(); + _actor2.setup(2700, 1, 1); + _actor2.setPosition(Common::Point(140, 29)); + _actor2.setAction(&_action1); + + _actor3.postInit(); + _actor3.setup(2700, 2, 1); + _actor3.setPosition(Common::Point(213, 32)); + _actor3.setAction(&_action2); + + _actor4.postInit(); + _actor4.setup(2700, 3, 1); + _actor4.setPosition(Common::Point(17, 39)); + _actor4.setAction(&_action3); + + _actor5.postInit(); + _actor5.setup(2700, 5, 1); + _actor5.setPosition(Common::Point(17, 71)); + _actor5.setAction(&_action4); + + _item2.setDetails(Rect(52, 38, 68, 60), 2700, 4, -1, 6, 1, NULL); + _item3.setDetails(Rect(113, 22, 127, 33), 2700, 4, -1, 6, 1, NULL); + _item4.setDetails(Rect(161, 44, 170, 52), 2700, 4, -1, 6, 1, NULL); + _item5.setDetails(Rect(221, 19, 233, 31), 2700, 4, -1, 6, 1, NULL); + _item6.setDetails(Rect(235, 59, 250, 75), 2700, 4, -1, 6, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2700, 4, -1, 6, 1, NULL); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_nejSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(19); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player._moveDiff = Common::Point(2, 2); + R2_GLOBALS._player.disableControl(); + + if (R2_INVENTORY.getObjectScene(36) == 0) + R2_GLOBALS._sound1.changeSound(234); + + if (R2_GLOBALS._sceneManager._previousScene == 2750) { + _sceneMode = 2702; + _field412 = 5; + setAction(&_sequenceManager, this, 2702, &R2_GLOBALS._player, NULL); + } else { + _field412 = 0; + if (R2_GLOBALS._sceneManager._previousScene == 3900) { + _sceneMode = 2701; + setAction(&_sequenceManager, this, 2701, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(164, 160)); + R2_GLOBALS._player.enableControl(); + } + } +} + +void Scene2700::signal() { + switch (_sceneMode) { + case 10: + switch (_field414) { + case 1: + switch (_field412) { + case 0: + case 2: + case 4: + case 6: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2705, &R2_GLOBALS._player, NULL); + break; + case 3: { + _sceneMode = _field414; + _field412 = 1; + Common::Point pt(80, 127); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 5: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2708, &R2_GLOBALS._player, NULL); + break; + default: // includes case 1 + break; + } + break; + case 2: + switch (_field412) { + case 0: + case 1: + case 6: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2706, &R2_GLOBALS._player, NULL); + break; + case 3: + case 4: { + _sceneMode = _field414; + _field412 = 2; + Common::Point pt(155, 127); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 5: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2708, &R2_GLOBALS._player, NULL); + break; + default: // includes case 2 + break; + } + break; + case 3: + switch (_field412) { + case 0: + case 1: + case 2: + case 4: + case 6: { + _sceneMode = _field414; + _field412 = 3; + Common::Point pt(115, 152); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 5: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2708, &R2_GLOBALS._player, NULL); + break; + default: // includes case 3 + break; + } + break; + case 4: + switch (_field412) { + case 0: + case 1: + case 6: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2706, &R2_GLOBALS._player, NULL); + break; + case 2: + case 3: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2709, &R2_GLOBALS._player, NULL); + break; + case 4: + case 5: + _sceneMode = _field414; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2704, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + break; + case 5: + switch (_field412) { + case 0: + case 1: + case 6: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2706, &R2_GLOBALS._player, NULL); + break; + case 2: + case 3: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2709, &R2_GLOBALS._player, NULL); + break; + case 4: { + _sceneMode = _field414; + _field412 = 5; + Common::Point pt(285, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + default: // includes case 5 + break; + } + break; + case 6: + switch (_field412) { + case 0: + case 3: { + _sceneMode = _field414; + _field412 = 6; + Common::Point pt(250, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 1: + case 2: + case 4: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2707, &R2_GLOBALS._player, NULL); + break; + case 5: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2708, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + break; + case 2703: + switch (_field412) { + case 0: + case 3: + case 6: + _sceneMode = _field414; + setAction(&_sequenceManager, this, 2703, &R2_GLOBALS._player, NULL); + break; + case 1: + case 2: + case 4: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2707, &R2_GLOBALS._player, NULL); + break; + case 5: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2708, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + break; + case 2704: + switch (_field412) { + case 0: + case 1: + case 6: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2706, &R2_GLOBALS._player, NULL); + break; + case 2: + case 3: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2709, &R2_GLOBALS._player, NULL); + break; + case 4: + case 5: + _sceneMode = _field414; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2704, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + break; + case 2710: + switch (_field412) { + case 0: + case 1: + case 3: + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2707, &R2_GLOBALS._player, NULL); + break; + case 2: + case 5: { + _sceneMode = _field414; + Common::Point pt(164, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 4: + _field412 = 4; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2708, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + break; + default: + break; + } + break; + case 11: + R2_INVENTORY.setObjectScene(36, 0); + R2_GLOBALS._player.disableControl(); + _field412 = 0; + _sceneMode = 2700; + setAction(&_sequenceManager, this, 2700, &_actor1, NULL); + break; + case 12: + R2_GLOBALS._sound1.play(234); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _sceneMode = 2711; + _stripManager.start(_field416, this); + break; + case 13: + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _sceneMode = 2712; + _stripManager.start(_field416, this); + break; + case 14: + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _sceneMode = 2713; + _stripManager.start(_field416, this); + break; + case 15: + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _sceneMode = 11; + _stripManager.start(_field416, this); + break; + case 2700: + _actor1.remove(); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + case 2703: + g_globals->_sceneManager.changeScene(3900); + break; + case 2704: + g_globals->_sceneManager.changeScene(2750); + break; + case 2710: + _field416 = 1200; + _sceneMode = 12; + _actor1.postInit(); + setAction(&_sequenceManager, this, 2710, &R2_GLOBALS._player, &_actor1, NULL); + break; + case 2711: + R2_GLOBALS._player.disableControl(); + _field416 = 1201; + _sceneMode = 13; + setAction(&_sequenceManager, this, 2711, &R2_GLOBALS._player, &_actor1, NULL); + break; + case 2712: + R2_GLOBALS._player.disableControl(); + _field416 = 1202; + _sceneMode = 14; + setAction(&_sequenceManager, this, 2712, &R2_GLOBALS._player, &_actor1, NULL); + break; + case 2713: + R2_GLOBALS._player.disableControl(); + _field416 = 1203; + _sceneMode = 14; + setAction(&_sequenceManager, this, 2713, &R2_GLOBALS._player, &_actor1, NULL); + break; + default: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } +} +void Scene2700::process(Event &event) { + if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN)) { + if (R2_GLOBALS._events.getCursor() == R2_36) { + if (R2_GLOBALS._player._bounds.contains(event.mousePos.x, event.mousePos.y)) { + _sceneMode = 10; + _field414 = 2710; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + switch (_field412) { + case 0: { + _sceneMode = 2710; + Common::Point pt(164, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 1: { + Common::Point pt(80, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 2: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 3: { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 4: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 5: { + Common::Point pt(235, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 6: { + Common::Point pt(205, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + default: + break; + } + event.handled = true; + } else { + SceneItem::display(2700, 3, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + } else if (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) { + if (_rect1.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect1.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 1; + } + } else if (_rect2.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect2.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 2; + } + } else if (_rect3.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect3.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 3; + } + } else if (_rect4.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect4.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 4; + } + } else if (_rect5.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect5.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 5; + } + } else if (_rect6.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect6.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 6; + } + } else { + event.handled = true; + R2_GLOBALS._player.updateAngle(Common::Point(event.mousePos.x, event.mousePos.y)); + } + if (_sceneMode = 10) { + R2_GLOBALS._player.disableControl(); + switch (_field412) { + case 0: + if (_field414 >= 6) { + Common::Point pt(205, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 1: { + Common::Point pt(80, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 2: { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 3: + if (_field414 == 1) { + Common::Point pt(80, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (_field414 == 6) { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 4: + if (_field414 == 5) { + Common::Point pt(235, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + Common::Point pt(155, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 5: { + Common::Point pt(235, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 6: { + Common::Point pt(140, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + default: + break; + } + } + } + } + Scene::process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 8684078860..83fb7b3cfb 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -490,6 +490,63 @@ public: virtual void signal(); }; +class Scene2700 : public SceneExt { + class Action1: public Action { + public: + void signal(); + }; + class Action2: public Action { + public: + void signal(); + }; + class Action3: public Action { + public: + void signal(); + }; + class Action4: public Action { + public: + void signal(); + }; + + class Area1: public SceneArea { + public: + void process(Event &event); + }; + class Area2: public SceneArea { + public: + void process(Event &event); + }; +public: + VisualSpeaker _quinnSpeaker; + VisualSpeaker _nejSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + NamedHotspot _item6; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Area1 _area1; + Area2 _area2; + Rect _rect1, _rect2, _rect3, _rect4, _rect5, _rect6; + SequenceManager _sequenceManager; + int _field412, _field414, _field416; + + Scene2700(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index cff7334090..b3120f8af6 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -739,5 +739,95 @@ SpeakerWebbster2500::SpeakerWebbster2500() { _numFrames = 0; } +SpeakerQuinn2700::SpeakerQuinn2700() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn2700::proc15() { + int v = _fieldF6; + + if (!_object2) { + _object2 = &R2_GLOBALS._player; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 19: + _object1.setup(4022, 5, 1); + break; + case 2701: + _object1.setup(4022, 1, 1); + break; + default: + break; + } + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerNej2700::SpeakerNej2700() { + _speakerName = "NEJ"; + _color1 = 171; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerNej2700::proc15() { + int v = _fieldF6; + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 2701: + _object1.setup(4022, 3, 1); + _object1.setPosition(Common::Point(164, 163)); + _object2->setPosition(Common::Point(-10, -10)); + break; + case 2705: + _object1.setup(4022, 7, 1); + _object1.fixPriority(162); + break; + default: + break; + } + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index b8ad17886a..7ffd24e6e7 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -205,6 +205,22 @@ public: virtual Common::String getClassName() { return "SpeakerWebbster2500"; } }; + +class SpeakerQuinn2700 : public VisualSpeaker { +public: + SpeakerQuinn2700(); + + virtual Common::String getClassName() { return "SpeakerQuinn2700"; } + virtual void proc15(); +}; + +class SpeakerNej2700 : public VisualSpeaker { +public: + SpeakerNej2700(); + + virtual Common::String getClassName() { return "SpeakerNej2700"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From e7a436545d24298d5da82a011eac1fdcdb35be25 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 15 Dec 2011 13:52:20 +0100 Subject: TSAGE: R2R - Fix bug in scene 2700, thanks to fingolfin --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index a81aee41de..9c6b65658c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -3633,7 +3633,7 @@ void Scene2700::process(Event &event) { event.handled = true; R2_GLOBALS._player.updateAngle(Common::Point(event.mousePos.x, event.mousePos.y)); } - if (_sceneMode = 10) { + if (_sceneMode == 10) { R2_GLOBALS._player.disableControl(); switch (_field412) { case 0: -- cgit v1.2.3 From f0d47faaba13b13de95e8a3d70607d8bbefc022d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 15 Dec 2011 16:59:45 +0100 Subject: TSAGE: R2R - Implement scene 2750, fix bug in scene 2700 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 456 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 81 +++- engines/tsage/ringworld2/ringworld2_speakers.cpp | 86 +++++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 + 5 files changed, 639 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 3e0d36be8d..a33a9a5e9e 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -156,6 +156,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Forest Maze return new Scene2700(); case 2750: + // Forest Maze + return new Scene2750(); case 2800: case 2900: error("Missing scene %d from group 2", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 9c6b65658c..abcf16405b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -3706,5 +3706,461 @@ void Scene2700::process(Event &event) { Scene::process(event); } +/*-------------------------------------------------------------------------- + * Scene 2750 - Forest Maze + * + *--------------------------------------------------------------------------*/ +Scene2750::Scene2750(): SceneExt() { + _field412 = _field414 = _field416 = 0; +} + +void Scene2750::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); +} + +void Scene2750::Action1::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 1: + setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(240)); + _actionIndex = 2; + scene->_actor5.show(); + scene->_actor5.animate(ANIM_MODE_8, 1, NULL); + break; + case 2: + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(600)); + _actionIndex = 0; + scene->_actor5.show(); + scene->_actor3.animate(ANIM_MODE_2, NULL); + break; + default: + setDelay(30); + _actionIndex = 1; + scene->_actor3.animate(ANIM_MODE_6, NULL); + scene->_actor4.animate(ANIM_MODE_8, 1, NULL); + break; + } +} + +void Scene2750::Action2::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor6.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2750::Action3::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + if (scene->_actor7._position.x <= 320) { + setDelay(1800 + R2_GLOBALS._randomSource.getRandomNumber(600)); + } else { + setDelay(60); + scene->_actor7.setPosition(Common::Point(-10, 25)); + Common::Point pt(330, 45); + NpcMover *mover = new NpcMover(); + scene->_actor7.addMover(mover, &pt, NULL); + } +} + +void Scene2750::Action4::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor8.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2750::Action5::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor9.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2750::Action6::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor10.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2750::Action7::signal() { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + setDelay(600 + R2_GLOBALS._randomSource.getRandomNumber(300)); + scene->_actor11.animate(ANIM_MODE_8, 1, NULL); +} + +void Scene2750::Area1::process(Event &event) { + SceneArea::process(event); + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + scene->_field414 = 2752; + switch (scene->_field412) { + case 1: { + scene->_sceneMode = 2752; + scene->setAction(&scene->_sequenceManager, scene, 2752, &R2_GLOBALS._player, NULL); + break; + } + case 2: { + Common::Point pt(140, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 3: { + Common::Point pt(210, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + default: + break; + } + } +} + +void Scene2750::Area2::process(Event &event) { + SceneArea::process(event); + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + scene->_field414 = 2753; + switch (scene->_field412) { + case 1: { + Common::Point pt(140, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 2: { + Common::Point pt(210, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + break; + } + case 3: { + scene->_sceneMode = 2753; + scene->setAction(&scene->_sequenceManager, scene, 2753, &R2_GLOBALS._player, NULL); + break; + } + default: + break; + } + } +} + +void Scene2750::postInit(SceneObjectList *OwnerList) { + loadScene(2750); + R2_GLOBALS._sound2.stop(); + SceneExt::postInit(); + _area1.setDetails(Rect(0, 90, 20, 135), EXITCURSOR_W); + _area2.setDetails(Rect(300, 90, 320, 135), EXITCURSOR_E); + + _rect1.set(30, 127, 155, 147); + _rect2.set(130, 142, 210, 167); + _rect3.set(-1, 137, 290, 147); + + if (R2_INVENTORY.getObjectScene(36) == 0) { + R2_GLOBALS._sound1.changeSound(235); + _actor2.postInit(); + _actor2.setup(2751, 1, 1); + _actor2.setPosition(Common::Point(104, 158)); + _actor2.animate(ANIM_MODE_2, NULL); + } + + _actor3.postInit(); + _actor3.setup(2750, 1, 1); + _actor3.setPosition(Common::Point(188, 34)); + _actor3.animate(ANIM_MODE_2, NULL); + _actor3._numFrames = 16; + + _actor4.postInit(); + _actor4.setup(2700, 4, 1); + _actor4.setPosition(Common::Point(188, 37)); + _actor4.fixPriority(26); + + _actor5.postInit(); + _actor5.setup(2750, 2, 1); + _actor5.setPosition(Common::Point(188, 34)); + _actor5.hide(); + + _actor3.setAction(&_action1); + + _actor6.postInit(); + _actor6.setup(2750, 3, 1); + _actor6.setPosition(Common::Point(9, 167)); + _actor6.fixPriority(252); + _actor6.setAction(&_action2); + + _actor7.postInit(); + _actor7.setup(2750, 4, 1); + _actor7.setPosition(Common::Point(-10, 25)); + _actor7.animate(ANIM_MODE_1, NULL); + _actor7.setStrip2(4); + _actor7._moveRate = 20; + _actor7.setAction(&_action3); + + _actor8.postInit(); + _actor8.fixPriority(26); + _actor8.setup(2750, 5, 1); + _actor8.setPosition(Common::Point(258, 33)); + _actor8.setAction(&_action4); + + _actor9.postInit(); + _actor9.fixPriority(26); + _actor9.setup(2750, 6, 1); + _actor9.setPosition(Common::Point(61, 38)); + _actor9.setAction(&_action5); + + _actor10.postInit(); + _actor10.fixPriority(26); + _actor10.setup(2750, 7, 1); + _actor10.setPosition(Common::Point(69, 37)); + _actor10.setAction(&_action6); + + _actor11.postInit(); + _actor11.fixPriority(26); + _actor11.setup(2750, 8, 1); + _actor11.setPosition(Common::Point(80, 35)); + _actor11.setAction(&_action7); + + _item2.setDetails(Rect(29, 50, 35, 56), 2750, 3, -1, 5, 1, NULL); + _item3.setDetails(Rect(47, 36, 54, 42), 2750, 3, -1, 5, 1, NULL); + _item4.setDetails(Rect(193, 21, 206, 34), 2750, 3, -1, 5, 1, NULL); + _item5.setDetails(Rect(301, 18, 315, 32), 2750, 3, -1, 5, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 2700, 0, -1, 2, 1, NULL); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_nejSpeaker); + + if (R2_INVENTORY.getObjectScene(36) == 0) { + _actor1.postInit(); + _actor1.setup(2752, 5, 1); + _actor1.animate(ANIM_MODE_NONE, NULL); + _actor1.setPosition(Common::Point(101, 148)); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(19); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player._moveDiff = Common::Point(2, 2); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._sceneManager._previousScene == 2700) { + if (R2_INVENTORY.getObjectScene(36) == 0) { + R2_GLOBALS._player.setVisage(2752); + R2_GLOBALS._player.setStrip(6); + R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); + R2_GLOBALS._player.setPosition(Common::Point(81, 165)); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _field416 = 1204; + _sceneMode = 11; + _stripManager.start(_field416, this); + } else { + _sceneMode = 2750; + _field412 = 1; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2750, &R2_GLOBALS._player, NULL); + } + } else if (R2_GLOBALS._sceneManager._previousScene == 2800) { + _sceneMode = 2751; + _field412 = 3; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2751, &R2_GLOBALS._player, NULL); + } else { + _field412 = 1; + R2_GLOBALS._player.setPosition(Common::Point(90, 137)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(); + } +} +void Scene2750::signal() { + switch (_sceneMode) { + case 10: + switch (_field414) { + case 1: + switch (_field412) { + case 2: { + _sceneMode = _field414; + _field412 = 1; + Common::Point pt(90, 137); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: { + _field412 = 2; + Common::Point pt(140, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } + break; + case 2: { + _sceneMode = _field414; + _field412 = 2; + Common::Point pt(170, 162); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: + switch (_field412) { + case 1: { + _field412 = 2; + Common::Point pt(210, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: { + _sceneMode = _field414; + _field412 = 3; + Common::Point pt(270, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } + break; + case 2752: + switch (_field412) { + case 1: + _sceneMode = _field414; + setAction(&_sequenceManager, this, 2752, &R2_GLOBALS._player, NULL); + break; + case 2: { + _field412 = 1; + Common::Point pt(20, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: { + _field412 = 2; + Common::Point pt(140, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } + break; + case 2753: + switch (_field412) { + case 1: { + _field412 = 2; + Common::Point pt(210, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: { + _field412 = 3; + Common::Point pt(300, 132); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: + _sceneMode = _field414; + setAction(&_sequenceManager, this, 2753, &R2_GLOBALS._player, NULL); + break; + default: + break; + } + break; + default: + break; + } + break; + case 11: + // No break on purpose + case 2753: + g_globals->_sceneManager.changeScene(2800); + break; + case 2752: + g_globals->_sceneManager.changeScene(2700); + break; + default: + R2_GLOBALS._player.enableControl(R2_NEGATOR_GUN); + break; + } +} + +void Scene2750::process(Event &event) { + if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN)) { + if (_rect1.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect1.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 1; + } + } else if (_rect2.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect2.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 2; + } + } else if (_rect3.contains(event.mousePos.x, event.mousePos.y)) { + if (!_rect3.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + event.handled = true; + _sceneMode = 10; + _field414 = 3; + } + } else { + event.handled = true; + R2_GLOBALS._player.updateAngle(Common::Point(event.mousePos.x, event.mousePos.y)); + } + + if (_sceneMode == 10) { + R2_GLOBALS._player.disableControl(); + switch (_field412) { + case 1: { + Common::Point pt(140, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: + if (_field414 == 1) { + Common::Point pt(140, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + Common::Point pt(210, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: { + Common::Point pt(210, 142); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } + } + } + Scene::process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 83fb7b3cfb..9b2a8685fc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -517,8 +517,8 @@ class Scene2700 : public SceneExt { void process(Event &event); }; public: - VisualSpeaker _quinnSpeaker; - VisualSpeaker _nejSpeaker; + SpeakerQuinn2700 _quinnSpeaker; + SpeakerNej2700 _nejSpeaker; NamedHotspot _item1; NamedHotspot _item2; NamedHotspot _item3; @@ -547,6 +547,83 @@ public: virtual void process(Event &event); }; +class Scene2750 : public SceneExt { + class Action1: public Action { + public: + void signal(); + }; + class Action2: public Action { + public: + void signal(); + }; + class Action3: public Action { + public: + void signal(); + }; + class Action4: public Action { + public: + void signal(); + }; + class Action5: public Action { + public: + void signal(); + }; + class Action6: public Action { + public: + void signal(); + }; + class Action7: public Action { + public: + void signal(); + }; + + class Area1: public SceneArea { + public: + void process(Event &event); + }; + class Area2: public SceneArea { + public: + void process(Event &event); + }; +public: + SpeakerQuinn2750 _quinnSpeaker; + SpeakerNej2750 _nejSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SceneActor _actor10; + SceneActor _actor11; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Area1 _area1; + Area2 _area2; + Rect _rect1, _rect2, _rect3; + SequenceManager _sequenceManager; + int _field412, _field414, _field416; + + Scene2750(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index b3120f8af6..7a3871f9ac 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -829,5 +829,91 @@ void SpeakerNej2700::proc15() { } } +SpeakerQuinn2750::SpeakerQuinn2750() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn2750::proc15() { + int v = _fieldF6; + + if (!_object2) { + _object2 = &R2_GLOBALS._player; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 19: + _object1.setup(4022, 5, 1); + break; + case 2752: + _object1.setup(2752, 1, 1); + break; + default: + break; + } + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerNej2750::SpeakerNej2750() { + _speakerName = "NEJ"; + _color1 = 171; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerNej2750::proc15() { + int v = _fieldF6; + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 2705: + _object1.setup(4022, 7, 1); + break; + case 2752: + _object1.setup(2752, 1, 1); + break; + default: + break; + } + _object1.animate(ANIM_MODE_5, this); + } +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 7ffd24e6e7..115ad580ce 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -221,6 +221,22 @@ public: virtual Common::String getClassName() { return "SpeakerNej2700"; } virtual void proc15(); }; + +class SpeakerQuinn2750 : public VisualSpeaker { +public: + SpeakerQuinn2750(); + + virtual Common::String getClassName() { return "SpeakerQuinn2750"; } + virtual void proc15(); +}; + +class SpeakerNej2750 : public VisualSpeaker { +public: + SpeakerNej2750(); + + virtual Common::String getClassName() { return "SpeakerNej2750"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 2ce198575fbf2d06140c5ff3d610b782220f5e28 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 15 Dec 2011 17:09:45 +0100 Subject: TSAGE: R2R - Cleanup --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 46 ++++++++++++------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index abcf16405b..107d7bad04 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -3071,7 +3071,7 @@ void Scene2700::Action4::signal() { void Scene2700::Area1::process(Event &event) { SceneArea::process(event); - if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -3121,7 +3121,7 @@ void Scene2700::Area1::process(Event &event) { void Scene2700::Area2::process(Event &event) { SceneArea::process(event); - if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -3536,7 +3536,7 @@ void Scene2700::signal() { void Scene2700::process(Event &event) { if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN)) { if (R2_GLOBALS._events.getCursor() == R2_36) { - if (R2_GLOBALS._player._bounds.contains(event.mousePos.x, event.mousePos.y)) { + if (R2_GLOBALS._player._bounds.contains(event.mousePos)) { _sceneMode = 10; _field414 = 2710; R2_GLOBALS._player.disableControl(); @@ -3593,38 +3593,38 @@ void Scene2700::process(Event &event) { SceneItem::display(2700, 3, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); } } else if (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) { - if (_rect1.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect1.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + if (_rect1.contains(event.mousePos)) { + if (!_rect1.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 1; } - } else if (_rect2.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect2.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect2.contains(event.mousePos)) { + if (!_rect2.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 2; } - } else if (_rect3.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect3.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect3.contains(event.mousePos)) { + if (!_rect3.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 3; } - } else if (_rect4.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect4.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect4.contains(event.mousePos)) { + if (!_rect4.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 4; } - } else if (_rect5.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect5.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect5.contains(event.mousePos)) { + if (!_rect5.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 5; } - } else if (_rect6.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect6.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect6.contains(event.mousePos)) { + if (!_rect6.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 6; @@ -3798,7 +3798,7 @@ void Scene2750::Action7::signal() { void Scene2750::Area1::process(Event &event) { SceneArea::process(event); - if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -3829,7 +3829,7 @@ void Scene2750::Area1::process(Event &event) { void Scene2750::Area2::process(Event &event) { SceneArea::process(event); - if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos.x, event.mousePos.y))) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -4105,20 +4105,20 @@ void Scene2750::signal() { void Scene2750::process(Event &event) { if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN)) { - if (_rect1.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect1.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + if (_rect1.contains(event.mousePos)) { + if (!_rect1.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 1; } - } else if (_rect2.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect2.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect2.contains(event.mousePos)) { + if (!_rect2.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 2; } - } else if (_rect3.contains(event.mousePos.x, event.mousePos.y)) { - if (!_rect3.contains(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)) { + } else if (_rect3.contains(event.mousePos)) { + if (!_rect3.contains(R2_GLOBALS._player._position)) { event.handled = true; _sceneMode = 10; _field414 = 3; -- cgit v1.2.3 From 29a20ed7dddb178eecfbcc4b7db11364c2c30606 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 17 Dec 2011 09:05:09 +1100 Subject: TSAGE: Implemented R2R Scene 850 - Deck #5 By Lift --- engines/tsage/ringworld2/ringworld2_logic.cpp | 7 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 176 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 39 ++++++ 3 files changed, 219 insertions(+), 3 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index a33a9a5e9e..201b44eeef 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -77,7 +77,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 700: case 800: case 825: + error("Missing scene %d from group 0", sceneNumber); case 850: + // Deck #5 - By Lift + return new Scene850(); case 900: error("Missing scene %d from group 0", sceneNumber); /* Scene group #1 */ @@ -607,8 +610,8 @@ void Ringworld2InvObjectList::reset() { setObjectScene(R2_11, 400); setObjectScene(R2_12, 500); setObjectScene(R2_13, 1550); - setObjectScene(R2_14, 850); - setObjectScene(R2_15, 850); + setObjectScene(R2_OPTICAL_FIBRE, 850); + setObjectScene(R2_CLAMP, 850); setObjectScene(R2_16, 0); setObjectScene(R2_17, 1550); setObjectScene(R2_18, 1550); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 1c25c896a6..7a3b0cdd78 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1701,7 +1701,7 @@ void Scene250::signal() { R2_GLOBALS._sceneManager.changeScene(139); break; case 91: - R2_GLOBALS._sceneManager.changeScene(91); + R2_GLOBALS._sceneManager.changeScene(850); break; default: break; @@ -2900,6 +2900,180 @@ void Scene400::dispatch() { } } +/*-------------------------------------------------------------------------- + * Scene 850 - Deck #5 - By Lift + * + *--------------------------------------------------------------------------*/ + +bool Scene850::Indicator::startAction(CursorType action, Event &event) { + Scene850 *scene = (Scene850 *)R2_GLOBALS._sceneManager._scene; + + if ((action != CURSOR_USE) || (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) != 850)) + return NamedHotspot::startAction(action, event); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 851; + scene->setAction(&scene->_sequenceManager1, scene, 851, &R2_GLOBALS._player, &scene->_fibre, NULL); + return true; + } +} + +/*--------------------------------------------------------------------------*/ + +bool Scene850::LiftDoor::startAction(CursorType action, Event &event) { + Scene850 *scene = (Scene850 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 202; + scene->setAction(&scene->_sequenceManager1, scene, 202, &R2_GLOBALS._player, this, NULL); + return true; + } +} + +bool Scene850::SickBayDoor::startAction(CursorType action, Event &event) { + Scene850 *scene = (Scene850 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 204; + scene->setAction(&scene->_sequenceManager1, scene, 204, &R2_GLOBALS._player, this, NULL); + return true; + } +} + +bool Scene850::Clamp::startAction(CursorType action, Event &event) { + Scene850 *scene = (Scene850 *)R2_GLOBALS._sceneManager._scene; + + if (!R2_GLOBALS.getFlag(7)) + return false; + else if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + else { + R2_GLOBALS._player.disableControl(); + scene->_object1.postInit(); + scene->_sceneMode = 850; + scene->setAction(&scene->_sequenceManager1, scene, 850, &R2_GLOBALS._player, this, &scene->_object1, NULL); + return true; + } +} + +bool Scene850::Panel::startAction(CursorType action, Event &event) { + Scene850 *scene = (Scene850 *)R2_GLOBALS._sceneManager._scene; + + if ((action != CURSOR_USE) || R2_GLOBALS.getFlag(7)) + return SceneActor::startAction(action, event); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 852; + scene->setAction(&scene->_sequenceManager1, scene, 852, &R2_GLOBALS._player, this, &scene->_object1, NULL); + return true; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene850::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(850); + + _liftDoor.postInit(); + _liftDoor.setup(850, 2, 1); + _liftDoor.setPosition(Common::Point(188, 79)); + _liftDoor.setDetails(850, 3, -1, -1, 1, NULL); + + _sickBayDoor.postInit(); + _sickBayDoor.setup(850, 3, 1); + _sickBayDoor.setPosition(Common::Point(62, 84)); + _sickBayDoor.setDetails(850, 9, -1, -1, 1, NULL); + + if (R2_INVENTORY.getObjectScene(R2_CLAMP) == 850) { + _clamp.postInit(); + _clamp.setup(850, 5, 1); + _clamp.setPosition(Common::Point(242, 93)); + _clamp.fixPriority(81); + _clamp.animate(ANIM_MODE_2, NULL); + _clamp.setDetails(850, 27, -1, -1, 1, NULL); + } + + _panel.postInit(); + _panel.setVisage(850); + + if (R2_GLOBALS.getFlag(7)) + _panel.setFrame(7); + + _panel.setPosition(Common::Point(232, 119)); + _panel.fixPriority(82); + _panel.setDetails(850, 24, -1, -1, 1, NULL); + + if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 850) { + _fibre.postInit(); + _fibre.setup(850, 6, 1); + _fibre.setPosition(Common::Point(280, 87)); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _eastDoor.setDetails(Rect(289, 53, 315, 125), 850, 6, -1, 8, 1, NULL); + _indicator.setDetails(Rect(275, 67, 286, 79), 850, 18, -1, 20, 1, NULL); + _sickBayIndicator.setDetails(Rect(41, 51, 48, 61), 850, 15, -1, -1, 1, NULL); + _liftControls.setDetails(Rect(156, 32, 166, 44), 850, 21, -1, -1, 1, NULL); + _compartment.setDetails(Rect(4, 88, 153, 167), 850, 12, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 850, 0, -1, -1, 1, NULL); + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 250: + _sceneMode = 203; + setAction(&_sequenceManager1, this, 203, &R2_GLOBALS._player, &_liftDoor, NULL); + break; + case 800: + _sceneMode = 205; + setAction(&_sequenceManager1, this, 205, &R2_GLOBALS._player, &_sickBayDoor, NULL); + break; + default: + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(215, 115)); + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene850::signal() { + switch (_sceneMode) { + case 202: + R2_GLOBALS._sceneManager.changeScene(250); + break; + case 204: + R2_GLOBALS._sceneManager.changeScene(800); + break; + case 850: + R2_INVENTORY.setObjectScene(R2_CLAMP, 1); + _clamp.remove(); + _object1.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 851: + R2_INVENTORY.setObjectScene(R2_OPTICAL_FIBRE, 1); + _fibre.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 852: + R2_GLOBALS.setFlag(7); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index a0c3f92668..5f2d768f90 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -370,6 +370,45 @@ public: virtual void dispatch(); }; +class Scene850: public SceneExt { + /* Items */ + class Indicator: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Objects */ + class LiftDoor: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class SickBayDoor: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Clamp: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Panel: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + NamedHotspot _background, _eastDoor, _compartment, _sickBayIndicator; + NamedHotspot _liftControls; + Indicator _indicator; + SceneActor _object1, _fibre; + LiftDoor _liftDoor; + SickBayDoor _sickBayDoor; + Clamp _clamp; + Panel _panel; + SequenceManager _sequenceManager1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 114e857d78536d5a19d2b37855d67522d5b00e6e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 17 Dec 2011 02:03:36 +0100 Subject: TSAGE: R2R - Implement scene 2800 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 383 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 41 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 124 ++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 24 ++ 5 files changed, 574 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 201b44eeef..3854a37384 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -162,6 +162,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Forest Maze return new Scene2750(); case 2800: + // Exiting Forest + return new Scene2800(); case 2900: error("Missing scene %d from group 2", sceneNumber); /* Scene group #3 */ diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 107d7bad04..a61ff6ac9a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -4162,5 +4162,388 @@ void Scene2750::process(Event &event) { Scene::process(event); } +/*-------------------------------------------------------------------------- + * Scene 2800 - Exiting forest + * + *--------------------------------------------------------------------------*/ +Scene2800::Scene2800(): SceneExt() { + _field412 = 0; +} + +void Scene2800::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + +bool Scene2800::Item2::startAction(CursorType action, Event &event) { + Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS.getFlag(47))) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 2805; + scene->setAction(&scene->_sequenceManager, scene, 2805, &R2_GLOBALS._player, NULL); + return true; + } else + return SceneHotspot::startAction(action, event); +} + +bool Scene2800::Actor1::startAction(CursorType action, Event &event) { + Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_TALK) { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS.setFlag(47); + scene->_field412 = 1205; + scene->_sceneMode = 2803; + scene->_stripManager.start(scene->_field412, scene); + return true; + } else if (action == R2_7) { + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS.setFlag(47); + scene->_sceneMode = 10; + scene->setAction(&scene->_sequenceManager, scene, 2802, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor1, NULL); + return true; + } else + return SceneActor::startAction(action, event); +} + +void Scene2800::Action1::signal() { + Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS._player._position.x <= 320) { + setDelay(120); + Common::Point pt(330, 25); + NpcMover *mover = new NpcMover(); + scene->_object1.addMover(mover, &pt, NULL); + } else { + setDelay(1800 + R2_GLOBALS._randomSource.getRandomNumber(600)); + scene->_object1.setPosition(Common::Point(-10, 45)); + } +} + +void Scene2800::Action2::signal() { + Scene2800 *scene = (Scene2800 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(240); + R2_GLOBALS._sound1.changeSound(240); + R2_GLOBALS._sound2.stop(); + break; + case 1: + scene->_object2.postInit(); + scene->_object2.setVisage(2800); + scene->_object2.setStrip(1); + scene->_object2._numFrames = 8; + scene->_object2._moveRate = 8; + scene->_object2.changeZoom(100); + scene->_object2.setPosition(Common::Point(1, 1)); + scene->_object2.show(); + scene->_object2.animate(ANIM_MODE_5, this); + break; + case 2: + R2_GLOBALS._sound2.play(130); + scene->_object2.setVisage(2800); + scene->_object2.setStrip(7); + + scene->_object3.postInit(); + scene->_object3.setVisage(2800); + scene->_object3.setStrip(3); + scene->_object3._numFrames = 8; + scene->_object3._moveRate = 8; + scene->_object3.changeZoom(100); + scene->_object3.setPosition(Common::Point(300, 104)); + scene->_object3.show(); + scene->_object3.animate(ANIM_MODE_5, this); + break; + case 3: + R2_GLOBALS._sound1.play(241); + scene->_object4.postInit(); + scene->_object4.setVisage(2800); + scene->_object4.setStrip(2); + scene->_object4._numFrames = 4; + scene->_object4._moveRate = 4; + scene->_object4.changeZoom(100); + scene->_object4.setPosition(Common::Point(300, 104)); + scene->_object4.fixPriority(105); + scene->_object4.show(); + scene->_object4.animate(ANIM_MODE_5, this); + break; + case 4: + setDelay(18); + scene->_object4.setStrip(4); + scene->_actor1.setVisage(2800); + scene->_actor1.setStrip(5); + scene->_actor1.setFrame(1); + scene->_actor1._numFrames = 5; + scene->_actor1._moveRate = 5; + scene->_actor1.setPosition(Common::Point(300, 104)); + scene->_actor1.fixPriority(110); + scene->_actor1.changeZoom(100); + scene->_actor1.show(); + break; + case 5: + scene->_actor1.animate(ANIM_MODE_5, this); + break; + case 6: { + scene->_actor1.changeZoom(-1); + scene->_actor1.setVisage(3107); + scene->_actor1.animate(ANIM_MODE_1, NULL); + scene->_actor1.setStrip(3); + scene->_actor1.setPosition(Common::Point(297, 140)); + scene->_actor1._numFrames = 10; + scene->_actor1._moveRate = 10; + scene->_actor1._moveDiff = Common::Point(3, 2); + + Common::Point pt(297, 160); + NpcMover *mover = new NpcMover(); + scene->_actor1.addMover(mover, &pt, this); + break; + } + case 7: { + scene->_actor1.changeZoom(75); + scene->_actor1.updateAngle(R2_GLOBALS._player._position); + + Common::Point pt(105, 82); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 8: { + R2_GLOBALS._player._numFrames = 8; + R2_GLOBALS._player._moveRate = 8; + R2_GLOBALS._player.animate(ANIM_MODE_2, NULL); + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player.setStrip(2); + R2_GLOBALS._player.changeZoom(-1); + + Common::Point pt(79, 100); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 9: { + R2_GLOBALS._player._numFrames = 10; + R2_GLOBALS._player._moveRate = 10; + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + + Common::Point pt(100, 64); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 10: { + R2_GLOBALS._player.fixPriority(124); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + + Common::Point pt(160, 124); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 11: { + R2_GLOBALS._player.fixPriority(-1); + + Common::Point pt(160, 160); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 12: { + Common::Point pt(270, 160); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 13: + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_field412 = 1207; + scene->_stripManager.start(scene->_field412, this); + break; + case 14: { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.fixPriority(110); + + Common::Point pt(288, 140); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + case 15: + setDelay(18); + scene->_actor1.updateAngle(R2_GLOBALS._player._position); + R2_GLOBALS._player.setVisage(2800); + R2_GLOBALS._player.setStrip(6); + R2_GLOBALS._player.setFrame(1); + R2_GLOBALS._player.changeZoom(100); + R2_GLOBALS._player.setPosition(Common::Point(300, 104)); + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player._moveRate = 5; + break; + case 16: + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 17: + setDelay(6); + scene->_object4.setStrip(2); + scene->_object4.setFrame(11); + R2_GLOBALS._player.hide(); + // No break on purpose + case 18: + R2_GLOBALS._sound1.play(241); + scene->_object4.animate(ANIM_MODE_6, this); + break; + case 19: + scene->_object4.remove(); + scene->_object3.animate(ANIM_MODE_6, this); + break; + case 20: + setDelay(6); + scene->_object3.remove(); + scene->_object2.setStrip(1); + scene->_object2.setFrame(19); + break; + case 21: + setDelay(150); + R2_GLOBALS._sound1.play(269); + R2_GLOBALS._sound2.stop(); + break; + case 22: + scene->_sceneMode = 12; + scene->_object2.animate(ANIM_MODE_6, scene); + break; + default: + break; + } +} + +void Scene2800::postInit(SceneObjectList *OwnerList) { + loadScene(2800); + setZoomPercents(100, 50, 124, 75); + R2_GLOBALS._sound1.stop(); + R2_GLOBALS._sound2.stop(); + SceneExt::postInit(); + + _object1.postInit(); + _object1.setup(2750, 4, 1); + _object1.setPosition(Common::Point(-10, 25)); + _object1.animate(ANIM_MODE_1, NULL); + _object1.setStrip2(4); + _object1._moveRate = 20; + _object1.setAction(&_action1); + + _actor3.postInit(); + _actor3.setup(2802, 1, 1); + _actor3.setPosition(Common::Point(116, 80)); + _actor3.fixPriority(111); + _actor3.animate(ANIM_MODE_2, NULL); + _actor3._numFrames = 6; + + if (!R2_GLOBALS.getFlag(47)) { + _actor1.postInit(); + _actor1.setVisage(3105); + _actor1.setStrip(3); + _actor1.setFrame(1); + _actor1.setZoom(50); + _actor1._moveDiff = Common::Point(2, 1); + _actor1.setPosition(Common::Point(122, 82)); + _actor1.animate(ANIM_MODE_NONE, NULL); + _actor1.setDetails(2800, -1, -1, -1, 1, NULL); + } + + _item1.setDetails(Rect(0, 0, 320, 200), 2800, -1, -1, -1, 1, NULL); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_nejSpeaker); + _stripManager.addSpeaker(&_guardSpeaker); + + if (R2_INVENTORY.getObjectScene(36) == 0) { + R2_GLOBALS._sound1.fadeSound(237); + if (R2_GLOBALS.getFlag(47)) { + _item2.setDetails(Rect(76, 45, 155, 90), 2800, 3, -1, -1, 2, NULL); + } else { + _actor2.postInit(); + _actor2.setup(2752, 5, 1); + _actor2.animate(ANIM_MODE_NONE, NULL); + _actor2.changeZoom(100); + _actor2._moveDiff = Common::Point(2, 1); + _actor2.setPosition(Common::Point(101, 148)); + } + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(19); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.changeZoom(100); + R2_GLOBALS._player._moveDiff = Common::Point(2, 2); + R2_GLOBALS._player.disableControl(); + + if (R2_INVENTORY.getObjectScene(36) == 0) { + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2800, &R2_GLOBALS._player, NULL); + } else if (R2_GLOBALS.getFlag(47)) { + R2_GLOBALS._player.setVisage(3110); + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.setPosition(Common::Point(160, 124)); + R2_GLOBALS._player.enableControl(); + } else { + _sceneMode = 2801; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 2801, &R2_GLOBALS._player, &_actor2, &_actor1, NULL); + } +} + +void Scene2800::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._sound1.play(238); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _field412 = 1206; + _sceneMode = 2804; + _stripManager.start(_field412, this); + break; + case 11: + _actor2.remove(); + _object1.setAction(NULL); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + _item2.setDetails(Rect(76, 45, 155, 90), 2800, 3, -1, -1, 2, NULL); + break; + case 12: + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._sound2.fadeOut2(NULL); + g_globals->_sceneManager.changeScene(1000); + break; + case 2800: + g_globals->_sceneManager.changeScene(2750); + break; + case 2801: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player._canWalk = false; + break; + case 2803: + R2_GLOBALS._player.disableControl(); + _sceneMode = 10; + setAction(&_sequenceManager, this, 2803, &R2_GLOBALS._player, &_actor2, &_actor1, NULL); + break; + case 2804: + R2_GLOBALS._player.disableControl(); + _sceneMode = 11; + setAction(&_sequenceManager, this, 2804, &R2_GLOBALS._player, &_actor2, NULL); + break; + case 2805: + _object1.remove(); + setAction(&_action2); + break; + default: + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 9b2a8685fc..2097465a48 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -624,6 +624,47 @@ public: virtual void process(Event &event); }; +class Scene2800 : public SceneExt { + class Item2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor1 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Action1: public Action { + public: + void signal(); + }; + class Action2: public Action { + public: + void signal(); + }; +public: + SpeakerQuinn2800 _quinnSpeaker; + SpeakerNej2800 _nejSpeaker; + SpeakerGuard2800 _guardSpeaker; + NamedHotspot _item1; + Item2 _item2; + Actor1 _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneObject _object1; + Action1 _action1; + Action2 _action2; + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; + SequenceManager _sequenceManager; + int _field412; + + Scene2800(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 7a3871f9ac..35de45d8e6 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -915,5 +915,129 @@ void SpeakerNej2750::proc15() { _object1.animate(ANIM_MODE_5, this); } } + +SpeakerQuinn2800::SpeakerQuinn2800() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn2800::proc15() { + int v = _fieldF6; + + if (!_object2) { + _object2 = &R2_GLOBALS._player; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 16: + _object1.setZoom(75); + _object1.setup(4023, 5, 1); + break; + case 19: + _object1.setup(4023, 1, 1); + break; + case 3110: + _object1.setZoom(75); + if (_object2->_strip == 1) + _object1.setup(4061 , 1, 1); + else + _object1.setup(4061 , 3, 1); + break; + default: + break; + } + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerNej2800::SpeakerNej2800() { + _speakerName = "NEJ"; + _color1 = 171; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerNej2800::proc15() { + int v = _fieldF6; + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4023, 3, 1); + if (_object2->_visage == 2801) + _object1.setPosition(Common::Point(R2_GLOBALS._player._position.x - 12, R2_GLOBALS._player._position.y)); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerGuard2800::SpeakerGuard2800() { + _speakerName = "GUARD"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerGuard2800::proc15() { + int v = _fieldF6; + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setZoom(75); + _object1.setup(4060, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 115ad580ce..31eda2431c 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -237,6 +237,30 @@ public: virtual Common::String getClassName() { return "SpeakerNej2750"; } virtual void proc15(); }; + +class SpeakerQuinn2800 : public VisualSpeaker { +public: + SpeakerQuinn2800(); + + virtual Common::String getClassName() { return "SpeakerQuinn2800"; } + virtual void proc15(); +}; + +class SpeakerNej2800 : public VisualSpeaker { +public: + SpeakerNej2800(); + + virtual Common::String getClassName() { return "SpeakerNej2800"; } + virtual void proc15(); +}; + +class SpeakerGuard2800 : public VisualSpeaker { +public: + SpeakerGuard2800(); + + virtual Common::String getClassName() { return "SpeakerGuard2800"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 24740b30bd9d6cfd5ce420951a53b87a156ffbbf Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 17 Dec 2011 13:13:44 +1100 Subject: TSAGE: Disallow saving and loading via the GMM when a dialog is active --- engines/tsage/ringworld2/ringworld2_logic.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 3854a37384..ccedb3a18a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -203,14 +203,16 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { * Returns true if it is currently okay to restore a game */ bool Ringworld2Game::canLoadGameStateCurrently() { - return true; + // Don't allow a game to be loaded if a dialog is active + return g_globals->_gfxManagers.size() == 1; } /** * Returns true if it is currently okay to save the game */ bool Ringworld2Game::canSaveGameStateCurrently() { - return true; + // Don't allow a game to be saved if a dialog is active + return g_globals->_gfxManagers.size() == 1; } /*--------------------------------------------------------------------------*/ -- cgit v1.2.3 From 2e8490448e4add482d622fe2e83b5125372aa67d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 18 Dec 2011 00:37:01 +0100 Subject: TSAGE: R2R - Scene 2800: Move several objects from scene to action2 --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 82 ++++++++++++------------- engines/tsage/ringworld2/ringworld2_scenes2.h | 6 +- 2 files changed, 44 insertions(+), 44 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index a61ff6ac9a..b851ed4e22 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -4234,47 +4234,47 @@ void Scene2800::Action2::signal() { R2_GLOBALS._sound2.stop(); break; case 1: - scene->_object2.postInit(); - scene->_object2.setVisage(2800); - scene->_object2.setStrip(1); - scene->_object2._numFrames = 8; - scene->_object2._moveRate = 8; - scene->_object2.changeZoom(100); - scene->_object2.setPosition(Common::Point(1, 1)); - scene->_object2.show(); - scene->_object2.animate(ANIM_MODE_5, this); + _object2.postInit(); + _object2.setVisage(2800); + _object2.setStrip(1); + _object2._numFrames = 8; + _object2._moveRate = 8; + _object2.changeZoom(100); + _object2.setPosition(Common::Point(1, 1)); + _object2.show(); + _object2.animate(ANIM_MODE_5, this); break; case 2: R2_GLOBALS._sound2.play(130); - scene->_object2.setVisage(2800); - scene->_object2.setStrip(7); - - scene->_object3.postInit(); - scene->_object3.setVisage(2800); - scene->_object3.setStrip(3); - scene->_object3._numFrames = 8; - scene->_object3._moveRate = 8; - scene->_object3.changeZoom(100); - scene->_object3.setPosition(Common::Point(300, 104)); - scene->_object3.show(); - scene->_object3.animate(ANIM_MODE_5, this); + _object2.setVisage(2800); + _object2.setStrip(7); + + _object3.postInit(); + _object3.setVisage(2800); + _object3.setStrip(3); + _object3._numFrames = 8; + _object3._moveRate = 8; + _object3.changeZoom(100); + _object3.setPosition(Common::Point(300, 104)); + _object3.show(); + _object3.animate(ANIM_MODE_5, this); break; case 3: R2_GLOBALS._sound1.play(241); - scene->_object4.postInit(); - scene->_object4.setVisage(2800); - scene->_object4.setStrip(2); - scene->_object4._numFrames = 4; - scene->_object4._moveRate = 4; - scene->_object4.changeZoom(100); - scene->_object4.setPosition(Common::Point(300, 104)); - scene->_object4.fixPriority(105); - scene->_object4.show(); - scene->_object4.animate(ANIM_MODE_5, this); + _object4.postInit(); + _object4.setVisage(2800); + _object4.setStrip(2); + _object4._numFrames = 4; + _object4._moveRate = 4; + _object4.changeZoom(100); + _object4.setPosition(Common::Point(300, 104)); + _object4.fixPriority(105); + _object4.show(); + _object4.animate(ANIM_MODE_5, this); break; case 4: setDelay(18); - scene->_object4.setStrip(4); + _object4.setStrip(4); scene->_actor1.setVisage(2800); scene->_actor1.setStrip(5); scene->_actor1.setFrame(1); @@ -4389,23 +4389,23 @@ void Scene2800::Action2::signal() { break; case 17: setDelay(6); - scene->_object4.setStrip(2); - scene->_object4.setFrame(11); + _object4.setStrip(2); + _object4.setFrame(11); R2_GLOBALS._player.hide(); // No break on purpose case 18: R2_GLOBALS._sound1.play(241); - scene->_object4.animate(ANIM_MODE_6, this); + _object4.animate(ANIM_MODE_6, this); break; case 19: - scene->_object4.remove(); - scene->_object3.animate(ANIM_MODE_6, this); + _object4.remove(); + _object3.animate(ANIM_MODE_6, this); break; case 20: setDelay(6); - scene->_object3.remove(); - scene->_object2.setStrip(1); - scene->_object2.setFrame(19); + _object3.remove(); + _object2.setStrip(1); + _object2.setFrame(19); break; case 21: setDelay(150); @@ -4414,7 +4414,7 @@ void Scene2800::Action2::signal() { break; case 22: scene->_sceneMode = 12; - scene->_object2.animate(ANIM_MODE_6, scene); + _object2.animate(ANIM_MODE_6, scene); break; default: break; diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 2097465a48..d007f7e9f5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -639,6 +639,9 @@ class Scene2800 : public SceneExt { void signal(); }; class Action2: public Action { + SceneObject _object2; + SceneObject _object3; + SceneObject _object4; public: void signal(); }; @@ -654,9 +657,6 @@ public: SceneObject _object1; Action1 _action1; Action2 _action2; - SceneObject _object2; - SceneObject _object3; - SceneObject _object4; SequenceManager _sequenceManager; int _field412; -- cgit v1.2.3 From f69dfba21a5d4be8cc60a20a0dd0628717fa5373 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 18 Dec 2011 18:08:45 +1100 Subject: TSAGE: Implemented dirty rect handling in the engine This should help improve performance when scalers are being used. --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index ddb4eae9c4..6035b37e19 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -153,7 +153,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } // Execute the specified action -- cgit v1.2.3 From 14ccd4f1f089e11fa03044100b67f3a9380701fb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 19 Dec 2011 00:09:48 +0100 Subject: TSAGE: R2R - Implement scene 3100 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 206 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 73 ++++++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 13 ++ engines/tsage/ringworld2/ringworld2_speakers.h | 7 + 5 files changed, 301 insertions(+) create mode 100644 engines/tsage/ringworld2/ringworld2_scenes3.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_scenes3.h (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ccedb3a18a..689b2b5f0f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -28,6 +28,7 @@ #include "tsage/ringworld2/ringworld2_dialogs.h" #include "tsage/ringworld2/ringworld2_scenes0.h" #include "tsage/ringworld2/ringworld2_scenes2.h" +#include "tsage/ringworld2/ringworld2_scenes3.h" namespace TsAGE { @@ -169,6 +170,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { /* Scene group #3 */ // case 3100: + return new Scene3100(); case 3125: case 3150: case 3175: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp new file mode 100644 index 0000000000..22e58b6d2b --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -0,0 +1,206 @@ +/* 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. + * + */ + +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/ringworld2/ringworld2_scenes3.h" + +namespace TsAGE { + +namespace Ringworld2 { + +/*-------------------------------------------------------------------------- + * Scene 3100 - + * + *--------------------------------------------------------------------------*/ +Scene3100::Scene3100() { + _field412 = 0; +} + +void Scene3100::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + +bool Scene3100::Actor6::startAction(CursorType action, Event &event) { + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + Scene3100 *scene = (Scene3100 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(606, scene); + return true; +} + +void Scene3100::postInit(SceneObjectList *OwnerList) { + if (R2_GLOBALS._sceneManager._previousScene == 1000) { + if (R2_GLOBALS._player._oldCharacterScene[1] == 3100) { + loadScene(3101); + R2_GLOBALS._v58CE2 = 0; + } else { + loadScene(3100); + g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); + } + } else { + loadScene(3100); + } + // Original was doing it twice in a row. Skipped. + + if (R2_GLOBALS._sceneManager._previousScene == 3255) + R2_GLOBALS._v58CE2 = 0; + + SceneExt::postInit(); + _stripManager.addSpeaker(&_guardSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._sceneManager._previousScene = 1000; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _item2.setDetails(Rect(212, 97, 320, 114), 3100, 3, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 480, 200), 3100, 0, -1, -1, 1, NULL); + _field412 = 0; + + if (R2_GLOBALS._sceneManager._previousScene == 1000) { + if (R2_GLOBALS._player._oldCharacterScene[1] == 3100) { + _sceneMode = 3102; + _actor3.postInit(); + _actor4.postInit(); + _actor5.postInit(); + R2_GLOBALS._sound1.play(274); + _sound1.fadeSound(130); + setAction(&_sequenceManager, this, 3102, &_actor1, &R2_GLOBALS._player, &_actor3, &_actor4, &_actor5, NULL); + } else { + _actor6.postInit(); + _actor6.setup(3110, 5, 1); + _actor6.changeZoom(50); + _actor6.setPosition(Common::Point(10, 149)); + _actor6.setDetails(3100, 6, -1, -1, 2, NULL); + + _actor4.postInit(); + _actor4.setup(3103, 1, 1); + _actor4.setPosition(Common::Point(278, 113)); + _actor4.setDetails(3100, 9, -1, -1, 2, NULL); + _actor4.animate(ANIM_MODE_2, NULL); + + _field412 = 1; + _actor1.setDetails(3100, 3, -1, -1, 2, NULL); + R2_GLOBALS._sound1.play(243); + R2_GLOBALS._sound2.play(130); + _sceneMode = 3100; + + setAction(&_sequenceManager, this, 3100, &R2_GLOBALS._player, &_actor1, NULL); + } + } else if (R2_GLOBALS._sceneManager._previousScene == 3255) { + _sceneMode = 3101; + _actor2.postInit(); + _actor3.postInit(); + _field412 = 1; + + setAction(&_sequenceManager, this, 3101, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); + } else { + _actor6.postInit(); + _actor6.setup(3110, 5, 1); + _actor6.changeZoom(50); + _actor6.setPosition(Common::Point(10, 149)); + _actor6.setDetails(3100, 6, -1, -1, 2, NULL); + + _actor4.postInit(); + _actor4.setup(3103, 1, 1); + _actor4.setPosition(Common::Point(278, 113)); + _actor4.setDetails(3100, 9, -1, -1, 2, NULL); + _actor4.animate(ANIM_MODE_2, NULL); + + _actor1.postInit(); + _actor1.setup(3104, 4, 1); + _actor1.setPosition(Common::Point(143, 104)); + _actor1.setDetails(3100, 3, -1, -1, 2, NULL); + + R2_GLOBALS._player.setup(3110, 3, 1); + R2_GLOBALS._player.changeZoom(50); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(160, 150)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + + R2_GLOBALS._sound1.play(243); + } + + R2_GLOBALS._player._oldCharacterScene[1] = 3100; +} + +void Scene3100::remove() { + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._sound2.fadeOut2(NULL); + _sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3100::signal() { + switch (_sceneMode) { + case 10: + warning("TODO: Unknown cursor used (6/-6)"); + R2_GLOBALS._player.enableControl(); + break; + case 3100: + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + case 3101: + R2_GLOBALS._sceneManager.changeScene(1000); + break; + case 3102: + R2_GLOBALS._player._oldCharacterScene[1] = 1000; + R2_GLOBALS._sceneManager.changeScene(1000); + break; + default: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } +} + +void Scene3100::dispatch() { + if ((_sceneMode == 3100) && (_field412 != 0) && (R2_GLOBALS._player._position.y == 104)) { + _field412 = 0; + R2_GLOBALS._sound2.fadeOut2(NULL); + } + + if ((_sceneMode == 3101) && (_field412 != 0) && (R2_GLOBALS._player._position.y < 104)) { + _field412 = 0; + _sound1.fadeSound(130); + } + + Scene::dispatch(); +} + +} // End of namespace Ringworld2 +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h new file mode 100644 index 0000000000..fe00e2cf09 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -0,0 +1,73 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD2_SCENES3_H +#define TSAGE_RINGWORLD2_SCENES3_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" +#include "tsage/ringworld2/ringworld2_logic.h" +#include "tsage/ringworld2/ringworld2_speakers.h" + +namespace TsAGE { + +namespace Ringworld2 { + +using namespace TsAGE; + + +class Scene3100 : public SceneExt { + class Actor6 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; +public: + + int _field412; + SpeakerGuard3100 _guardSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + Actor6 _actor6; + ASoundExt _sound1; + SequenceManager _sequenceManager; + + Scene3100(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + +} // End of namespace Ringworld2 +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 35de45d8e6..3ec1df41d0 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1039,5 +1039,18 @@ void SpeakerGuard2800::proc15() { _object1.animate(ANIM_MODE_5, this); } } + +SpeakerGuard3100::SpeakerGuard3100() { + _speakerName = "GUARD"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 31eda2431c..1d99a54e7c 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -261,6 +261,13 @@ public: virtual Common::String getClassName() { return "SpeakerGuard2800"; } virtual void proc15(); }; + +class SpeakerGuard3100 : public VisualSpeaker { +public: + SpeakerGuard3100(); + + virtual Common::String getClassName() { return "SpeakerGuard3100"; } +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 7d580ee37e73673e15eaf9052e8491ec721a052d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 19 Dec 2011 22:28:25 +1100 Subject: TSAGE: Implemented R2R Scene 800 - Sickbay --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 284 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 49 ++++ 3 files changed, 336 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 689b2b5f0f..42f3b16d7f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -76,7 +76,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 525: case 600: case 700: + error("Missing scene %d from group 0", sceneNumber); case 800: + // Sick bay + return new Scene800(); case 825: error("Missing scene %d from group 0", sceneNumber); case 850: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 7a3b0cdd78..ceca8915d8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -2900,6 +2900,290 @@ void Scene400::dispatch() { } } +/*-------------------------------------------------------------------------- + * Scene 800 - Sick Bay + * + *--------------------------------------------------------------------------*/ + +bool Scene800::Button::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) { + return NamedHotspot::startAction(action, event); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 802; + scene->setAction(&scene->_sequenceManager1, scene, 802, &R2_GLOBALS._player, &scene->_autodocCover, NULL); + return true; + } +} + +bool Scene800::CableJunction::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + if (action != R2_OPTICAL_FIBRE) { + return NamedHotspot::startAction(action, event); + } else { + R2_GLOBALS._player.disableControl(); + scene->_opticalFibre.postInit(); + scene->_sceneMode = 803; + + if (R2_INVENTORY.getObjectScene(R2_READER) == 800) + scene->setAction(&scene->_sequenceManager1, scene, 813, &R2_GLOBALS._player, &scene->_opticalFibre, &scene->_reader, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 803, &R2_GLOBALS._player, &scene->_opticalFibre, NULL); + + return true; + } +} + +bool Scene800::DeviceSlot::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (R2_INVENTORY.getObjectScene(R2_READER) != 800) + break; + + R2_GLOBALS._player.disableControl(); + scene->_reader.postInit(); + + if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) + scene->setAction(&scene->_sequenceManager1, scene, 814, &R2_GLOBALS._player, &scene->_reader, &scene->_opticalFibre, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 804, &R2_GLOBALS._player, &scene->_reader, NULL); + return true; + default: + break; + } + + return NamedHotspot::startAction(action, event); +} + +/*--------------------------------------------------------------------------*/ + +bool Scene800::Door::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 801; + scene->setAction(&scene->_sequenceManager1, scene, 801, &R2_GLOBALS._player, &scene->_door, NULL); + return true; + default: + return SceneActor::startAction(action, event); + } +} + +bool Scene800::Tray::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (!R2_GLOBALS.getFlag(10)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 806; + scene->setAction(&scene->_sequenceManager1, scene, 806, &R2_GLOBALS._player, &scene->_tray, NULL); + } else if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 825) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 808; + scene->setAction(&scene->_sequenceManager1, scene, 808, &R2_GLOBALS._player, &scene->_tray, NULL); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 807; + scene->setAction(&scene->_sequenceManager1, scene, 807, &R2_GLOBALS._player, &scene->_tray, NULL); + } + return true; + default: + return SceneActor::startAction(action, event); + } +} + +bool Scene800::ComScanner::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (scene->_cabinet._frame == 1) + return false; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 811; + scene->setAction(&scene->_sequenceManager1, scene, 811, &R2_GLOBALS._player, &scene->_comScanner, NULL); + return true; + case CURSOR_TALK: + SceneItem::display2(800, 35); + return true; + default: + return SceneActor::startAction(action, event); + } +} + +bool Scene800::Cabinet::startAction(CursorType action, Event &event) { + Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + R2_GLOBALS._player.disableControl(); + + if (scene->_cabinet._frame == 1) { + scene->_sceneMode = 810; + scene->setAction(&scene->_sequenceManager1, scene, 810, &R2_GLOBALS._player, &scene->_cabinet, NULL); + R2_GLOBALS.setFlag(56); + } else { + scene->_sceneMode = 812; + scene->setAction(&scene->_sequenceManager1, scene, 812, &R2_GLOBALS._player, &scene->_cabinet, NULL); + R2_GLOBALS.clearFlag(56); + } + return true; + default: + return SceneActor::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene800::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(800); + + _door.postInit(); + _door.setVisage(800); + _door.setPosition(Common::Point(286, 108)); + _door.fixPriority(50); + _door.setDetails(800, 3, -1, -1, 1, NULL); + + _autodocCover.postInit(); + _autodocCover.setup(800, 2, 1); + _autodocCover.setPosition(Common::Point(119, 161)); + _autodocCover.setDetails(800, 6, 7, -1, 1, NULL); + + if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) { + _opticalFibre.postInit(); + if (R2_INVENTORY.getObjectScene(R2_READER) == 800) + _opticalFibre.setup(800, 4, 1); + else + _opticalFibre.setup(800, 7, 2); + + _opticalFibre.setPosition(Common::Point(220, 124)); + _opticalFibre.fixPriority(140); + } + + if (R2_INVENTORY.getObjectScene(R2_READER) == 800) { + _reader.postInit(); + + if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) { + _opticalFibre.setup(800, 4, 1); + _reader.hide(); + } else { + _reader.setup(800, 7, 1); + } + + _reader.setPosition(Common::Point(230, 120)); + _reader.fixPriority(140); + } + + _cabinet.postInit(); + _cabinet.setup(801, 1, R2_GLOBALS.getFlag(56) ? 6 : 1); + _cabinet.setPosition(Common::Point(169, 79)); + _cabinet.setDetails(800, 41, -1, -1, 1, NULL); + + if (R2_INVENTORY.getObjectScene(R2_9) == 800) { + _comScanner.postInit(); + _comScanner.setup(801, 2, 1); + _comScanner.setPosition(Common::Point(174, 73)); + _comScanner.setDetails(800, 34, 35, -1, 1, NULL); + } + + _tray.postInit(); + _tray.setup(800, R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 825 ? 6 : 5, 1); + if (R2_GLOBALS.getFlag(10)) + _tray.setFrame(5); + _tray.setPosition(Common::Point(203, 144)); + _tray.setDetails(800, 12, -1, 14, 1, NULL); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _dataConduits.setDetails(13, 800, 21, -1, -1); + _cableJunction.setDetails(Rect(206, 111, 223, 125), 800, 24, -1, -1, 1, NULL); + _deviceSlot.setDetails(Rect(220, 108, 239, 122), 800, 27, -1, -1, 1, NULL); + _diskSlot.setDetails(Rect(209, 124, 226, 133), 800, 9, -1, 11, 1, NULL); + + if (R2_INVENTORY.getObjectScene(R2_READER) == 800) + _deviceSlot._lookLineNum = 33; + + _button.setDetails(Rect(189, 112, 204, 124), 800, 30, -1, -1, 1, NULL); + _couch.setDetails(11, 800, 15, -1, 17); + _autoDoc.setDetails(Rect(152, 92, 247, 151), 800, 6, 7, -1, 1, NULL); + _medicalDatabase.setDetails(12, 800, 18, -1, -1); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 800, 0, -1, -1, 1, NULL); + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 825: + _sceneMode = 800; + setAction(&_sequenceManager1, this, 805, &R2_GLOBALS._player, &_autodocCover, NULL); + break; + case 850: + _sceneMode = 800; + setAction(&_sequenceManager1, this, 800, &R2_GLOBALS._player, &_door, NULL); + break; + default: + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(277, 132)); + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene800::signal() { + switch (_sceneMode) { + case 801: + R2_GLOBALS._sceneManager.changeScene(850); + break; + case 802: + R2_GLOBALS._sceneManager.changeScene(825); + break; + case 803: + R2_GLOBALS._player.enableControl(); + R2_INVENTORY.setObjectScene(R2_OPTICAL_FIBRE, 800); + break; + case 804: + R2_GLOBALS._player.enableControl(); + _deviceSlot._lookLineNum = 33; + R2_INVENTORY.setObjectScene(R2_READER, 800); + break; + case 806: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS.setFlag(10); + break; + case 807: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS.clearFlag(10); + break; + case 808: + R2_GLOBALS._player.enableControl(); + R2_INVENTORY.setObjectScene(R2_OPTO_DISK, 1); + break; + case 809: + R2_GLOBALS._player.enableControl(); + R2_INVENTORY.setObjectScene(R2_READER, 1); + break; + case 811: + R2_GLOBALS._player.enableControl(); + _comScanner.remove(); + R2_INVENTORY.setObjectScene(R2_9, 1); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + + /*-------------------------------------------------------------------------- * Scene 850 - Deck #5 - By Lift * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 5f2d768f90..6810b5d85a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -370,6 +370,55 @@ public: virtual void dispatch(); }; +class Scene800: public SceneExt { + /* Items */ + class Button: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class CableJunction: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class DeviceSlot: public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Objects */ + class Door: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Tray: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class ComScanner: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Cabinet: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + NamedHotspot _background, _autoDoc, _diskSlot, _couch; + NamedHotspot _medicalDatabase, _dataConduits; + Button _button; + CableJunction _cableJunction; + DeviceSlot _deviceSlot; + SceneActor _autodocCover, _opticalFibre, _reader; + Door _door; + Tray _tray; + ComScanner _comScanner; + Cabinet _cabinet; + SequenceManager _sequenceManager1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + class Scene850: public SceneExt { /* Items */ class Indicator: public NamedHotspot { -- cgit v1.2.3 From 9a40cd8fd784bbb52186f8dc14bbea8198e1a239 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 19 Dec 2011 23:15:42 +0100 Subject: TSAGE: R2R - Implement scene 3125 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 169 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 38 ++++++ 3 files changed, 209 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 42f3b16d7f..e5a3919c05 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -175,6 +175,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3100: return new Scene3100(); case 3125: + // Ghouls dormitory + return new Scene3125(); case 3150: case 3175: case 3200: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 22e58b6d2b..488fda5d59 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -202,5 +202,174 @@ void Scene3100::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 3125 - Ghouls dormitory + * + *--------------------------------------------------------------------------*/ +Scene3125::Scene3125() { + _field412 = 0; +} + +void Scene3125::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + +bool Scene3125::Item1::startAction(CursorType action, Event &event) { + Scene3125 *scene = (Scene3125 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (_useLineNum != -1) + SceneItem::display(_resNum, _useLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + case CURSOR_LOOK: + if (_lookLineNum != -1) + SceneItem::display(_resNum, _lookLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + case CURSOR_TALK: + if (_talkLineNum != -1) + SceneItem::display(_resNum, _talkLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + default: + warning("scene->display() called with two parameters"); + return scene->display(action); + break; + } + + return true; +} + +bool Scene3125::Item2::startAction(CursorType action, Event &event) { + Scene3125 *scene = (Scene3125 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3125; + scene->setAction(&scene->_sequenceManager1, scene, 3125, &R2_GLOBALS._player, NULL); + break; + case CURSOR_LOOK: + SceneItem::display(3125, 15, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + case CURSOR_TALK: + SceneItem::display(3125, 13, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + default: + return SceneHotspot::startAction(action, event); + break; + } + + return true; +} + +bool Scene3125::Item3::startAction(CursorType action, Event &event) { + Scene3125 *scene = (Scene3125 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + R2_GLOBALS._player.disableControl(); + scene->_actor5.postInit(); + scene->_sceneMode = 3126; + scene->setAction(&scene->_sequenceManager1, scene, 3126, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor3, &scene->_actor4, &scene->_actor1, &scene->_actor5, NULL); + break; + case CURSOR_LOOK: + SceneItem::display(3125, 9, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + case CURSOR_TALK: + SceneItem::display(3125, 13, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + default: + return SceneHotspot::startAction(action, event); + break; + } + + return true; +} + +bool Scene3125::Actor1::startAction(CursorType action, Event &event) { + Scene3125 *scene = (Scene3125 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3176; + scene->setAction(&scene->_sequenceManager1, scene, 3176, &R2_GLOBALS._player, &scene->_actor1, NULL); + return true; +} + +void Scene3125::postInit(SceneObjectList *OwnerList) { + loadScene(3125); + SceneExt::postInit(); + _field412 = 0; + + _actor1.postInit(); + _actor1.setup(3175, 1, 1); + _actor1.setPosition(Common::Point(35, 72)); + _actor1.setDetails(3125, 12, 13, -1, 1, NULL); + + _actor2.postInit(); + _actor2.setup(3126, 4, 1); + _actor2.setPosition(Common::Point(71, 110)); + _actor2._numFrames = 20; + + _actor3.postInit(); + _actor3.setup(3126, 1, 1); + _actor3.setPosition(Common::Point(215, 62)); + _actor3.fixPriority(71); + + _actor4.postInit(); + _actor4.setup(3126, 1, 1); + _actor4.setPosition(Common::Point(171, 160)); + _actor4.fixPriority(201); + + _item3.setDetails(12, 3125, 9, 13, -1); + _item2.setDetails(11, 3125, 15, 13, -1); + _item1.setDetails(Rect(0, 0, 320, 200), 3125, 0, 1, 2, 1, NULL); + + R2_GLOBALS._sound1.play(262); + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._player._oldCharacterScene[3] == 3250) { + _sceneMode = 3175; + setAction(&_sequenceManager1, this, 3175, &R2_GLOBALS._player, &_actor1, NULL); + } else { + R2_GLOBALS._player.setup(30, 5, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(89, 76)); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[3] = 3125; +} + +void Scene3125::signal() { + switch (_sceneMode) { + case 3125: + SceneItem::display(3125, 3, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + _sceneMode = 3127; + setAction(&_sequenceManager1, this, 3127, &R2_GLOBALS._player, NULL); + break; + case 3126: + R2_GLOBALS.setFlag(79); + // No break on purpose + case 3176: + R2_GLOBALS._sceneManager.changeScene(3250); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene3125::dispatch() { + if ((_sceneMode == 3126) && (_actor2._frame == 2) && (_field412 == 0)) { + _field412 = 1; + R2_GLOBALS._sound1.play(265); + } + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index fe00e2cf09..b135ddc0a3 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -67,6 +67,44 @@ public: virtual void synchronize(Serializer &s); }; +class Scene3125 : public SceneExt { + class Item1 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item2 : public Item1 { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item3 : public Item1 { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor1 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; +public: + + int _field412; + Item1 _item1; + Actor1 _actor1; + Item2 _item2; + Item3 _item3; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SequenceManager _sequenceManager1; + // Second sequence manager... Unused? + SequenceManager _sequenceManager2; + + Scene3125(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 62f4bb6ac1c8910381ef5579f718b692e93b9770 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 20 Dec 2011 23:56:26 +0100 Subject: TSAGE: R2R - Implement scene 3150 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 422 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 54 +++ 3 files changed, 478 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e5a3919c05..0248a3c32d 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -178,6 +178,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Ghouls dormitory return new Scene3125(); case 3150: + // Jail + return new Scene3150(); case 3175: case 3200: case 3210: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 488fda5d59..2c2530f833 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -371,5 +371,427 @@ void Scene3125::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 3150 - Jail + * + *--------------------------------------------------------------------------*/ +bool Scene3150::Item5::startAction(CursorType action, Event &event) { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (R2_INVENTORY.getObjectScene(47) != 3150) + return SceneHotspot::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3154; + scene->setAction(&scene->_sequenceManager, scene, 3154, &R2_GLOBALS._player, &scene->_actor3, NULL); + return true; + case R2_40: + if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_GLOBALS.getFlag(75))) { + R2_GLOBALS._player.disableControl(); + scene->_actor3.postInit(); + scene->_actor3._effect = 3; + scene->_actor3._shade = 5; + scene->_sceneMode = 3155; + scene->setAction(&scene->_sequenceManager, scene, 3155, &R2_GLOBALS._player, &scene->_actor3, NULL); + } else { + SceneItem::display(3150, 42, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + return true; + default: + return SceneHotspot::startAction(action, event); + break; + } +} + +bool Scene3150::Item6::startAction(CursorType action, Event &event) { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case R2_41: + R2_GLOBALS._player.disableControl(); + scene->_actor4.postInit(); + scene->_actor4._effect = 6; + scene->_actor4._shade = 3; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3158; + scene->setAction(&scene->_sequenceManager, scene, 3158, &R2_GLOBALS._player, &scene->_actor4, NULL); + return true; + case R2_42: + if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_INVENTORY.getObjectScene(40) == 3150) && (R2_GLOBALS.getFlag(75))) { + scene->_actor5.postInit(); + scene->_actor5._effect = 6; + scene->_actor5._shade = 3; + scene->_actor5.setDetails(3150, 30, -1, -1, 2, NULL); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3159; + scene->setAction(&scene->_sequenceManager, scene, 3159, &R2_GLOBALS._player, &scene->_actor5, NULL); + } else { + SceneItem::display(3150, 42, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + default: + return SceneHotspot::startAction(action, event); + break; + } +} + +bool Scene3150::Actor4::startAction(CursorType action, Event &event) { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (R2_GLOBALS.getFlag(75)) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3151; + scene->setAction(&scene->_sequenceManager, scene, 3151, &R2_GLOBALS._player, &scene->_actor4, NULL); + return true; + case R2_42: + return false; + default: + return SceneActor::startAction(action, event); + break; + } +} + +bool Scene3150::Actor5::startAction(CursorType action, Event &event) { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + if ((action != CURSOR_USE) || (R2_GLOBALS.getFlag(77))) + return SceneActor::startAction(action ,event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3157; + scene->setAction(&scene->_sequenceManager, scene, 3157, &R2_GLOBALS._player, &scene->_actor5, NULL); + return true; +} + +bool Scene3150::Actor6::startAction(CursorType action, Event &event) { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + if (R2_GLOBALS.getFlag(75)) { + if (R2_GLOBALS.getFlag(77)) { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS.getFlag(76)) { + scene->_sceneMode = 3152; + scene->setAction(&scene->_sequenceManager, scene, 3152, &R2_GLOBALS._player, NULL); + } else { + scene->_sceneMode = 3153; + scene->setAction(&scene->_sequenceManager, scene, 3152, &R2_GLOBALS._player, &scene->_actor4, NULL); + } + } else { + SceneItem::display(3150, 42, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3152; + scene->setAction(&scene->_sequenceManager, scene, 3152, &R2_GLOBALS._player, NULL); + } + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene3150::Actor7::startAction(CursorType action, Event &event) { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + if ((action == R2_43) && (!R2_GLOBALS.getFlag(80))) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3160; + scene->setAction(&scene->_sequenceManager, scene, 3160, &R2_GLOBALS._player, &scene->_actor7, NULL); + return true; + } + + return SceneActor::startAction(action, event); +} + +void Scene3150::Exit1::changeScene() { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + g_globals->_events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 11; + + Common::Point pt(-20, 180); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3150::Exit2::changeScene() { + Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + g_globals->_events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 12; + + scene->setAction(&scene->_sequenceManager, scene, 3163, &R2_GLOBALS._player, NULL); +} + +void Scene3150::postInit(SceneObjectList *OwnerList) { + loadScene(3150); + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_INVENTORY.setObjectScene(35, 2000); + R2_GLOBALS._player._oldCharacterScene[1] = 3100; + R2_GLOBALS._player._oldCharacterScene[3] = 0; + R2_GLOBALS._player._characterIndex = R2_MIRANDA; + } + SceneExt::postInit(); + + if (R2_GLOBALS.getFlag(78)) { + _exit1.setDetails(Rect(0, 135, 60, 168), EXITCURSOR_SW, 3275); + _exit1.setDest(Common::Point(70, 125)); + } + + if (R2_GLOBALS.getFlag(80)) { + _exit2.setDetails(Rect(249, 36, 279, 60), EXITCURSOR_NE, 3150); + _exit2.setDest(Common::Point(241, 106)); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + + _actor2.postInit(); + _actor2.setPosition(Common::Point(64, 139)); + if (R2_GLOBALS.getFlag(78)) { + _actor2.setup(3151, 1, 5); + _actor2.fixPriority(125); + } else { + _actor2.setup(3151, 1, 1); + _actor2.setDetails(3150, 8, -1, 9, 1, NULL); + } + + if (R2_GLOBALS.getFlag(78)) { + _actor1.postInit(); + _actor1.setup(3154, 1, 16); + _actor1.setPosition(Common::Point(104, 129)); + _actor1._effect = 6; + _actor1._shade = 3; + _actor1.setDetails(3150, 24, -1, -1, -1, NULL); + } + + _actor7.postInit(); + _actor7.setup(3154, 5, 1); + if (R2_GLOBALS.getFlag(80)) + _actor7.setPosition(Common::Point(264, 108)); + else + _actor7.setPosition(Common::Point(264, 58)); + _actor7.fixPriority(50); + _actor7.setDetails(3150, 17, -1, 19, 1, NULL); + + if (R2_INVENTORY.getObjectScene(41) == 3150) { + _actor4.postInit(); + if (R2_GLOBALS.getFlag(75)) { + if (R2_GLOBALS.getFlag(76)) { + R2_GLOBALS._walkRegions.enableRegion(1); + R2_GLOBALS._walkRegions.enableRegion(4); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + _actor4.setup(3152, 4, 10); + _actor4.setDetails(3150, 14, -1, -1, 1, NULL); + } else { + _actor4.setup(3152, 7, 4); + _actor4.setDetails(3150, 13, -1, -1, 1, NULL); + } + _actor4.fixPriority(110); + _actor4.setPosition(Common::Point(83, 88)); + _actor4._effect = 6; + _actor4._shade = 3; + } else { + _actor4.setup(3152, 7, 3); + _actor4.setPosition(Common::Point(143, 70)); + _actor4.setDetails(3150, 15, -1, -1, 1, NULL); + } + } + + if (R2_INVENTORY.getObjectScene(47) == 3150) { + _actor3.postInit(); + _actor3.setup(3152, 7, 1); + _actor3.setPosition(Common::Point(73, 83)); + } + + if (R2_INVENTORY.getObjectScene(40) == 3150) { + _actor3.postInit(); + _actor3.setup(3152, 7, 3); + _actor3.setPosition(Common::Point(70, 55)); + _actor3.fixPriority(111); + _actor3._effect = 6; + _actor3._shade = 5; + } + + if (R2_INVENTORY.getObjectScene(42) == 3150) { + _actor5.postInit(); + if (R2_GLOBALS.getFlag(77)) { + _actor5.setup(3152, 7, 8); + _actor5.setPosition(Common::Point(82, 92)); + _actor5.fixPriority(111); + _actor5._effect = 6; + _actor5._shade = 3; + } else { + _actor5.setup(3152, 7, 7); + _actor5.setPosition(Common::Point(155, 79)); + } + _actor5.setDetails(3150, 30, -1, -1, 2, NULL); + } + + _actor6.postInit(); + _actor6.setup(3152, 7, 6); + _actor6.setPosition(Common::Point(98, 73)); + _actor6.setDetails(3150, 43, -1, -1, 1, NULL); + + _item2.setDetails(12, 3150, 10, -1, 12); + _item3.setDetails(Rect(186, 17, 210, 36), 3150, 6, -1, -1, 1, NULL); + _item4.setDetails(Rect(61, 21, 92, 41), 3150, 7, -1, -1, 1, NULL); + _item5.setDetails(Rect(63, 48, 78, 58), 3150, 6, -1, -1, 1, NULL); + _item6.setDetails(Rect(63, 81, 100, 95), 3150, 3, 4, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 200, 320), 3150, 0, 1, 2, 1, NULL); + + switch (R2_GLOBALS._player._oldCharacterScene[3]) { + case 0: + _sceneMode = 3150; + _actor1.postInit(); + _actor1._effect = 6; + _actor1._shade = 5; + setAction(&_sequenceManager, this, 3150, &R2_GLOBALS._player, &_actor1, &_actor2, NULL); + break; + case 1200: + _sceneMode = 3162; + setAction(&_sequenceManager, this, 3162, &R2_GLOBALS._player, NULL); + break; + case 3275: { + _sceneMode = 10; + R2_GLOBALS._player.setup(30, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(-20, 180)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + + Common::Point pt(80, 125); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + break; + } + default: + if ((R2_GLOBALS._v56AA0 == 1) && (R2_INVENTORY.getObjectScene(35) == 2000) && (R2_GLOBALS._player._oldCharacterScene[1] == 3100)) { + ++R2_GLOBALS._v56AA0; + _sceneMode = 3156; + _actor1.postInit(); + _actor1._effect = 6; + _actor1._shade = 3; + + _actor2.postInit(); + _actor5.postInit(); + _actor5._effect = 6; + _actor5._shade = 3; + + setAction(&_sequenceManager, this, 3156, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor5, NULL); + } else { + if (R2_GLOBALS._v56AA0 != 2) + ++R2_GLOBALS._v56AA0; + + R2_GLOBALS._player.setup(30, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(155, 120)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.enableControl(); + } + } + + R2_GLOBALS._player._oldCharacterScene[3] = 3150; +} + +void Scene3150::signal() { + switch (_sceneMode) { + case 11: + R2_GLOBALS._sceneManager.changeScene(3275); + break; + case 12: + R2_GLOBALS._sceneManager.changeScene(1200); + break; + case 3151: + _actor1.remove(); + R2_INVENTORY.setObjectScene(41, 3); + R2_GLOBALS._player.enableControl(); + break; + case 3153: + R2_GLOBALS.setFlag(76); + _actor4.setDetails(3150, 14, -1, -1, 3, NULL); + _actor1.postInit(); + _actor1.setDetails(3150, 24, -1, -1, 2, NULL); + _sceneMode = 3161; + setAction(&_sequenceManager, this, 3161, &_actor1, &_actor2, NULL); + break; + case 3154: + _actor3.remove(); + R2_INVENTORY.setObjectScene(47, 3); + R2_GLOBALS._player.enableControl(); + break; + case 3155: + R2_INVENTORY.setObjectScene(40, 3150); + R2_GLOBALS._player.enableControl(); + break; + case 3156: + _actor5.setDetails(3150, 30, -1, -1, 2, NULL); + R2_INVENTORY.setObjectScene(42, 3150); + R2_GLOBALS._player.enableControl(); + break; + case 3157: + _actor5.remove(); + R2_INVENTORY.setObjectScene(42, 3); + R2_GLOBALS._player.enableControl(); + break; + case 3158: + R2_GLOBALS.setFlag(75); + R2_INVENTORY.setObjectScene(41, 3150); + _actor4.fixPriority(110); + _actor4.setDetails(3150, 13, -1, -1, 2, NULL); + R2_GLOBALS._player.enableControl(); + break; + case 3159: + R2_GLOBALS.setFlag(77); + R2_INVENTORY.setObjectScene(42, 3150); + R2_GLOBALS._player.enableControl(); + break; + case 3160: + R2_INVENTORY.setObjectScene(52, 3150); + R2_GLOBALS.setFlag(80); + R2_GLOBALS._sceneManager.changeScene(1200); + break; + case 3161: + R2_GLOBALS._sceneItems.remove(&_actor2); + _exit1.setDetails(Rect(0, 135, 60, 168), EXITCURSOR_SW, 3275); + _exit1.setDest(Common::Point(70, 125)); + R2_GLOBALS._walkRegions.enableRegion(1); + R2_GLOBALS._walkRegions.enableRegion(4); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS.setFlag(78); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene3150::dispatch() { + if (_actor5._position.x == 155) { + _actor5._effect = 0; + _actor5._shade = 0; + } + + if (_actor1._visage == 3154) { + _actor1._effect = 0; + _actor1._shade = 0; + } + + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index b135ddc0a3..cdbf4359b0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -105,6 +105,60 @@ public: virtual void dispatch(); virtual void synchronize(Serializer &s); }; + +class Scene3150 : public SceneExt { + class Item5 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item6 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor5 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor6 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor7 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + Item5 _item5; + Item6 _item6; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Actor4 _actor4; + Actor5 _actor5; + Actor6 _actor6; + Actor7 _actor7; + Exit1 _exit1; + Exit2 _exit2; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 53929044a66005031658657f5ede8931979f9104 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 21 Dec 2011 22:42:16 +0100 Subject: TSAGE: R2R - Implement scene 3175 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 130 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 26 +++++ 3 files changed, 158 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0248a3c32d..d84e4eb6e0 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -181,6 +181,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Jail return new Scene3150(); case 3175: + // Autopsy room + return new Scene3175(); case 3200: case 3210: case 3220: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 2c2530f833..cdb4bee493 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -793,5 +793,135 @@ void Scene3150::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 3175 - Autopsy room + * + *--------------------------------------------------------------------------*/ +bool Scene3175::Item1::startAction(CursorType action, Event &event) { + Scene3175 *scene = (Scene3175 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (_useLineNum != -1) { + SceneItem::display(_resNum, _useLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + case CURSOR_LOOK: + if (_lookLineNum != -1) { + SceneItem::display(_resNum, _lookLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + case CURSOR_TALK: + if (_talkLineNum != -1) { + SceneItem::display(_resNum, _talkLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + default: + break; + } + warning("scene->display() called with two parameters"); + return scene->display(action); +} + +bool Scene3175::Actor3::startAction(CursorType action, Event &event) { + Scene3175 *scene = (Scene3175 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (_useLineNum != -1) { + SceneItem::display(_resNum, _useLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + case CURSOR_LOOK: + if (_lookLineNum != -1) { + SceneItem::display(_resNum, _lookLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + case CURSOR_TALK: + if (_talkLineNum != -1) { + SceneItem::display(_resNum, _talkLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + default: + break; + } + warning("scene->display() called with two parameters"); + return scene->display(action); +} + +bool Scene3175::Actor1::startAction(CursorType action, Event &event) { + Scene3175 *scene = (Scene3175 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3176; + scene->setAction(&scene->_sequenceManager, scene, 3176, &R2_GLOBALS._player, &scene->_actor1, NULL); + return true; + break; + case CURSOR_LOOK: + SceneItem::display(3175, 9, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + break; + case CURSOR_TALK: + SceneItem::display(3175, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +void Scene3175::postInit(SceneObjectList *OwnerList) { + loadScene(3175); + SceneExt::postInit(); + + _actor1.postInit(); + _actor1.setup(3175, 1, 1); + _actor1.setPosition(Common::Point(35, 72)); + _actor1.setDetails(3175, 9, 10, -1, 1, NULL); + + _actor2.postInit(); + _actor2.setup(3175, 2, 1); + _actor2.setPosition(Common::Point(87, 148)); + + _actor3.postInit(); + _actor3.setup(3175, 3, 1); + _actor3.setPosition(Common::Point(199, 117)); + _actor3.setDetails(3175, 15, 16, 17, 1, NULL); + + _item2.setDetails(12, 3175, 3, 1, 5); + _item3.setDetails(11, 3175, 6, 7, 8); + _item1.setDetails(Rect(0, 0, 320, 200), 3175, 0, 1, 2, 1, NULL); + + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._player._oldCharacterScene[3] == 3250) { + R2_GLOBALS._player.setup(30, 5, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(126, 77)); + R2_GLOBALS._player.enableControl(); + } else { + _sceneMode = 3175; + setAction(&_sequenceManager, this, 3175, &R2_GLOBALS._player, &_actor1, NULL); + } + + R2_GLOBALS._player._oldCharacterScene[3] = 3175; +} + +void Scene3175::signal() { + if (_sceneMode == 3176) + R2_GLOBALS._sceneManager.changeScene(3250); + else + R2_GLOBALS._player.enableControl(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index cdbf4359b0..67c430cdfd 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -159,6 +159,32 @@ public: virtual void signal(); virtual void dispatch(); }; + +class Scene3175 : public SceneExt { + class Item1 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor3 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor1 : public Actor3 { + virtual bool startAction(CursorType action, Event &event); + }; +public: + + Item1 _item1; + Item1 _item2; + Item1 _item3; + Actor1 _actor1; + SceneActor _actor2; + Actor3 _actor3; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From d49ffde8eae1fd311e4c0f800e9a5bad57381204 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 00:30:49 +0100 Subject: TSAGE: R2R - Implement scene 3200 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 28 ++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 14 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 106 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 25 ++++++ 5 files changed, 175 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d84e4eb6e0..386d09f6db 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -184,6 +184,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Autopsy room return new Scene3175(); case 3200: + // Cutscene : Guard discussion + return new Scene3200(); case 3210: case 3220: case 3230: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index cdb4bee493..c73cb8547e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -923,5 +923,33 @@ void Scene3175::signal() { R2_GLOBALS._player.enableControl(); } +/*-------------------------------------------------------------------------- + * Scene 3200 - Cutscene : Guard discussion + * + *--------------------------------------------------------------------------*/ +void Scene3200::postInit(SceneObjectList *OwnerList) { + loadScene(3200); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_rockoSpeaker); + _stripManager.addSpeaker(&_jockoSpeaker); + _stripManager.addSpeaker(&_sockoSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor3.postInit(); + _actor2.postInit(); + + setAction(&_sequenceManager, this, 3200 + R2_GLOBALS._randomSource.getRandomNumber(1), &_actor1, &_actor2, &_actor3, NULL); +} + +void Scene3200::signal() { + R2_GLOBALS._sceneManager.changeScene(1200); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 67c430cdfd..58ba4cc590 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -185,6 +185,20 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3200 : public SceneExt { +public: + SpeakerRocko3200 _rockoSpeaker; + SpeakerJocko3200 _jockoSpeaker; + SpeakerSocko3200 _sockoSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 3ec1df41d0..b3a15a84d3 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -27,6 +27,7 @@ #include "tsage/staticres.h" #include "tsage/ringworld2/ringworld2_scenes0.h" #include "tsage/ringworld2/ringworld2_scenes2.h" +#include "tsage/ringworld2/ringworld2_scenes3.h" namespace TsAGE { @@ -1052,5 +1053,110 @@ SpeakerGuard3100::SpeakerGuard3100() { _numFrames = 0; } +SpeakerRocko3200::SpeakerRocko3200() { + _speakerName = "Rocko"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerRocko3200::proc15() { + int v = _fieldF6; + Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerJocko3200::SpeakerJocko3200() { + _speakerName = "Jocko"; + _color1 = 45; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerJocko3200::proc15() { + int v = _fieldF6; + Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerSocko3200::SpeakerSocko3200() { + _speakerName = "Socko"; + _color1 = 10; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSocko3200::proc15() { + int v = _fieldF6; + Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 1d99a54e7c..38a097bc61 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -268,6 +268,31 @@ public: virtual Common::String getClassName() { return "SpeakerGuard3100"; } }; + +class SpeakerRocko3200 : public VisualSpeaker { +public: + SpeakerRocko3200(); + + virtual Common::String getClassName() { return "SpeakerRocko3200"; } + virtual void proc15(); +}; + +class SpeakerJocko3200 : public VisualSpeaker { +public: + SpeakerJocko3200(); + + virtual Common::String getClassName() { return "SpeakerJocko3200"; } + virtual void proc15(); +}; + +class SpeakerSocko3200 : public VisualSpeaker { +public: + SpeakerSocko3200(); + + virtual Common::String getClassName() { return "SpeakerSocko3200"; } + virtual void proc15(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 877b6e9b1d5ca0cb47e1845c57cc7340b924a5eb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 07:44:58 +0100 Subject: TSAGE: R2R - Implement scene 3210 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 4 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 27 ++++++++- engines/tsage/ringworld2/ringworld2_scenes3.h | 12 ++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 70 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 ++++++ 5 files changed, 127 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 386d09f6db..0844a48ed8 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -184,9 +184,11 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Autopsy room return new Scene3175(); case 3200: - // Cutscene : Guard discussion + // Cutscene : Cutscene : Rocko & co - Discussion return new Scene3200(); case 3210: + // Cutscene : Captain and Private - Discussion + return new Scene3210(); case 3220: case 3230: case 3240: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index c73cb8547e..8ea83a2527 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -924,7 +924,7 @@ void Scene3175::signal() { } /*-------------------------------------------------------------------------- - * Scene 3200 - Cutscene : Guard discussion + * Scene 3200 - Cutscene : Rocko & co - Discussion * *--------------------------------------------------------------------------*/ void Scene3200::postInit(SceneObjectList *OwnerList) { @@ -951,5 +951,30 @@ void Scene3200::signal() { R2_GLOBALS._sceneManager.changeScene(1200); } +/*-------------------------------------------------------------------------- + * Scene 3210 - Cutscene : Captain and Private - Discussion + * + *--------------------------------------------------------------------------*/ +void Scene3210::postInit(SceneObjectList *OwnerList) { + loadScene(3210); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_privateSpeaker); + _stripManager.addSpeaker(&_captainSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor2.postInit(); + + setAction(&_sequenceManager, this, 3210 + R2_GLOBALS._randomSource.getRandomNumber(1), &_actor1, &_actor2, NULL); +} + +void Scene3210::signal() { + R2_GLOBALS._sceneManager.changeScene(1200); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 58ba4cc590..fbb6392be4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -199,6 +199,18 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3210 : public SceneExt { +public: + SpeakerCaptain3210 _captainSpeaker; + SpeakerPrivate3210 _privateSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index b3a15a84d3..80ac04c403 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1158,5 +1158,75 @@ void SpeakerSocko3200::proc15() { } } +SpeakerCaptain3210::SpeakerCaptain3210() { + _speakerName = "Captain"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerCaptain3210::proc15() { + int v = _fieldF6; + Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerPrivate3210::SpeakerPrivate3210() { + _speakerName = "Private"; + _color1 = 45; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerPrivate3210::proc15() { + int v = _fieldF6; + Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 38a097bc61..66edd67276 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -293,6 +293,22 @@ public: virtual void proc15(); }; +class SpeakerCaptain3210 : public VisualSpeaker { +public: + SpeakerCaptain3210(); + + virtual Common::String getClassName() { return "SpeakerCaptain3210"; } + virtual void proc15(); +}; + +class SpeakerPrivate3210 : public VisualSpeaker { +public: + SpeakerPrivate3210(); + + virtual Common::String getClassName() { return "SpeakerPrivate3210"; } + virtual void proc15(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From a4934fe05a50ccdbffd5171d08b7e600572da5a7 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 22 Dec 2011 21:55:46 +1100 Subject: TSAGE: Moved look/use/talk descriptions to SceneItem class, and implemented R2R SceneExt::display --- engines/tsage/ringworld2/ringworld2_logic.cpp | 99 +++++++++---------------- engines/tsage/ringworld2/ringworld2_logic.h | 7 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 9 +-- 3 files changed, 39 insertions(+), 76 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0844a48ed8..470cdab10c 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -303,7 +303,7 @@ void SceneExt::loadScene(int sceneNum) { } } -bool SceneExt::display(CursorType action) { +bool SceneExt::display(CursorType action, Event &event) { switch (action) { case CURSOR_CROSSHAIRS: return false; @@ -316,10 +316,41 @@ bool SceneExt::display(CursorType action) { case CURSOR_TALK: SceneItem::display2(1, R2_GLOBALS._randomSource.getRandomNumber(4) + 10); break; + case R2_NEGATOR_GUN: + if (R2_GLOBALS.getFlag(1)) + SceneItem::display2(2, action); + else + SceneItem::display2(5, 0); + break; + case R2_7: + if ((R2_GLOBALS._v565F1[1] == 2) || ((R2_GLOBALS._v565F1[1] == 1) && + (R2_GLOBALS._v565F1[2] == 2) && (R2_GLOBALS._sceneManager._previousScene == 300))) { + R2_GLOBALS._sound4.stop(); + R2_GLOBALS._sound3.play(46); + SceneItem::display2(5, 15); + } else { + R2_GLOBALS._sound3.play(43, 0); + SceneItem::display2(2, 0); + } + + R2_GLOBALS._sound4.play(45); + break; + case R2_9: + case R2_39: + R2_GLOBALS._sound3.play(44); + SceneItem::display2(2, action); + R2_GLOBALS._sound3.stop(); + break; + case R2_44: + R2_GLOBALS._sound3.play(99); + SceneItem::display2(2, action); + break; default: - return false; + SceneItem::display2(2, action); + break; } + event.handled = true; return true; } @@ -840,68 +871,6 @@ bool NamedHotspot::startAction(CursorType action, Event &event) { } } -void NamedHotspot::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) { - setBounds(ys, xe, ye, xs); - _resNum = resnum; - _lookLineNum = lookLineNum; - _useLineNum = useLineNum; - _talkLineNum = -1; - g_globals->_sceneItems.addItems(this, NULL); -} - -void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) { - setBounds(bounds); - _resNum = resNum; - _lookLineNum = lookLineNum; - _talkLineNum = talkLineNum; - _useLineNum = useLineNum; - - switch (mode) { - case 2: - g_globals->_sceneItems.push_front(this); - break; - case 4: - g_globals->_sceneItems.addBefore(item, this); - break; - case 5: - g_globals->_sceneItems.addAfter(item, this); - break; - default: - g_globals->_sceneItems.push_back(this); - break; - } -} - -void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) { - _sceneRegionId = sceneRegionId; - _resNum = resNum; - _lookLineNum = lookLineNum; - _talkLineNum = talkLineNum; - _useLineNum = useLineNum; - - // Handle adding hotspot to scene items list as necessary - switch (mode) { - case 2: - GLOBALS._sceneItems.push_front(this); - break; - case 3: - break; - default: - GLOBALS._sceneItems.push_back(this); - break; - } -} - -void NamedHotspot::synchronize(Serializer &s) { - SceneHotspot::synchronize(s); - s.syncAsSint16LE(_resNum); - s.syncAsSint16LE(_lookLineNum); - s.syncAsSint16LE(_useLineNum); - - if (g_vm->getGameID() == GType_BlueForce) - s.syncAsSint16LE(_talkLineNum); -} - void SceneActor::postInit(SceneObjectList *OwnerList) { _lookLineNum = _talkLineNum = _useLineNum = -1; SceneObject::postInit(); @@ -943,7 +912,7 @@ bool SceneActor::startAction(CursorType action, Event &event) { } if (!handled) - handled = ((SceneExt *)R2_GLOBALS._sceneManager._scene)->display(action); + handled = ((SceneExt *)R2_GLOBALS._sceneManager._scene)->display(action, event); return handled; } diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 9eaa1b0cd1..67346bcc80 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -102,7 +102,7 @@ public: virtual void refreshBackground(int xAmount, int yAmount); virtual void saveCharacter(int characterIndex); - bool display(CursorType action); + bool display(CursorType action, Event &event); void fadeOut(); void clearScreen(); }; @@ -233,15 +233,10 @@ public: class NamedHotspot : public SceneHotspot { public: - int _resNum, _lookLineNum, _useLineNum, _talkLineNum; NamedHotspot(); virtual bool startAction(CursorType action, Event &event); virtual Common::String getClassName() { return "NamedHotspot"; } - virtual void synchronize(Serializer &s); - virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum); - virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); - virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode = 0); }; class NamedHotspotExt : public NamedHotspot { diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 8ea83a2527..5b1e05ebc8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -233,8 +233,7 @@ bool Scene3125::Item1::startAction(CursorType action, Event &event) { SceneItem::display(_resNum, _talkLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); break; default: - warning("scene->display() called with two parameters"); - return scene->display(action); + return scene->display(action, event); break; } @@ -822,8 +821,8 @@ bool Scene3175::Item1::startAction(CursorType action, Event &event) { default: break; } - warning("scene->display() called with two parameters"); - return scene->display(action); + + return scene->display(action, event); } bool Scene3175::Actor3::startAction(CursorType action, Event &event) { @@ -852,7 +851,7 @@ bool Scene3175::Actor3::startAction(CursorType action, Event &event) { break; } warning("scene->display() called with two parameters"); - return scene->display(action); + return scene->display(action, event); } bool Scene3175::Actor1::startAction(CursorType action, Event &event) { -- cgit v1.2.3 From e10060f26207dc37ba38790db9fc793f1bcfb892 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 14:31:04 +0100 Subject: TSAGE: R2R - Implement scene 3220 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 4 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 29 +++++++++- engines/tsage/ringworld2/ringworld2_scenes3.h | 12 ++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 70 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 ++++++ 5 files changed, 129 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 470cdab10c..cf294fa962 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -184,12 +184,14 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Autopsy room return new Scene3175(); case 3200: - // Cutscene : Cutscene : Rocko & co - Discussion + // Cutscene : Guards - Discussion return new Scene3200(); case 3210: // Cutscene : Captain and Private - Discussion return new Scene3210(); case 3220: + // Cutscene : Guards in cargo zone + return new Scene3220(); case 3230: case 3240: case 3245: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 5b1e05ebc8..097097308a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -923,7 +923,7 @@ void Scene3175::signal() { } /*-------------------------------------------------------------------------- - * Scene 3200 - Cutscene : Rocko & co - Discussion + * Scene 3200 - Cutscene : Guards - Discussion * *--------------------------------------------------------------------------*/ void Scene3200::postInit(SceneObjectList *OwnerList) { @@ -975,5 +975,32 @@ void Scene3210::postInit(SceneObjectList *OwnerList) { void Scene3210::signal() { R2_GLOBALS._sceneManager.changeScene(1200); } + +/*-------------------------------------------------------------------------- + * Scene 3220 - Cutscene : Guards in cargo zone + * + *--------------------------------------------------------------------------*/ +void Scene3220::postInit(SceneObjectList *OwnerList) { + loadScene(3220); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_rockoSpeaker); + _stripManager.addSpeaker(&_jockoSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor2.postInit(); + + setAction(&_sequenceManager, this, 3220 + R2_GLOBALS._randomSource.getRandomNumber(1), &_actor1, &_actor2, NULL); +} + +void Scene3220::signal() { + R2_GLOBALS._sceneManager.changeScene(1200); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index fbb6392be4..afd39769f0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -211,6 +211,18 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3220 : public SceneExt { +public: + SpeakerRocko3220 _rockoSpeaker; + SpeakerJocko3220 _jockoSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 80ac04c403..c216486d7f 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1228,5 +1228,75 @@ void SpeakerPrivate3210::proc15() { } } +SpeakerRocko3220::SpeakerRocko3220() { + _speakerName = "Rocko"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerRocko3220::proc15() { + int v = _fieldF6; + Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerJocko3220::SpeakerJocko3220() { + _speakerName = "Jocko"; + _color1 = 45; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerJocko3220::proc15() { + int v = _fieldF6; + Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 66edd67276..fef700387e 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -309,6 +309,22 @@ public: virtual void proc15(); }; +class SpeakerRocko3220 : public VisualSpeaker { +public: + SpeakerRocko3220(); + + virtual Common::String getClassName() { return "SpeakerRocko3220"; } + virtual void proc15(); +}; + +class SpeakerJocko3220 : public VisualSpeaker { +public: + SpeakerJocko3220(); + + virtual Common::String getClassName() { return "SpeakerJocko3220"; } + virtual void proc15(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From fc671351cf47c50f7cfc21b1f0ea38b81b105f38 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 15:01:50 +0100 Subject: TSAGE: R2R - Implement scene 3230 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 26 +++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 13 +++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 70 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 15 +++++ 5 files changed, 126 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index cf294fa962..3503765ef5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -193,6 +193,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene : Guards in cargo zone return new Scene3220(); case 3230: + // Cutscene : Guards on duty + return new Scene3230(); case 3240: case 3245: case 3250: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 097097308a..a07076bcba 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1002,5 +1002,31 @@ void Scene3220::signal() { R2_GLOBALS._sceneManager.changeScene(1200); } +/*-------------------------------------------------------------------------- + * Scene 3230 - Cutscene : Guards on duty + * + *--------------------------------------------------------------------------*/ +void Scene3230::postInit(SceneObjectList *OwnerList) { + loadScene(3230); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_rockoSpeaker); + _stripManager.addSpeaker(&_jockoSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor2.postInit(); + _actor3.postInit(); + + setAction(&_sequenceManager, this, 3230 + R2_GLOBALS._randomSource.getRandomNumber(1), &_actor1, &_actor2, &_actor3, NULL); +} + +void Scene3230::signal() { + R2_GLOBALS._sceneManager.changeScene(1200); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index afd39769f0..6bff8bc6d8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -223,6 +223,19 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3230 : public SceneExt { +public: + SpeakerRocko3230 _rockoSpeaker; + SpeakerJocko3230 _jockoSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index c216486d7f..4c0494c214 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1298,5 +1298,75 @@ void SpeakerJocko3220::proc15() { } } +SpeakerRocko3230::SpeakerRocko3230() { + _speakerName = "Rocko"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerRocko3230::proc15() { + int v = _fieldF6; + Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4111, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerJocko3230::SpeakerJocko3230() { + _speakerName = "Jocko"; + _color1 = 45; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerJocko3230::proc15() { + int v = _fieldF6; + Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index fef700387e..71933f3ec9 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -325,6 +325,21 @@ public: virtual void proc15(); }; +class SpeakerRocko3230 : public VisualSpeaker { +public: + SpeakerRocko3230(); + + virtual Common::String getClassName() { return "SpeakerRocko3230"; } + virtual void proc15(); +}; + +class SpeakerJocko3230 : public VisualSpeaker { +public: + SpeakerJocko3230(); + + virtual Common::String getClassName() { return "SpeakerJocko3230"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From e6a671b555500de4f870d73cbd785e40f76d0d33 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 16:20:21 +0100 Subject: TSAGE: R2R - Implement scene 3240 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 28 ++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 13 +++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 70 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 ++++++ 5 files changed, 129 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 3503765ef5..0f43704fa8 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -196,6 +196,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene : Guards on duty return new Scene3230(); case 3240: + // Cutscene : Teal monolog + return new Scene3240(); case 3245: case 3250: case 3255: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index a07076bcba..326591178d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1028,5 +1028,33 @@ void Scene3230::postInit(SceneObjectList *OwnerList) { void Scene3230::signal() { R2_GLOBALS._sceneManager.changeScene(1200); } + +/*-------------------------------------------------------------------------- + * Scene 3240 - Cutscene : Teal monolog + * + *--------------------------------------------------------------------------*/ +void Scene3240::postInit(SceneObjectList *OwnerList) { + loadScene(3240); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_tealSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor2.postInit(); + + setAction(&_sequenceManager, this, 3240 + R2_GLOBALS._randomSource.getRandomNumber(1), &_actor1, &_actor2, NULL); +} + +void Scene3240::signal() { + R2_GLOBALS._sceneManager.changeScene(1200); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 6bff8bc6d8..d652788e14 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -236,6 +236,19 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3240 : public SceneExt { +public: + SpeakerTeal3240 _tealSpeaker; + SpeakerWebbster3240 _webbsterSpeaker; + SpeakerMiranda2500 _mirandaSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 4c0494c214..a14d3ea8ae 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1368,5 +1368,75 @@ void SpeakerJocko3230::proc15() { } } +SpeakerTeal3240::SpeakerTeal3240() { + _speakerName = "Teal"; + _color1 = 22; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerTeal3240::proc15() { + int v = _fieldF6; + Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4070, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerWebbster3240::SpeakerWebbster3240() { + _speakerName = "Webbster"; + _color1 = 10; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerWebbster3240::proc15() { + int v = _fieldF6; + Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 71933f3ec9..bb49b985dc 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -340,6 +340,22 @@ public: virtual Common::String getClassName() { return "SpeakerJocko3230"; } virtual void proc15(); }; + +class SpeakerTeal3240 : public VisualSpeaker { +public: + SpeakerTeal3240(); + + virtual Common::String getClassName() { return "SpeakerTeal3240"; } + virtual void proc15(); +}; + +class SpeakerWebbster3240 : public VisualSpeaker { +public: + SpeakerWebbster3240(); + + virtual Common::String getClassName() { return "SpeakerWebbster3240"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From cdd9ab3b70da5abe287cc5ef4baa0c5b40e3bfd4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 17:12:08 +0100 Subject: TSAGE: R2R - Implement scene 3245 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 34 +++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 12 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 96 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 ++++ 5 files changed, 160 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0f43704fa8..f7dcc56d42 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -199,6 +199,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene : Teal monolog return new Scene3240(); case 3245: + // Cutscene : Discussions with Dr. Tomko + return new Scene3245(); case 3250: case 3255: case 3260: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 326591178d..aa7361b77b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1056,5 +1056,39 @@ void Scene3240::signal() { R2_GLOBALS._sceneManager.changeScene(1200); } +/*-------------------------------------------------------------------------- + * Scene 3245 - Cutscene : Discussions with Dr. Tomko + * + *--------------------------------------------------------------------------*/ +void Scene3245::postInit(SceneObjectList *OwnerList) { + loadScene(3245); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_ralfSpeaker); + _stripManager.addSpeaker(&_tomkoSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor2.postInit(); + + if (R2_GLOBALS._v56AA1 < 4) + ++R2_GLOBALS._v56AA1; + + if (R2_GLOBALS._v56AA1 >= 4) { + SceneItem::display(1200, 7, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + signal(); + } else { + setAction(&_sequenceManager, this, 3244 + R2_GLOBALS._v56AA1, &_actor1, &_actor2, NULL); + } +} + +void Scene3245::signal() { + R2_GLOBALS._sceneManager.changeScene(1200); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index d652788e14..96fa65e70f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -249,6 +249,18 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3245 : public SceneExt { +public: + SpeakerRalf3245 _ralfSpeaker; + SpeakerTomko3245 _tomkoSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index a14d3ea8ae..619b1c291f 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1438,5 +1438,101 @@ void SpeakerWebbster3240::proc15() { } } +SpeakerRalf3245::SpeakerRalf3245() { + _speakerName = "Ralf"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerRalf3245::proc15() { + int v = _fieldF6; + Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 3100: + _object1.setup(4105, (_object2->_strip * 2) - 1, 1); + break; + case 3101: + _object1.setup(4108, (_object2->_strip * 2) - 1, 1); + break; + case 3102: + _object1.setup(4109, (_object2->_strip * 2) - 1, 1); + break; + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerTomko3245::SpeakerTomko3245() { + _speakerName = "Tomko"; + _color1 = 10; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerTomko3245::proc15() { + int v = _fieldF6; + Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 3100: + _object1.setup(4105, (_object2->_strip * 2) - 1, 1); + break; + case 3101: + _object1.setup(4108, (_object2->_strip * 2) - 1, 1); + break; + case 3102: + _object1.setup(4109, (_object2->_strip * 2) - 1, 1); + break; + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index bb49b985dc..e6a1819eb3 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -356,6 +356,22 @@ public: virtual Common::String getClassName() { return "SpeakerWebbster3240"; } virtual void proc15(); }; + +class SpeakerRalf3245 : public VisualSpeaker { +public: + SpeakerRalf3245(); + + virtual Common::String getClassName() { return "SpeakerRalf3245"; } + virtual void proc15(); +}; + +class SpeakerTomko3245 : public VisualSpeaker { +public: + SpeakerTomko3245(); + + virtual Common::String getClassName() { return "SpeakerTomko3245"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 086b0e505730a5168dc85371214d9904fbb16284 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 19:42:13 +0100 Subject: TSAGE: R2R - Scene 3100 (space port): Fix cursor used in signal(), rename an object --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 25 ++++++++++++------------- engines/tsage/ringworld2/ringworld2_scenes3.h | 4 ++-- 2 files changed, 14 insertions(+), 15 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index aa7361b77b..a46c3f7b9f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -43,7 +43,7 @@ void Scene3100::synchronize(Serializer &s) { s.syncAsSint16LE(_field412); } -bool Scene3100::Actor6::startAction(CursorType action, Event &event) { +bool Scene3100::Guard::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); @@ -98,11 +98,11 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { _sound1.fadeSound(130); setAction(&_sequenceManager, this, 3102, &_actor1, &R2_GLOBALS._player, &_actor3, &_actor4, &_actor5, NULL); } else { - _actor6.postInit(); - _actor6.setup(3110, 5, 1); - _actor6.changeZoom(50); - _actor6.setPosition(Common::Point(10, 149)); - _actor6.setDetails(3100, 6, -1, -1, 2, NULL); + _guard.postInit(); + _guard.setup(3110, 5, 1); + _guard.changeZoom(50); + _guard.setPosition(Common::Point(10, 149)); + _guard.setDetails(3100, 6, -1, -1, 2, NULL); _actor4.postInit(); _actor4.setup(3103, 1, 1); @@ -126,11 +126,11 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager, this, 3101, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); } else { - _actor6.postInit(); - _actor6.setup(3110, 5, 1); - _actor6.changeZoom(50); - _actor6.setPosition(Common::Point(10, 149)); - _actor6.setDetails(3100, 6, -1, -1, 2, NULL); + _guard.postInit(); + _guard.setup(3110, 5, 1); + _guard.changeZoom(50); + _guard.setPosition(Common::Point(10, 149)); + _guard.setDetails(3100, 6, -1, -1, 2, NULL); _actor4.postInit(); _actor4.setup(3103, 1, 1); @@ -167,8 +167,7 @@ void Scene3100::remove() { void Scene3100::signal() { switch (_sceneMode) { case 10: - warning("TODO: Unknown cursor used (6/-6)"); - R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player.enableControl(CURSOR_TALK); break; case 3100: R2_GLOBALS._player._moveDiff = Common::Point(3, 2); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 96fa65e70f..ab98a8d66e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -41,7 +41,7 @@ using namespace TsAGE; class Scene3100 : public SceneExt { - class Actor6 : public SceneActor { + class Guard : public SceneActor { virtual bool startAction(CursorType action, Event &event); }; public: @@ -55,7 +55,7 @@ public: SceneActor _actor3; SceneActor _actor4; SceneActor _actor5; - Actor6 _actor6; + Guard _guard; ASoundExt _sound1; SequenceManager _sequenceManager; -- cgit v1.2.3 From 0234bb5be26319a3cd634cbdcf73ad7beb31b16f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 19:45:44 +0100 Subject: TSAGE: R2R - Remove obsolete warning --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index a46c3f7b9f..65b1622883 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -849,7 +849,7 @@ bool Scene3175::Actor3::startAction(CursorType action, Event &event) { default: break; } - warning("scene->display() called with two parameters"); + return scene->display(action, event); } -- cgit v1.2.3 From 014536cf3f8d619c257698ebd50b94c950cfca13 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 20:23:48 +0100 Subject: TSAGE: R2R - Fix a couple of bugs in scene 2000, Fix calls to disableControl() with parameters Also remove several obsolete warnings --- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 42 ++++++------------------- 1 file changed, 10 insertions(+), 32 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index b851ed4e22..1fe920e65c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -35,9 +35,7 @@ namespace Ringworld2 { *--------------------------------------------------------------------------*/ void Scene2000::initPlayer() { R2_GLOBALS._player.disableControl(); - warning("DisableControl, with arguments?"); - warning("initPlayer: %d", _mazePlayerMode); switch (_mazePlayerMode) { case 0: R2_GLOBALS._player.setStrip(5); @@ -49,7 +47,6 @@ void Scene2000::initPlayer() { } else R2_GLOBALS._player.setPosition(Common::Point(245, 129)); R2_GLOBALS._player.enableControl(); - warning("EnableControl, with 2 arguments?"); break; case 1: if (R2_GLOBALS._player._characterIndex == 1) @@ -179,8 +176,6 @@ void Scene2000::initExits() { _object1.remove(); - warning("initExits: %d", R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]); - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { case 3: case 10: @@ -395,7 +390,6 @@ void Scene2000::Action1::signal() { case 0: { _actionIndex = 1; Common::Point pt(-20, 127); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); scene->_objList1[_state].addMover(mover, &pt, scene); break; @@ -439,7 +433,6 @@ void Scene2000::Action1::signal() { case 5: { _actionIndex = 6; Common::Point pt(340, 127); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); scene->_objList1[_state].addMover(mover, &pt, this); break; @@ -482,7 +475,6 @@ void Scene2000::Action1::signal() { break; case 10: { Common::Point pt(290, 127); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); scene->_objList1[_state].addMover(mover, &pt, this); _actionIndex = 11; @@ -508,13 +500,11 @@ void Scene2000::Action1::signal() { case 15: if ((R2_GLOBALS._v56605[3 + _state] == 13) || (R2_GLOBALS._v56605[3 + _state] == 22) || (R2_GLOBALS._v56605[3 + _state] == 27)) { Common::Point pt(30, 127); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); scene->_objList1[_state].addMover(mover, &pt, this); _actionIndex = 16; } else { Common::Point pt(120, 127); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); scene->_objList1[_state].addMover(mover, &pt, this); _actionIndex = 16; @@ -546,15 +536,12 @@ void Scene2000::Action1::signal() { void Scene2000::Exit1::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; - warning("exit1"); scene->_exitingFlag = true; scene->_sceneMode = 0; - R2_GLOBALS._player.disableControl(); - warning("DisableControl, with arguments?"); + R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 10; - warning("TODO: Check sub_22D26"); Common::Point pt(-10, 129); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -564,15 +551,12 @@ void Scene2000::Exit1::changeScene() { void Scene2000::Exit2::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; - warning("exit2"); scene->_exitingFlag = true; scene->_sceneMode = 0; - R2_GLOBALS._player.disableControl(); - warning("DisableControl, with arguments?"); + R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 11; - warning("TODO: Check sub_22D26"); Common::Point pt(330, 129); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -580,12 +564,10 @@ void Scene2000::Exit2::changeScene() { void Scene2000::Exit3::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; - warning("exit13"); scene->_exitingFlag = true; scene->_sceneMode = 0; - R2_GLOBALS._player.disableControl(); - warning("DisableControl, with arguments?"); + R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 12; switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { @@ -650,12 +632,10 @@ void Scene2000::Exit3::changeScene() { } void Scene2000::Exit4::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; - warning("exit4"); scene->_exitingFlag = true; scene->_sceneMode = 0; - R2_GLOBALS._player.disableControl(); - warning("DisableControl, with arguments?"); + R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 13; switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { @@ -709,11 +689,9 @@ void Scene2000::Exit4::changeScene() { void Scene2000::Exit5::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; - warning("exit5"); scene->_sceneMode = 0; - R2_GLOBALS._player.disableControl(); - warning("DisableControl, with arguments?"); + R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 14; switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { @@ -1009,6 +987,9 @@ void Scene2000::signal() { g_globals->_sceneManager.changeScene(2535); break; default: + if (R2_GLOBALS._v56AAB != 0) + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); break; } break; @@ -1024,7 +1005,6 @@ void Scene2000::signal() { void Scene2000::process(Event &event) { if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)) { - warning("TODO: Check sub_22D26"); Common::Point pt(event.mousePos.x, 129); PlayerMover *mover = new PlayerMover(); @@ -1069,7 +1049,7 @@ bool Scene2350::Actor3::startAction(CursorType action, Event &event) { void Scene2350::ExitUp::changeScene() { Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; - R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.disableControl(CURSOR_CROSSHAIRS); scene->_sceneMode = 12; if (R2_GLOBALS._player._characterIndex == 1) scene->setAction(&scene->_sequenceManager, scene, 2350, &R2_GLOBALS._player, NULL); @@ -1080,11 +1060,10 @@ void Scene2350::ExitUp::changeScene() { void Scene2350::ExitWest::changeScene() { Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; - R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.disableControl(CURSOR_CROSSHAIRS); scene->_sceneMode = 11; Common::Point pt(-10, 129); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -1157,7 +1136,6 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { _sceneMode = 10; R2_GLOBALS._player.setPosition(Common::Point(-20, 129)); Common::Point pt(20, 129); - warning("TODO: Check sub_22D26"); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); -- cgit v1.2.3 From 1b98cd5686409645bb99473954dd73bfdb9c5182 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 23 Dec 2011 20:52:27 +1100 Subject: TSAGE: Implemented R2R Scene 825 - Autodoc --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 358 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 36 +++ 3 files changed, 396 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f7dcc56d42..f48864f87d 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -81,7 +81,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Sick bay return new Scene800(); case 825: - error("Missing scene %d from group 0", sceneNumber); + // Autodoc + return new Scene825(); case 850: // Deck #5 - By Lift return new Scene850(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index ceca8915d8..a58740394b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -3183,6 +3183,364 @@ void Scene800::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 825 - Autodoc + * + *--------------------------------------------------------------------------*/ + +Scene825::Button::Button(): SceneObject() { + _buttonId = 0; + _v2 = 0; + _buttonDown = false; +} + +void Scene825::Button::synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_buttonId); + s.syncAsSint16LE(_v2); + s.syncAsSint16LE(_buttonDown); +} + +void Scene825::Button::process(Event &event) { + Scene825 *scene = (Scene825 *)R2_GLOBALS._sceneManager._scene; + + if (!event.handled) { + if ((event.eventType == EVENT_BUTTON_DOWN) && _bounds.contains(event.mousePos) && !_buttonDown) { + scene->_sound1.play(14); + setFrame(2); + _buttonDown = true; + event.handled = true; + } + + if ((event.eventType == EVENT_BUTTON_UP) && _buttonDown) { + setFrame(1); + _buttonDown = false; + event.handled = true; + + scene->doButtonPress(_buttonId); + } + } +} + +bool Scene825::Button::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) + return false; + else + return SceneObject::startAction(action, event); +} + +void Scene825::Button::setButton(int buttonId) { + SceneObject::postInit(); + _v2 = buttonId; + _buttonDown = 0; + _sceneText._color1 = 92; + _sceneText._color2 = 0; + _sceneText._width = 200; + _sceneText.fixPriority(20); + _sceneText._fontNumber = 50; + + switch (buttonId) { + case 1: + _sceneText.setPosition(Common::Point(95, 58)); + break; + case 2: + _sceneText.setPosition(Common::Point(98, 75)); + break; + case 3: + _sceneText.setPosition(Common::Point(102, 95)); + break; + case 4: + _sceneText.setPosition(Common::Point(180, 58)); + _sceneText._textMode = ALIGN_RIGHT; + break; + case 5: + _sceneText.setPosition(Common::Point(177, 75)); + _sceneText._textMode = ALIGN_RIGHT; + break; + case 6: + _sceneText.setPosition(Common::Point(175, 95)); + _sceneText._textMode = ALIGN_RIGHT; + break; + default: + break; + } + + setDetails(825, 6, 7, -1, 2, NULL); +} + +void Scene825::Button::setText(int textId) { + _buttonId = textId; + _lookLineNum = textId; + + _sceneText.remove(); + if (_buttonId != 0) + _sceneText.setup(AUTODOC_ITEMS[textId - 1]); +} + +/*--------------------------------------------------------------------------*/ + +Scene825::Scene825(): SceneExt() { + _menuId = _frame1 = _frame2 = 0; +} + +void Scene825::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(825); + R2_GLOBALS._player._uiEnabled = false; + BF_GLOBALS._interfaceY = 200; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _item2.setDetails(1, 825, 3, 4, 5); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 825, 0, -1, -1, 1, NULL); + + _sceneMode = 10; + signal(); +} + +void Scene825::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_menuId); + s.syncAsSint16LE(_frame1); + s.syncAsSint16LE(_frame2); +} + +void Scene825::remove() { + SceneExt::remove(); + R2_GLOBALS._player._uiEnabled = true; +} + +void Scene825::signal() { + switch (_sceneMode) { + case 10: + _button1.setButton(1); + _button1.setup(825, 1, 1); + _button1.setPosition(Common::Point(71, 71)); + _button2.setButton(2); + _button2.setup(825, 3, 1); + _button2.setPosition(Common::Point(74, 90)); + _button3.setButton(3); + _button3.setup(825, 5, 1); + _button3.setPosition(Common::Point(78, 109)); + _button4.setButton(4); + _button4.setup(825, 2, 1); + _button4.setPosition(Common::Point(248, 71)); + _button5.setButton(5); + _button5.setup(825, 4, 1); + _button5.setPosition(Common::Point(245, 90)); + _button6.setButton(6); + _button6.setup(825, 6, 1); + _button6.setPosition(Common::Point(241, 109)); + + doButtonPress(1); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + case 825: + _object5.remove(); + _sceneText._color1 = 92; + _sceneText._color2 = 0; + _sceneText._width = 200; + _sceneText.fixPriority(20); + _sceneText._fontNumber = 50; + _sceneText.setPosition(Common::Point(120, 75)); + _sceneText.setup(NO_MALADY_DETECTED); + _sceneMode = 826; + setAction(&_sequenceManager1, this, 826, &R2_GLOBALS._player, NULL); + break; + case 826: + _sceneText.remove(); + doButtonPress(1); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + case 827: + _object5.remove(); + R2_INVENTORY.setObjectScene(R2_OPTO_DISK, 825); + _sceneText.setPosition(Common::Point(108, 75)); + _sceneText.setup(FOREIGN_OBJECT_EXTRACTED); + _sceneMode = 826; + setAction(&_sequenceManager1, this, 826, &R2_GLOBALS._player, NULL); + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + } +} + +void Scene825::process(Event &event) { + SceneExt::process(event); + + if (R2_GLOBALS._player._uiEnabled) { + _button1.process(event); + _button2.process(event); + _button3.process(event); + _button4.process(event); + _button5.process(event); + _button6.process(event); + } +} + +void Scene825::dispatch() { + if (R2_GLOBALS._sceneObjects->contains(&_object4) && + ((_object4._frame == 1) || (_object4._frame == 3)) && + (_object4._frame != _frame1)) { + _sound2.play(25); + } + + if (R2_GLOBALS._sceneObjects->contains(&_object1) && + (_object1._frame == 3) && (_object1._frame != _frame2)) { + _sound3.play(26); + } + + _frame1 = _object4._frame; + _frame2 = _object1._frame; + + Scene::dispatch(); +} + +void Scene825::doButtonPress(int buttonId) { + if ((_menuId != 4) || (buttonId == 5)) { + _button1.setText(0); + _button2.setText(0); + _button3.setText(0); + _button4.setText(0); + _button5.setText(0); + _button6.setText(0); + + switch (buttonId) { + case 2: + R2_GLOBALS._player.disableControl(); + _object5.postInit(); + _sceneMode = 825; + setAction(&_sequenceManager1, this, 825, &R2_GLOBALS._player, &_object5, NULL); + break; + case 3: + R2_GLOBALS._player.disableControl(); + _sceneText._color1 = 92; + _sceneText._color2 = 0; + _sceneText._width = 200; + _sceneText.fixPriority(20); + _sceneText._fontNumber = 50; + _sceneText.setPosition(Common::Point(115, 75)); + + if (R2_GLOBALS.getFlag(4)) { + if ((R2_INVENTORY.getObjectScene(R2_READER) != 800) || + (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) != 800)) { + _sceneText.setPosition(Common::Point(116, 75)); + _sceneText.setup(ACCESS_CODE_REQUIRED); + } else if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != 800) { + _sceneText.setPosition(Common::Point(115, 75)); + _sceneText.setup(NO_TREATMENT_REQUIRED); + } else { + _button6._buttonId = 5; + + _object5.postInit(); + setAction(&_sequenceManager1, this, 827, &_object5, NULL); + } + } else { + R2_GLOBALS.setFlag(2); + + if ((R2_INVENTORY.getObjectScene(R2_READER) != 800) || + (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) != 800)) { + _sceneText.setPosition(Common::Point(116, 75)); + _sceneText.setup(ACCESS_CODE_REQUIRED); + } else { + _sceneText.setPosition(Common::Point(119, 75)); + _sceneText.setup(INVALID_ACCESS_CODE); + } + } + + if (_sceneMode != 827) { + _sceneMode = 826; + setAction(&_sequenceManager1, this, 826, &R2_GLOBALS._player, NULL); + } + break; + case 4: + _sound4.play(27); + _button6._buttonId = 5; + + _object1.postInit(); + _object1.setup(826, 7, 1); + _object1.setPosition(Common::Point(112, 67)); + _object1._numFrames = 1; + _object1.animate(ANIM_MODE_2); + + _object2.postInit(); + _object2.setup(826, 5, 1); + _object2.setPosition(Common::Point(158, 67)); + _object2._numFrames = 5; + _object2.animate(ANIM_MODE_2); + + _object3.postInit(); + _object3.setup(826, 6, 1); + _object3.setPosition(Common::Point(206, 67)); + _object3._numFrames = 1; + _object3.animate(ANIM_MODE_2); + + _object4.postInit(); + _object4.setup(826, 8, 1); + _object4.setPosition(Common::Point(158, 84)); + _object4._numFrames = 1; + _object4.animate(ANIM_MODE_2); + + _object5.postInit(); + _object5.setup(826, 4, 1); + _object5.setPosition(Common::Point(161, 110)); + break; + case 5: + R2_GLOBALS._player.disableControl(); + if (_menuId == 4) { + _menuId = 0; + + _object1.remove(); + _object2.remove(); + _object3.remove(); + _object4.remove(); + _object5.remove(); + + _sound2.stop(); + _sound3.stop(); + _sound4.stop(); + + doButtonPress(1); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } else { + R2_GLOBALS._sceneManager.changeScene(800); + } + break; + case 6: + R2_GLOBALS._player.disableControl(); + _sceneText._color1 = 92; + _sceneText._color2 = 0; + _sceneText._width = 200; + _sceneText.fixPriority(20); + _sceneText._fontNumber = 50; + _sceneText.setPosition(Common::Point(115, 75)); + _sceneText.setup(NO_TREATMENT_REQUIRED); + + _sceneMode = 826; + setAction(&_sequenceManager1, this, 826, &R2_GLOBALS._player, NULL); + break; + default: + _button1.setText(2); + _button2.setText(3); + _button3.setText(4); + _button4.setText(6); + _button6.setText(5); + break; + } + + _menuId = buttonId; + } +} /*-------------------------------------------------------------------------- * Scene 850 - Deck #5 - By Lift diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 6810b5d85a..7a36b8f15f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -419,6 +419,42 @@ public: virtual void signal(); }; +class Scene825: public SceneExt { + /* Objects */ + class Button: public SceneObject { + public: + int _buttonId, _v2; + bool _buttonDown; + SceneText _sceneText; + public: + Button(); + void setButton(int buttonId); + void setText(int textId); + + virtual void synchronize(Serializer &s); + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + }; +public: + NamedHotspot _background, _item2; + SceneActor _object1, _object2, _object3, _object4, _object5; + Button _button1, _button2, _button3, _button4, _button5, _button6; + ASoundExt _sound1, _sound2, _sound3, _sound4; + SequenceManager _sequenceManager1; + SceneText _sceneText; + int _menuId, _frame1, _frame2; +public: + Scene825(); + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + + void doButtonPress(int buttonId); +}; + class Scene850: public SceneExt { /* Items */ class Indicator: public NamedHotspot { -- cgit v1.2.3 From c4af50ae63fc93e221306440fee0337a77059295 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 23 Dec 2011 18:17:33 +0100 Subject: TSAGE: R2R - Implement scene 3250 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 167 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 30 +++++ 3 files changed, 199 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f48864f87d..6f26054423 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -203,6 +203,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene : Discussions with Dr. Tomko return new Scene3245(); case 3250: + // Room with large stasis field negator + return new Scene3250(); case 3255: case 3260: case 3275: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 65b1622883..298093be3a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1089,5 +1089,172 @@ void Scene3245::signal() { R2_GLOBALS._sceneManager.changeScene(1200); } +/*-------------------------------------------------------------------------- + * Scene 3250 - Room with large stasis field negator + * + *--------------------------------------------------------------------------*/ +bool Scene3250::Item::startAction(CursorType action, Event &event) { + Scene3250 *scene = (Scene3250 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (_useLineNum != -1) { + SceneItem::display(_resNum, _useLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + case CURSOR_LOOK: + if (_lookLineNum != -1) { + SceneItem::display(_resNum, _lookLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + case CURSOR_TALK: + if (_talkLineNum != -1) { + SceneItem::display(_resNum, _talkLineNum, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + return true; + } + break; + default: + break; + } + + return scene->display(action, event); +} + +bool Scene3250::Actor::startAction(CursorType action, Event &event) { + Scene3250 *scene = (Scene3250 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + + switch(_position.x) { + case 25: + scene->_sceneMode = 3262; + scene->setAction(&scene->_sequenceManager, scene, 3262, &R2_GLOBALS._player, &scene->_actor1, NULL); + break; + case 259: + scene->_sceneMode = 3260; + scene->setAction(&scene->_sequenceManager, scene, 3260, &R2_GLOBALS._player, &scene->_actor2, NULL); + break; + case 302: + scene->_sceneMode = 3261; + scene->setAction(&scene->_sequenceManager, scene, 3261, &R2_GLOBALS._player, &scene->_actor3, NULL); + break; + default: + break; + } + return true; +} + +void Scene3250::postInit(SceneObjectList *OwnerList) { + loadScene(3250); + + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._player._oldCharacterScene[3] = 1200; + R2_GLOBALS._player._characterIndex = R2_MIRANDA; + } + + SceneExt::postInit(); + _actor1.postInit(); + _actor1.setup(3250, 6, 1); + _actor1.setPosition(Common::Point(25, 148)); + _actor1.fixPriority(10); + _actor1.setDetails(3250, 9, 10, -1, 1, NULL); + + _actor2.postInit(); + _actor2.setup(3250, 4, 1); + _actor2.setPosition(Common::Point(259, 126)); + _actor2.fixPriority(10); + _actor2.setDetails(3250, 9, 10, -1, 1, NULL); + + _actor3.postInit(); + _actor3.setup(3250, 5, 1); + _actor3.setPosition(Common::Point(302, 138)); + _actor3.fixPriority(10); + _actor3.setDetails(3250, 9, 10, -1, 1, NULL); + + _item3.setDetails(Rect(119, 111, 149, 168), 3250, 6, 7, 2, 1, NULL); + _item2.setDetails(Rect(58, 85, 231, 138), 3250, 12, 7, 2, 1, NULL); + _item4.setDetails(12, 3250, 3, 1, 2); + _item1.setDetails(Rect(0, 0, 320, 200), 3250, 0, 1, 2, 1, NULL); + + R2_GLOBALS._player.postInit(); + + switch (R2_GLOBALS._player._oldCharacterScene[3]) { + case 1200: + _sceneMode = 3250; + _actor4.postInit(); + R2_GLOBALS._player._effect = 0; + setAction(&_sequenceManager, this, 3250, &R2_GLOBALS._player, &_actor4, NULL); + break; + case 3125: + if (R2_GLOBALS.getFlag(79)) { + _sceneMode = 3254; + _actor5.postInit(); + _actor5._effect = 1; + _actor6.postInit(); + _actor6._effect = 1; + _actor7.postInit(); + _actor7._effect = 1; + setAction(&_sequenceManager, this, 3254, &R2_GLOBALS._player, &_actor3, &_actor5, &_actor6, &_actor7, &_actor1, NULL); + } else { + _sceneMode = 3252; + setAction(&_sequenceManager, this, 3252, &R2_GLOBALS._player, &_actor3, NULL); + } + break; + case 3175: + _sceneMode = 3251; + setAction(&_sequenceManager, this, 3251, &R2_GLOBALS._player, &_actor2, NULL); + break; + case 3255: + _sceneMode = 3253; + setAction(&_sequenceManager, this, 3253, &R2_GLOBALS._player, &_actor1, NULL); + break; + default: + R2_GLOBALS._player.setup(31, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(185, 150)); + R2_GLOBALS._player.enableControl(); + break; + } + + R2_GLOBALS._player._oldCharacterScene[3] = 3250; +} + +void Scene3250::signal() { + switch(_sceneMode) { + case 3250: + R2_GLOBALS._player._effect = 1; + R2_GLOBALS._player.enableControl(); + break; + case 3254: + //No break on purpose + case 3262: + R2_GLOBALS._sceneManager.changeScene(3255); + break; + case 3260: + R2_GLOBALS._sceneManager.changeScene(3175); + break; + case 3261: + R2_GLOBALS._sceneManager.changeScene(3125); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene3250::dispatch() { + if ((R2_GLOBALS._player._visage == 3250) && (R2_GLOBALS._player._strip == 3) && (R2_GLOBALS._player._effect == 0)) { + R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._shade = 6; + } + + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index ab98a8d66e..b83f83b1c2 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -261,6 +261,36 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene3250 : public SceneExt { + class Item : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; +public: + + Item _item1; + Item _item2; + Item _item3; + Item _item4; + Actor _actor1; + Actor _actor2; + Actor _actor3; + Actor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From c3fad04dea55afe9412c7518c71fea22a0b9819b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 23 Dec 2011 23:58:06 +0100 Subject: TSAGE: R2R - Implement scene 3260 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 177 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 48 +++++++ 3 files changed, 227 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 6f26054423..dbde0ee27a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -207,6 +207,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { return new Scene3250(); case 3255: case 3260: + // Computer room + return new Scene3260(); case 3275: case 3350: case 3375: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 298093be3a..8b8d8c479c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1256,5 +1256,182 @@ void Scene3250::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 3260 - Computer room + * + *--------------------------------------------------------------------------*/ +bool Scene3260::Actor13::startAction(CursorType action, Event &event) { + Scene3260 *scene = (Scene3260 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3271; + scene->setAction(&scene->_sequenceManager, scene, 3271, &R2_GLOBALS._player, &scene->_actor13, NULL); + return true; +} + +bool Scene3260::Actor14::startAction(CursorType action, Event &event) { + Scene3260 *scene = (Scene3260 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3272; + scene->setAction(&scene->_sequenceManager, scene, 3272, &R2_GLOBALS._player, &scene->_actor14, NULL); + return true; +} + +void Scene3260::Action1::signal() { + SceneObjectExt *fmtObj = (SceneObjectExt *) _endHandler; + + fmtObj->setFrame(R2_GLOBALS._randomSource.getRandomNumber(6)); + setDelay(120 + R2_GLOBALS._randomSource.getRandomNumber(179)); +} + +void Scene3260::postInit(SceneObjectList *OwnerList) { + loadScene(3260); + R2_GLOBALS._player._characterIndex = R2_MIRANDA; + SceneExt::postInit(); + R2_GLOBALS._sound1.play(285); + + _actor13.postInit(); + _actor13.setup(3260, 6, 1); + _actor13.setPosition(Common::Point(40, 106)); + _actor13.setDetails(3260, 18, 1, -1, 1, NULL); + + if (R2_INVENTORY.getObjectScene(52) == 3260) { + _actor14.postInit(); + _actor14.setup(3260, 7, 1); + _actor14.setPosition(Common::Point(202, 66)); + _actor14.setDetails(3260, 12, 1, -1, 1, NULL); + } + + _actor1.postInit(); + _actor1.setup(3260, 1, 1); + _actor1.setPosition(Common::Point(93, 73)); + _actor1.setDetails(3260, 3, 1, 5, 1, NULL); + _actor1.setAction(&_action1, &_actor1); + + _actor2.postInit(); + _actor2.setup(3260, 2, 1); + _actor2.setPosition(Common::Point(142, 63)); + _actor2.setDetails(3260, 3, 1, 5, 1, NULL); + _actor2.setAction(&_action2, &_actor2); + + _actor3.postInit(); + _actor3.setup(3260, 2, 1); + _actor3.setPosition(Common::Point(166, 54)); + _actor3.setDetails(3260, 3, 1, 5, 1, NULL); + _actor3.setAction(&_action3, &_actor3); + + _actor4.postInit(); + _actor4.setup(3260, 2, 1); + _actor4.setPosition(Common::Point(190, 46)); + _actor4.setDetails(3260, 3, 1, 5, 1, NULL); + _actor4.setAction(&_action4, &_actor4); + + _actor5.postInit(); + _actor5.setup(3260, 2, 1); + _actor5.setPosition(Common::Point(142, 39)); + _actor5.setDetails(3260, 3, 1, 5, 1, NULL); + _actor5.setAction(&_action5, &_actor5); + + _actor6.postInit(); + _actor6.setup(3260, 2, 1); + _actor6.setPosition(Common::Point(166, 30)); + _actor6.setDetails(3260, 3, 1, 5, 1, NULL); + _actor6.setAction(&_action6, &_actor6); + + _actor7.postInit(); + _actor7.setup(3260, 2, 1); + _actor7.setPosition(Common::Point(190, 22)); + _actor7.setDetails(3260, 3, 1, 5, 1, NULL); + _actor7.setAction(&_action7, &_actor7); + + _actor8.postInit(); + _actor8.setup(3260, 2, 1); + _actor8.setPosition(Common::Point(142, 14)); + _actor8.setDetails(3260, 3, 1, 5, 1, NULL); + _actor8.setAction(&_action8, &_actor8); + + _actor9.postInit(); + _actor9.setup(3260, 2, 1); + _actor9.setPosition(Common::Point(166, 6)); + _actor9.setDetails(3260, 3, 1, 5, 1, NULL); + _actor9.setAction(&_action9, &_actor9); + + _actor10.postInit(); + _actor10.setup(3260, 3, 1); + _actor10.setPosition(Common::Point(265, 163)); + _actor10.fixPriority(180); + _actor10._numFrames = 10; + _actor10.setDetails(3260, 6, 1, 8, 1, NULL); + _actor10.animate(ANIM_MODE_2, NULL); + + _actor11.postInit(); + _actor11.setup(3260, 4, 1); + _actor11.setPosition(Common::Point(127, 108)); + _actor11.fixPriority(120); + _actor11.setAction(&_action11, &_actor11); + _actor11._numFrames = 15; + _actor11.setDetails(3260, 6, 1, 8, 1, NULL); + _actor11.animate(ANIM_MODE_2, NULL); + + _actor12.postInit(); + _actor12.setup(3260, 5, 1); + _actor12.setPosition(Common::Point(274, 65)); + _actor12.setAction(&_action12, &_actor12); + _actor12._numFrames = 5; + _actor12.setDetails(3260, 9, 1, 11, 1, NULL); + _actor12.animate(ANIM_MODE_2, NULL); + + _item1.setDetails(Rect(0, 0, 320, 200), 3260, 0, 1, 2, 1, NULL); + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._player._oldCharacterScene[3] == 3275) { + _sceneMode = 3270; + setAction(&_sequenceManager, this, 3270, &R2_GLOBALS._player, &_actor13, NULL); + } else { + R2_GLOBALS._player.setup(30, 5, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(53, 113)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[3] = 3260; +} + +void Scene3260::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3260::signal() { + switch (_sceneMode) { + case 3271: + R2_GLOBALS._sceneManager.changeScene(3275); + break; + case 3272: + _sceneMode = 3273; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + SceneItem::display(3260, 15, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + R2_GLOBALS._player.disableControl(); + R2_INVENTORY.setObjectScene(52, 3); + R2_INVENTORY.setObjectScene(43, 3); + setAction(&_sequenceManager, this, 3273, &R2_GLOBALS._player, &_actor14, NULL); + break; + case 3273: + _actor4.remove(); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index b83f83b1c2..2a4899c205 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -291,6 +291,54 @@ public: virtual void dispatch(); }; +class Scene3260 : public SceneExt { + class Actor13 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor14 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Action1: public Action { + public: + void signal(); + }; +public: + + NamedHotspot _item1; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SceneActor _actor10; + SceneActor _actor11; + SceneActor _actor12; + Actor13 _actor13; + Actor14 _actor14; + Action1 _action1; + Action1 _action2; + Action1 _action3; + Action1 _action4; + Action1 _action5; + Action1 _action6; + Action1 _action7; + Action1 _action8; + Action1 _action9; + Action1 _action10; + Action1 _action11; + Action1 _action12; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 544e241d221a5d503e2acf574fbde66c8a4fa527 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 24 Dec 2011 01:15:28 +0100 Subject: TSAGE: R2R - Implement scene 3255 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 105 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 18 ++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 68 +++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 16 ++++ 5 files changed, 208 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index dbde0ee27a..5cb66a50f7 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -206,6 +206,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Room with large stasis field negator return new Scene3250(); case 3255: + return new Scene3255(); case 3260: // Computer room return new Scene3260(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 8b8d8c479c..f7e7be02f2 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1256,6 +1256,111 @@ void Scene3250::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 3255 - + * + *--------------------------------------------------------------------------*/ +void Scene3255::postInit(SceneObjectList *OwnerList) { + loadScene(3255); + SceneExt::postInit(); + + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS.setFlag(79); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS.getFlag(79)) { + R2_GLOBALS._sound1.play(267); + R2_GLOBALS._sound2.play(268); + _sceneMode = 3257; + _actor3.postInit(); + _actor4.postInit(); + _actor4._effect = 1; + setAction(&_sequenceManager, this, 3257, &R2_GLOBALS._player, &_actor4, &_actor3, NULL); + } else { + _actor1.postInit(); + _actor1.setup(303, 1, 1); + _actor1.setPosition(Common::Point(208, 128)); + _actor2.postInit(); + _actor2.setup(3107, 3, 1); + _actor2.setPosition(Common::Point(230, 127)); + _sceneMode = 3255; + setAction(&_sequenceManager, this, 3255, &R2_GLOBALS._player, NULL); + } + R2_GLOBALS._player._oldCharacterScene[3] = 3255; +} + +void Scene3255::signal() { + switch (_sceneMode) { + case 10: + _sceneMode = 3258; + _actor5.postInit(); + _actor6.postInit(); + _actor7.postInit(); + setAction(&_sequenceManager, this, 3258, &R2_GLOBALS._player, &_actor4, &_actor3, &_actor5, &_actor6, &_actor7, NULL); + break; + case 3256: + R2_GLOBALS._sceneManager.changeScene(3250); + break; + case 3257: + _sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(607, this); + break; + case 3258: + R2_GLOBALS._sceneManager.changeScene(3100); + break; + default: + SceneItem::display(3255, 0, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + _sceneMode = 3256; + setAction(&_sequenceManager, this, 3256, &R2_GLOBALS._player, NULL); + } +} + +void Scene3255::dispatch() { + if (R2_GLOBALS.getFlag(79)) { + if (_actor5._position.y >= 95) { + if (_actor5._position.y <= 110) + _actor5._shade = 6 - (_actor5._position.y - 95) / 3; + else + _actor5._effect = 1; + } else { + _actor5._effect = 6; + _actor5._shade = 6; + } + + if (_actor6._position.y >= 95) { + if (_actor6._position.y <= 110) + _actor6._shade = 6 - (_actor6._position.y - 95) / 3; + else + _actor6._effect = 1; + } else { + _actor6._effect = 6; + _actor6._shade = 6; + } + + if (_actor7._position.y >= 95) { + if (_actor7._position.y <= 110) + _actor7._shade = 6 - (_actor7._position.y - 95) / 3; + else + _actor7._effect = 1; + } else { + _actor7._effect = 6; + _actor7._shade = 6; + } + } + + if ((R2_GLOBALS._player._position.x > 250) && (R2_GLOBALS._player._shade == 1)) { + R2_GLOBALS._player._effect = 6; + _actor4._effect = 6; + } + Scene::dispatch(); +} + /*-------------------------------------------------------------------------- * Scene 3260 - Computer room * diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 2a4899c205..22e5fea477 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -291,6 +291,24 @@ public: virtual void dispatch(); }; +class Scene3255 : public SceneExt { +public: + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SpeakerQuinn3255 _quinnSpeaker; + SpeakerMiranda3255 _mirandaSpeaker; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + class Scene3260 : public SceneExt { class Actor13 : public SceneActor { virtual bool startAction(CursorType action, Event &event); diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 619b1c291f..b63409e387 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1534,5 +1534,73 @@ void SpeakerTomko3245::proc15() { } } +SpeakerQuinn3255::SpeakerQuinn3255() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn3255::proc15() { + Scene3255 *scene = (Scene3255 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor4; + _object2->hide(); + _object1.postInit(); + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(3257, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +SpeakerMiranda3255::SpeakerMiranda3255() { + _speakerName = "MIRANDA"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerMiranda3255::proc15() { + int v = _fieldF6; + + if (!_object2) { + _object2 = &R2_GLOBALS._player; + _object2->hide(); + _object1.postInit(); + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(3257, 5, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index e6a1819eb3..dba402b64a 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -372,6 +372,22 @@ public: virtual Common::String getClassName() { return "SpeakerTomko3245"; } virtual void proc15(); }; + +class SpeakerQuinn3255 : public VisualSpeaker { +public: + SpeakerQuinn3255(); + + virtual Common::String getClassName() { return "SpeakerQuinn3255"; } + virtual void proc15(); +}; + +class SpeakerMiranda3255 : public VisualSpeaker { +public: + SpeakerMiranda3255(); + + virtual Common::String getClassName() { return "SpeakerMiranda3255"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From f07531bed36d22354a3724d53067ee22533cf049 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 24 Dec 2011 10:18:58 +0100 Subject: TSAGE: R2R - Implement scene 3275 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 97 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 24 ++++++ 3 files changed, 123 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 5cb66a50f7..e591436fd8 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -211,6 +211,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Computer room return new Scene3260(); case 3275: + // Hall + return new Scene3275(); case 3350: case 3375: case 3385: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index f7e7be02f2..1a219e773a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1538,5 +1538,102 @@ void Scene3260::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3275 - Hall + * + *--------------------------------------------------------------------------*/ +bool Scene3275::Actor2::startAction(CursorType action, Event &event) { + Scene3275 *scene = (Scene3275 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3275; + scene->setAction(&scene->_sequenceManager, scene, 3275, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; +} + +void Scene3275::Exit1::changeScene() { + Scene3275 *scene = (Scene3275 *)R2_GLOBALS._sceneManager._scene; + + scene->_sceneMode = 0; + g_globals->_events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + Common::Point pt(418, 118); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3275::postInit(SceneObjectList *OwnerList) { + loadScene(3275); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._sceneManager._previousScene = 3260; + + if (R2_GLOBALS._sceneManager._previousScene == 3150) + g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); + else + g_globals->gfxManager()._bounds.moveTo(Common::Point(0, 0)); + + SceneExt::postInit(); + _exit1.setDetails(Rect(398, 60, 439, 118), SHADECURSOR_UP, 3150); + _exit1.setDest(Common::Point(418, 128)); + + _actor1.postInit(); + _actor1.setup(3275, 1, 7); + _actor1.setPosition(Common::Point(419, 119)); + + _actor2.postInit(); + _actor2.setup(3275, 2, 1); + _actor2.setPosition(Common::Point(56, 118)); + _actor2.setDetails(3275, 3, 4, -1, 1, NULL); + + _item2.setDetails(Rect(153, 58, 200, 120), 3275, 6, 7, 8, 1, NULL); + _item3.setDetails(Rect(275, 58, 331, 120), 3275, 6, 7, 8, 1, NULL); + _item4.setDetails(Rect(0, 66, 22, 127), 3275, 9, 10, 11, 1, NULL); + _item5.setDetails(Rect(457, 66, 480, 127), 3275, 9, 10, 11, 1, NULL); + _item1.setDetails(Rect(0, 0, 480, 200), 3275, 0, 1, 2, 1, NULL); + + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._oldCharacterScene[3] == 3150) { + _sceneMode = 11; + R2_GLOBALS._player.setup(30, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(418, 118)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + Common::Point pt(418, 128); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (R2_GLOBALS._player._oldCharacterScene[3] == 3260) { + _sceneMode = 3276; + setAction(&_sequenceManager, this, 3276, &R2_GLOBALS._player, &_actor2, NULL); + } else { + R2_GLOBALS._player.setup(30, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(245, 135)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[3] = 3275; +} + +void Scene3275::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._sceneManager.changeScene(3150); + break; + case 3275: + R2_GLOBALS._sceneManager.changeScene(3260); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 22e5fea477..c82515c8c0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -357,6 +357,30 @@ public: virtual void signal(); }; +class Scene3275 : public SceneExt { + class Actor2 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + SceneActor _actor1; + Actor2 _actor2; + Exit1 _exit1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From ef35f1f69d3c75c2ed6dbb0bb4fe6a5551750ec1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 24 Dec 2011 14:39:22 +0100 Subject: TSAGE: R2R - Implement scene 3350 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 63 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 19 ++++++++ 3 files changed, 84 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e591436fd8..30e794627f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -214,6 +214,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Hall return new Scene3275(); case 3350: + // Cutscene - Ship landing + return new Scene3350(); case 3375: case 3385: case 3395: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 1a219e773a..ce08e9647e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1635,5 +1635,68 @@ void Scene3275::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3350 - Cutscene - Ship landing + * + *--------------------------------------------------------------------------*/ +void Scene3350::postInit(SceneObjectList *OwnerList) { + loadScene(3350); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + R2_GLOBALS._sound2.play(310); + + _rotation = R2_GLOBALS._scenePalette.addRotation(176, 203, 1); + _rotation->setDelay(3); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor1.hide(); + _actor2.postInit(); + _actor2.hide(); + _actor3.postInit(); + _actor3.hide(); + _actor4.postInit(); + _actor4.hide(); + _actor9.postInit(); + _actor9.hide(); + _actor8.postInit(); + _actor8.hide(); + _actor5.postInit(); + _actor5.hide(); + _actor6.postInit(); + _actor6.hide(); + _actor7.postInit(); + _actor7.hide(); + + _sceneMode = 3350; + setAction(&_sequenceManager, this, _sceneMode, &_actor5, &_actor6, &_actor7, NULL); +} + +void Scene3350::remove() { + R2_GLOBALS._sound2.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3350::signal() { + switch (_sceneMode) { + case 3350: + _sceneMode = 3351; + setAction(&_sequenceManager, this, 3351, &_actor4, &_actor9, &_actor8, NULL); + break; + case 3351: + _sceneMode = 3352; + setAction(&_sequenceManager, this, 3352, &_actor4, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); + case 3352: + R2_GLOBALS._sceneManager.changeScene(3395); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index c82515c8c0..ac1436637c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -381,6 +381,25 @@ public: virtual void signal(); }; +class Scene3350 : public SceneExt { +public: + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SequenceManager _sequenceManager; + PaletteRotation *_rotation; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 9ba55105fccf0489659d91cee38a899f13628168 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 25 Dec 2011 23:41:03 +0100 Subject: TSAGE: R2R - Implement scene 3400 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 247 ++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 24 ++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 313 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 40 +++ 5 files changed, 626 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 30e794627f..4462122a4d 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -219,7 +219,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3375: case 3385: case 3395: + error("Missing scene %d from group 3", sceneNumber); case 3400: + return new Scene3400(); case 3500: case 3600: case 3700: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index ce08e9647e..e3d2869634 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1698,5 +1698,252 @@ void Scene3350::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3400 - + * + *--------------------------------------------------------------------------*/ +Scene3400::Scene3400() { + _field157C = 0; +} + +void Scene3400::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field157C); +} + +void Scene3400::postInit(SceneObjectList *OwnerList) { + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); + loadScene(3400); + _field157C = 0; + R2_GLOBALS._v558B6.set(60, 0, 260, 200); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(317); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + _stripManager.addSpeaker(&_tealSpeaker); + + setZoomPercents(51, 46, 180, 200); + R2_GLOBALS._player._characterScene[1] = 3400; + R2_GLOBALS._player._characterScene[2] = 3400; + R2_GLOBALS._player._characterScene[3] = 3400; + + _actor7.postInit(); + _actor7.setup(3403, 1, 1); + _actor7.setPosition(Common::Point(190, 103)); + _actor7.fixPriority(89); + + R2_GLOBALS._player.postInit(); + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + else + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player.setPosition(Common::Point(239, 64)); + + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player.setup(20, 5, 1); + else if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._player.setup(30, 5, 1); + else + R2_GLOBALS._player.setup(10, 5, 1); + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 2) { + _actor1._numFrames = 10; + _actor1._moveDiff = Common::Point(3, 2); + } else { + _actor1._numFrames = 7; + _actor1._moveDiff = Common::Point(5, 3); + } + _actor1.changeZoom(-1); + _actor1._effect = 1; + _actor1.setPosition(Common::Point(247, 63)); + if (R2_GLOBALS._player._characterIndex == 2) + _actor1.setup(10, 5, 1); + else + _actor1.setup(20, 5, 1); + _actor1.animate(ANIM_MODE_1, NULL); + + _actor2.postInit(); + _actor2._moveDiff = Common::Point(3, 2); + _actor2.changeZoom(-1); + _actor2._effect = 1; + _actor2.setPosition(Common::Point(225, 63)); + if (R2_GLOBALS._player._characterIndex == 3) + _actor2.setup(10, 5, 1); + else + _actor2.setup(30, 5, 1); + _actor2.animate(ANIM_MODE_1, NULL); + + _actor3.postInit(); + _actor3._numFrames = 7; + _actor3._moveDiff = Common::Point(5, 3); + _actor3.changeZoom(-1); + _actor3._effect = 1; + _actor3.setPosition(Common::Point(235, 61)); + _actor3.setup(40, 3, 1); + _actor3.animate(ANIM_MODE_1, NULL); + + _actor6.postInit(); + _actor6.setup(3400, 1, 6); + _actor6.setPosition(Common::Point(236, 51)); + _actor6.fixPriority(51); + _actor6.animate(ANIM_MODE_6, NULL); + + R2_GLOBALS.clearFlag(71); + _sceneMode = 3400; + setAction(&_sequenceManager, this, 3400, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); +} + +void Scene3400::remove() { + R2_GLOBALS._sound2.fadeOut2(NULL); + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3400::signal() { + switch (_sceneMode) { + case 3305: { + warning("STUB: sub_1D227()"); + _tealSpeaker._object1.hide(); + _actor4.show(); + _actor4.setStrip(1); + Common::Point pt(158, 190); + NpcMover *mover = new NpcMover(); + _actor4.addMover(mover, &pt, this); + _sceneMode = 3402; + setAction(&_sequenceManager, this, 3402, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); + } + break; + case 3306: + R2_GLOBALS._sound2.play(318); + _actor1.setStrip(2); + R2_GLOBALS._player.setStrip(6); + _actor2.setStrip(6); + _actor3.setStrip(3); + _actor4.setStrip(1); + R2_INVENTORY.setObjectScene(34, 0); + _stripManager.start(3307, this); + if (R2_GLOBALS._player._characterIndex == 2) { + _sceneMode = 3400; + R2_GLOBALS._player.setAction(&_sequenceManager, this, 3400, &R2_GLOBALS._player, &_actor4, &_actor8, NULL); + } else { + _sceneMode = 3408; + _actor1.setAction(&_sequenceManager, this, 3408, &_actor1, &_actor4, &_actor8, NULL); + } + break; + case 3307: + case 3404: + case 3408: + if (_field157C == 0) { + R2_GLOBALS._sound2.fadeOut2(NULL); + _field157C = 1; + } else { + _sceneMode = 3308; + _stripManager.start(3308, this); + } + break; + case 3308: + warning("STUB: sub_1D227()"); + _actor1.setStrip(2); + R2_GLOBALS._player.setStrip(6); + _actor2.setStrip(6); + _actor3.setStrip(3); + _actor4.setStrip(1); + _sceneMode = 3403; + if (R2_GLOBALS._player._characterIndex == 2) + setAction(&_sequenceManager, this, 3403, R2_GLOBALS._player, &_actor3, &_actor7, NULL); + else + setAction(&_sequenceManager, this, 3403, &_actor1, &_actor3, &_actor7, NULL); + break; + case 3309: + warning("STUB: sub_1D227()"); + _actor4.setStrip(1); + _sceneMode = 3405; + if (R2_GLOBALS._player._characterIndex == 3) + setAction(&_sequenceManager, this, 3405, R2_GLOBALS._player, &_actor7, NULL); + else + setAction(&_sequenceManager, this, 3405, &_actor2, &_actor7, NULL); + break; + case 3310: + warning("STUB: sub_1D227()"); + _actor4.setStrip(1); + _sceneMode = 3406; + if (R2_GLOBALS._player._characterIndex == 1) + setAction(&_sequenceManager, this, 3406, &R2_GLOBALS._player, &_actor7, NULL); + else if (R2_GLOBALS._player._characterIndex == 2) + setAction(&_sequenceManager, this, 3406, &_actor1, &_actor7, NULL); + else if (R2_GLOBALS._player._characterIndex == 3) + setAction(&_sequenceManager, this, 3406, &_actor2, &_actor7, NULL); + break; + case 3311: + warning("STUB: sub_1D227()"); + _tealSpeaker._object1.hide(); + _actor4.show(); + _actor4.setStrip(1); + _sceneMode = 3407; + setAction(&_sequenceManager, this, 3407, &_actor4, &_actor7, NULL); + break; + case 3400: { + _actor8.postInit(); + _actor8.hide(); + _actor4.postInit(); + _actor4._numFrames = 7; + _actor4._moveDiff = Common::Point(3, 2); + _actor4.changeZoom(-1); + _actor4._effect = 1; + _actor4.setPosition(Common::Point(-15, 90)); + _actor4.setup(3402, 1, 1); + _actor4.animate(ANIM_MODE_1, NULL); + Common::Point pt1(115, 90); + NpcMover *mover1 = new NpcMover(); + _actor4.addMover(mover1, &pt1, this); + R2_GLOBALS._scrollFollower = &_actor4; + Common::Point pt2(203, 76); + NpcMover *mover2 = new NpcMover(); + _actor3.addMover(mover2, &pt2, NULL); + _sceneMode = 3401; + } + break; + case 3401: + _sceneMode = 3305; + _stripManager.start(3305, this); + break; + case 3402: + _sceneMode = 3306; + _stripManager.start(3306, this); + break; + case 3403: + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + _sceneMode = 3309; + _stripManager.start(3309, this); + break; + case 3405: + _sceneMode = 3310; + _stripManager.start(3310, this); + break; + case 3406: + _sceneMode = 3311; + _stripManager.start(3311, this); + break; + case 3407: + R2_GLOBALS._sceneManager.changeScene(3600); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index ac1436637c..8968bddf1a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -400,6 +400,30 @@ public: virtual void signal(); }; +class Scene3400 : public SceneExt { +public: + SpeakerQuinn3400 _quinnSpeaker; + SpeakerSeeker3400 _seekerSpeaker; + SpeakerMiranda3400 _mirandaSpeaker; + SpeakerWebbster3400 _webbsterSpeaker; + SpeakerTeal3400 _tealSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SequenceManager _sequenceManager; + int16 _field157C; + + Scene3400(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void synchronize(Serializer &s); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index b63409e387..edcf340e04 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1602,5 +1602,318 @@ void SpeakerMiranda3255::proc15() { } } +SpeakerQuinn3400::SpeakerQuinn3400() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +void SpeakerQuinn3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) + _object2 = &R2_GLOBALS._player; + else if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &scene->_actor1; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4010, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4010, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4012, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerSeeker3400::SpeakerSeeker3400() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor1; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4030, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 4: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 7, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 5: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4033, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerMiranda3400::SpeakerMiranda3400() { + _speakerName = "MIRANDA"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerMiranda3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4051, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4050, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerWebbster3400::SpeakerWebbster3400() { + _speakerName = "WEBBSTER"; + _color1 = 27; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerWebbster3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 7, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerTeal3400::SpeakerTeal3400() { + _speakerName = "TEAL"; + _color1 = 22; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerTeal3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor4; + _object2->hide(); + _object1.postInit(); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + _object1.setPosition(_object2->_position); + _object1.show(); + + if (scene ->_sceneMode == 3305) { + R2_GLOBALS._player.setStrip(6); + scene->_actor1.setStrip(6); + scene->_actor2.setStrip(6); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 7, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 4: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index dba402b64a..f85b412f9c 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -388,6 +388,46 @@ public: virtual Common::String getClassName() { return "SpeakerMiranda3255"; } virtual void proc15(); }; + +class SpeakerQuinn3400 : public VisualSpeaker { +public: + SpeakerQuinn3400(); + + virtual Common::String getClassName() { return "SpeakerQuinn3400"; } + virtual void proc15(); +}; + +class SpeakerSeeker3400 : public VisualSpeaker { +public: + SpeakerSeeker3400(); + + virtual Common::String getClassName() { return "SpeakerSeeker3400"; } + virtual void proc15(); +}; + +class SpeakerMiranda3400 : public VisualSpeaker { +public: + SpeakerMiranda3400(); + + virtual Common::String getClassName() { return "SpeakerMiranda3400"; } + virtual void proc15(); +}; + +class SpeakerWebbster3400 : public VisualSpeaker { +public: + SpeakerWebbster3400(); + + virtual Common::String getClassName() { return "SpeakerWebbster3400"; } + virtual void proc15(); +}; + +class SpeakerTeal3400 : public VisualSpeaker { +public: + SpeakerTeal3400(); + + virtual Common::String getClassName() { return "SpeakerTeal3400"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 9751d6ded4067f6de5b70aa61d4391b64be9e04c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 26 Dec 2011 07:21:48 +0100 Subject: TSAGE: R2R - Scene 3700: Fix a couple of bugs Thanks to Fingolfin for pointing those out --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index e3d2869634..adcd86e391 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1862,7 +1862,7 @@ void Scene3400::signal() { _actor4.setStrip(1); _sceneMode = 3403; if (R2_GLOBALS._player._characterIndex == 2) - setAction(&_sequenceManager, this, 3403, R2_GLOBALS._player, &_actor3, &_actor7, NULL); + setAction(&_sequenceManager, this, 3403, &R2_GLOBALS._player, &_actor3, &_actor7, NULL); else setAction(&_sequenceManager, this, 3403, &_actor1, &_actor3, &_actor7, NULL); break; @@ -1871,7 +1871,7 @@ void Scene3400::signal() { _actor4.setStrip(1); _sceneMode = 3405; if (R2_GLOBALS._player._characterIndex == 3) - setAction(&_sequenceManager, this, 3405, R2_GLOBALS._player, &_actor7, NULL); + setAction(&_sequenceManager, this, 3405, &R2_GLOBALS._player, &_actor7, NULL); else setAction(&_sequenceManager, this, 3405, &_actor2, &_actor7, NULL); break; -- cgit v1.2.3 From 5c6e1f168ca9ce975cf1bd321d3dfcc75334751f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 20:13:50 +1100 Subject: TSAGE: Centralised all the setDetails methods in the various games This puts them all in the common SceneHotspot class, rather than each game having their own repeated implementations of them. --- engines/tsage/ringworld2/ringworld2_logic.cpp | 29 --------------------------- engines/tsage/ringworld2/ringworld2_logic.h | 3 --- 2 files changed, 32 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 4462122a4d..dfa135be6c 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -936,35 +936,6 @@ bool SceneActor::startAction(CursorType action, Event &event) { return handled; } -void SceneActor::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) { - _resNum = resNum; - _lookLineNum = lookLineNum; - _talkLineNum = talkLineNum; - _useLineNum = useLineNum; - - switch (mode) { - case 2: - g_globals->_sceneItems.push_front(this); - break; - case 4: - g_globals->_sceneItems.addBefore(item, this); - break; - case 5: - g_globals->_sceneItems.addAfter(item, this); - break; - default: - g_globals->_sceneItems.push_back(this); - break; - } -} - -void SceneActor::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { - _resNum = resNum; - _lookLineNum = lookLineNum; - _talkLineNum = talkLineNum; - _useLineNum = useLineNum; -} - /*--------------------------------------------------------------------------*/ SceneArea::SceneArea(): EventHandler() { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 67346bcc80..2d7a81cd2f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -260,9 +260,6 @@ public: virtual void synchronize(Serializer &s); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual bool startAction(CursorType action, Event &event); - - void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); - void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; class SceneActorExt: public SceneActor { -- cgit v1.2.3 From fb67e4ab1145fef48fe88ca85c04d8035806eff0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 20:16:37 +1100 Subject: TSAGE: Ensure correct setDetails version is called in R2R Scene825::Button::setButton --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index a58740394b..225e4f3e0b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -3265,7 +3265,7 @@ void Scene825::Button::setButton(int buttonId) { break; } - setDetails(825, 6, 7, -1, 2, NULL); + setDetails(825, 6, 7, -1, 2, (SceneItem *)NULL); } void Scene825::Button::setText(int textId) { -- cgit v1.2.3 From 9fdba870c92c50ba828b9a70ade377c683549d9f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 20:39:04 +1100 Subject: TSAGE: Moved the R2R AUTODOC_ITEMS array to be part of the scene 825. Since this is the only scene that uses it, it makes as much sense to have it as part of the scene than part of the staticres file. --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 17 ++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 225e4f3e0b..9eb3e2b713 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -3269,18 +3269,33 @@ void Scene825::Button::setButton(int buttonId) { } void Scene825::Button::setText(int textId) { + Scene825 *scene = (Scene825 *)R2_GLOBALS._sceneManager._scene; + _buttonId = textId; _lookLineNum = textId; _sceneText.remove(); if (_buttonId != 0) - _sceneText.setup(AUTODOC_ITEMS[textId - 1]); + _sceneText.setup(scene->_autodocItems[textId - 1]); } /*--------------------------------------------------------------------------*/ Scene825::Scene825(): SceneExt() { _menuId = _frame1 = _frame2 = 0; + + // Setup Autodoc items list + _autodocItems[0] = MAIN_MENU; + _autodocItems[1] = DIAGNOSIS; + _autodocItems[2] = ADVANCED_PROCEDURES; + _autodocItems[3] = VITAL_SIGNS; + _autodocItems[4] = OPEN_DOOR; + _autodocItems[5] = TREATMENTS; + _autodocItems[6] = NO_MALADY_DETECTED; + _autodocItems[7] = NO_TREATMENT_REQUIRED; + _autodocItems[8] = ACCESS_CODE_REQUIRED; + _autodocItems[9] = INVALID_ACCESS_CODE; + _autodocItems[10] = FOREIGN_OBJECT_EXTRACTED; } void Scene825::postInit(SceneObjectList *OwnerList) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 7a36b8f15f..8ee8c09873 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -443,6 +443,7 @@ public: SequenceManager _sequenceManager1; SceneText _sceneText; int _menuId, _frame1, _frame2; + const char *_autodocItems[11]; public: Scene825(); virtual void synchronize(Serializer &s); -- cgit v1.2.3 From 880fcf11b5659634f890b19279d8254595c07a1d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 21:08:37 +1100 Subject: TSAGE: Fixed ambiguity with NULL parameters in R2R setDetails calls --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 76 +++++++------- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 132 ++++++++++++------------ engines/tsage/ringworld2/ringworld2_scenes3.cpp | 80 +++++++------- 3 files changed, 144 insertions(+), 144 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 9eb3e2b713..8252584b1c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -121,7 +121,7 @@ bool Scene100::Table::startAction(CursorType action, Event &event) { scene->_stasisNegator.setup(100, 7, 2); } else { scene->_stasisNegator.setup(100, 7, 1); - scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, NULL); + scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, (SceneItem *)NULL); } scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3, @@ -145,7 +145,7 @@ bool Scene100::Table::startAction(CursorType action, Event &event) { scene->_stasisNegator.setup(100, 7, 2); } else { scene->_stasisNegator.setup(100, 7, 1); - scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, NULL); + scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, (SceneItem *)NULL); } scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3, @@ -240,17 +240,17 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _door._state = 0; _door.setVisage(100); _door.setPosition(Common::Point(160, 84)); - _door.setDetails(100, 3, 4, 5, 1, NULL); + _door.setDetails(100, 3, 4, 5, 1, (SceneItem *)NULL); _doorDisplay.postInit(); _doorDisplay.setup(100, 2, 1); _doorDisplay.setPosition(Common::Point(202, 53)); - _doorDisplay.setDetails(100, -1, -1, -1, 1, NULL); + _doorDisplay.setDetails(100, -1, -1, -1, 1, (SceneItem *)NULL); _table.postInit(); _table.setup(100, 2, 3); _table.setPosition(Common::Point(175, 157)); - _table.setDetails(100, 17, 18, 20, 1, NULL); + _table.setDetails(100, 17, 18, 20, 1, (SceneItem *)NULL); _bedLights1.postInit(); _bedLights1.setup(100, 3, 1); @@ -270,13 +270,13 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _wardrobe.setVisage(101); _wardrobe.setPosition(Common::Point(231, 126)); _wardrobe.fixPriority(10); - _wardrobe.setDetails(100, 37, -1, 39, 1, NULL); + _wardrobe.setDetails(100, 37, -1, 39, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(R2_STEPPING_DISKS) == 100) { _steppingDisks.postInit(); _steppingDisks.setup(100, 8, 1); _steppingDisks.setPosition(Common::Point(274, 130)); - _steppingDisks.setDetails(100, 40, -1, 42, 1, NULL); + _steppingDisks.setDetails(100, 40, -1, 42, 1, (SceneItem *)NULL); } _terminal.setDetails(11, 100, 14, 15, 16); @@ -1212,25 +1212,25 @@ void Scene150::postInit(SceneObjectList *OwnerList) { _door._state = 0; _door.setVisage(100); _door.setPosition(Common::Point(160, 84)); - _door.setDetails(100, 3, -1, -1, 1, NULL); + _door.setDetails(100, 3, -1, -1, 1, (SceneItem *)NULL); _doorDisplay.postInit(); _doorDisplay.setup(100, 2, 1); _doorDisplay.setPosition(Common::Point(202, 53)); - _doorDisplay.setDetails(100, -1, -1, -1, 1, NULL); + _doorDisplay.setDetails(100, -1, -1, -1, 1, (SceneItem *)NULL); _emptyRoomTable.postInit(); _emptyRoomTable.setVisage(100); _emptyRoomTable.setStrip(4); _emptyRoomTable.setFrame(1); _emptyRoomTable.setPosition(Common::Point(175, 157)); - _emptyRoomTable.setDetails(150, 3, 4, 5, 1, NULL); + _emptyRoomTable.setDetails(150, 3, 4, 5, 1, (SceneItem *)NULL); _wardrobe.postInit(); _wardrobe.setVisage(101); _wardrobe.setPosition(Common::Point(231, 126)); _wardrobe.fixPriority(10); - _wardrobe.setDetails(100, 37, -1, 39, 1, NULL); + _wardrobe.setDetails(100, 37, -1, 39, 1, (SceneItem *)NULL); _terminal.setDetails(11, 100, 14, 15, 16); _desk.setDetails(12, 100, 11, -1, 13); @@ -1367,19 +1367,19 @@ void Scene200::postInit(SceneObjectList *OwnerList) { _northDoor.postInit(); _northDoor.setVisage(200); _northDoor.setPosition(Common::Point(188, 79)); - _northDoor.setDetails(200, 3, -1, -1, 1, NULL); + _northDoor.setDetails(200, 3, -1, -1, 1, (SceneItem *)NULL); _eastDoor.postInit(); _eastDoor.setVisage(200); _eastDoor.setStrip(2); _eastDoor.setPosition(Common::Point(305, 124)); - _eastDoor.setDetails(200, 6, -1, -1, 1, NULL); + _eastDoor.setDetails(200, 6, -1, -1, 1, (SceneItem *)NULL); _westDoor.postInit(); _westDoor.setVisage(200); _westDoor.setStrip(3); _westDoor.setPosition(Common::Point(62, 84)); - _westDoor.setDetails(200, 9, -1, -1, 1, NULL); + _westDoor.setDetails(200, 9, -1, -1, 1, (SceneItem *)NULL); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.setVisage(10); @@ -1533,7 +1533,7 @@ void Scene250::Button::setFloor(int floorNumber) { setPosition(Common::Point(111, (_floorNumber - 1) * 12 + 43)); fixPriority(10); - setDetails(250, -1, -1, -1, 1, NULL); + setDetails(250, -1, -1, -1, 1, (SceneItem *)NULL); } } @@ -1565,12 +1565,12 @@ void Scene250::postInit(SceneObjectList *OwnerList) { _currentFloor.setFloor(10); _currentFloor.setup(250, 1, 5); - _currentFloor.setDetails(250, 13, -1, -1, 1, NULL); + _currentFloor.setDetails(250, 13, -1, -1, 1, (SceneItem *)NULL); _button1.setFloor(11); _button1.setup(250, 1, 3); _button1.setPosition(Common::Point(400, 100)); - _button1.setDetails(250, 14, -1, -1, 1, NULL); + _button1.setDetails(250, 14, -1, -1, 1, (SceneItem *)NULL); _button1.fixPriority(190); _button1.hide(); @@ -2229,7 +2229,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _miranda.setup(302, 2, 1); _miranda.setPosition(Common::Point(47, 128)); _miranda.setAction(&_action3); - _miranda.setDetails(300, 39, 40, 41, 1, NULL); + _miranda.setDetails(300, 39, 40, 41, 1, (SceneItem *)NULL); if ((R2_GLOBALS._player._characterScene[2] == 300) || (R2_GLOBALS._player._characterScene[2] == 325)) { _seeker.postInit(); @@ -2237,7 +2237,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _seeker.setPosition(Common::Point(158, 108)); _seeker.fixPriority(130); _seeker.setAction(&_action2); - _seeker.setDetails(300, 42, 43, 44, 1, NULL); + _seeker.setDetails(300, 42, 43, 44, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -2251,14 +2251,14 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _miranda.setup(302, 2, 1); _miranda.setPosition(Common::Point(47, 128)); _miranda.setAction(&_action3); - _miranda.setDetails(300, 39, 40, 41, 1, NULL); + _miranda.setDetails(300, 39, 40, 41, 1, (SceneItem *)NULL); if ((R2_GLOBALS._player._characterScene[1] == 300) || (R2_GLOBALS._player._characterScene[1] == 325)) { _quinn.postInit(); _quinn.setup(302, 3, 1); _quinn.setPosition(Common::Point(271, 150)); _quinn.setAction(&_action1); - _quinn.setDetails(300, 50, 51, 52, 1, NULL); + _quinn.setDetails(300, 50, 51, 52, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -2275,7 +2275,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _seeker.setPosition(Common::Point(158, 108)); _seeker.fixPriority(130); _seeker.setAction(&_action2); - _seeker.setDetails(300, 42, 43, 44, 1, NULL); + _seeker.setDetails(300, 42, 43, 44, 1, (SceneItem *)NULL); } if ((R2_GLOBALS._player._characterScene[1] == 300) || (R2_GLOBALS._player._characterScene[1] == 325)) { @@ -2283,7 +2283,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _quinn.setup(302, 3, 1); _quinn.setPosition(Common::Point(271, 150)); _quinn.setAction(&_action1); - _quinn.setDetails(300, 50, 51, 52, 1, NULL); + _quinn.setDetails(300, 50, 51, 52, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -2305,11 +2305,11 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _manualOverrides.setDetails(14, 300, 15, -1, 17); _scanners1.setDetails(Rect(126, 15, 183, 25), 300, 18, -1, 20, 1, NULL); _scanners2.setDetails(Rect(126, 80, 183, 90), 300, 18, -1, 20, 1, NULL); - _protocolDisplay.setDetails(300, 27, -1, 29, 1, NULL); + _protocolDisplay.setDetails(300, 27, -1, 29, 1, (SceneItem *)NULL); _indirectLighting1.setDetails(Rect(74, 71, 122, 89), 300, 21, -1, -1, 1, NULL); _indirectLighting2.setDetails(Rect(197, 71, 245, 89), 300, 21, -1, -1, 1, NULL); _lighting.setDetails(Rect(129, 3, 190, 14), 300, 24, -1, -1, 1, NULL); - _doorway.setDetails(300, 3, -1, 5, 1, NULL); + _doorway.setDetails(300, 3, -1, 5, 1, (SceneItem *)NULL); _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 300, 0, -1, -1, 1, NULL); switch (R2_GLOBALS._player._characterIndex) { @@ -2753,7 +2753,7 @@ void Scene400::postInit(SceneObjectList *OwnerList) { _door.postInit(); _door.setVisage(100); _door.setPosition(Common::Point(123, 84)); - _door.setDetails(400, 24, -1, 26, 1, NULL); + _door.setDetails(400, 24, -1, 26, 1, (SceneItem *)NULL); _consoleDisplay.postInit(); _consoleDisplay.setup(400, 4, 1); @@ -2772,7 +2772,7 @@ void Scene400::postInit(SceneObjectList *OwnerList) { _reader.postInit(); _reader.setup(400, 5, 2); _reader.setPosition(Common::Point(301, 95)); - _reader.setDetails(400, 54, -1, 56, 1, NULL); + _reader.setDetails(400, 54, -1, 56, 1, (SceneItem *)NULL); } if (R2_INVENTORY.getObjectScene(R2_SENSOR_PROBE) == 400) { @@ -2780,14 +2780,14 @@ void Scene400::postInit(SceneObjectList *OwnerList) { _sensorProbe.setup(400, 5, 1); _sensorProbe.setPosition(Common::Point(251, 104)); _sensorProbe.fixPriority(121); - _sensorProbe.setDetails(400, 57, -1, 59, 1, NULL); + _sensorProbe.setDetails(400, 57, -1, 59, 1, (SceneItem *)NULL); } if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_UNIT) == 400) { _attractorUnit.postInit(); _attractorUnit.setup(400, 5, 3); _attractorUnit.setPosition(Common::Point(265, 129)); - _attractorUnit.setDetails(400, 60, -1, 62, 1, NULL); + _attractorUnit.setDetails(400, 60, -1, 62, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -3052,12 +3052,12 @@ void Scene800::postInit(SceneObjectList *OwnerList) { _door.setVisage(800); _door.setPosition(Common::Point(286, 108)); _door.fixPriority(50); - _door.setDetails(800, 3, -1, -1, 1, NULL); + _door.setDetails(800, 3, -1, -1, 1, (SceneItem *)NULL); _autodocCover.postInit(); _autodocCover.setup(800, 2, 1); _autodocCover.setPosition(Common::Point(119, 161)); - _autodocCover.setDetails(800, 6, 7, -1, 1, NULL); + _autodocCover.setDetails(800, 6, 7, -1, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) { _opticalFibre.postInit(); @@ -3087,13 +3087,13 @@ void Scene800::postInit(SceneObjectList *OwnerList) { _cabinet.postInit(); _cabinet.setup(801, 1, R2_GLOBALS.getFlag(56) ? 6 : 1); _cabinet.setPosition(Common::Point(169, 79)); - _cabinet.setDetails(800, 41, -1, -1, 1, NULL); + _cabinet.setDetails(800, 41, -1, -1, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(R2_9) == 800) { _comScanner.postInit(); _comScanner.setup(801, 2, 1); _comScanner.setPosition(Common::Point(174, 73)); - _comScanner.setDetails(800, 34, 35, -1, 1, NULL); + _comScanner.setDetails(800, 34, 35, -1, 1, (SceneItem *)NULL); } _tray.postInit(); @@ -3101,7 +3101,7 @@ void Scene800::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS.getFlag(10)) _tray.setFrame(5); _tray.setPosition(Common::Point(203, 144)); - _tray.setDetails(800, 12, -1, 14, 1, NULL); + _tray.setDetails(800, 12, -1, 14, 1, (SceneItem *)NULL); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.setVisage(10); @@ -3641,12 +3641,12 @@ void Scene850::postInit(SceneObjectList *OwnerList) { _liftDoor.postInit(); _liftDoor.setup(850, 2, 1); _liftDoor.setPosition(Common::Point(188, 79)); - _liftDoor.setDetails(850, 3, -1, -1, 1, NULL); + _liftDoor.setDetails(850, 3, -1, -1, 1, (SceneItem *)NULL); _sickBayDoor.postInit(); _sickBayDoor.setup(850, 3, 1); _sickBayDoor.setPosition(Common::Point(62, 84)); - _sickBayDoor.setDetails(850, 9, -1, -1, 1, NULL); + _sickBayDoor.setDetails(850, 9, -1, -1, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(R2_CLAMP) == 850) { _clamp.postInit(); @@ -3654,7 +3654,7 @@ void Scene850::postInit(SceneObjectList *OwnerList) { _clamp.setPosition(Common::Point(242, 93)); _clamp.fixPriority(81); _clamp.animate(ANIM_MODE_2, NULL); - _clamp.setDetails(850, 27, -1, -1, 1, NULL); + _clamp.setDetails(850, 27, -1, -1, 1, (SceneItem *)NULL); } _panel.postInit(); @@ -3665,7 +3665,7 @@ void Scene850::postInit(SceneObjectList *OwnerList) { _panel.setPosition(Common::Point(232, 119)); _panel.fixPriority(82); - _panel.setDetails(850, 24, -1, -1, 1, NULL); + _panel.setDetails(850, 24, -1, -1, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 850) { _fibre.postInit(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 1fe920e65c..ef2d0526ae 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -137,10 +137,10 @@ void Scene2000::initPlayer() { _object1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _object1.setup(20, 5, 1); - _object1.setDetails(9002, 0, 4, 3, 1, NULL); + _object1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _object1.setup(2008, 5, 1); - _object1.setDetails(9001, 0, 5, 3, 1, NULL); + _object1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } if (_exit1._enabled) { if (_exit2._enabled) @@ -806,47 +806,47 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { _objList1[0].setVisage(2000); _objList1[0].setStrip(2); - _objList1[0].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[0].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[1].setVisage(2001); _objList1[1].setStrip(2); - _objList1[1].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[1].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[2].setVisage(2003); _objList1[2].setStrip(1); - _objList1[2].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[2].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[3].setVisage(2007); _objList1[3].setStrip(2); - _objList1[3].setDetails(2001, 12, -1, -1, 1, NULL); + _objList1[3].setDetails(2001, 12, -1, -1, 1, (SceneItem *)NULL); _objList1[4].setVisage(2004); _objList1[4].setStrip(2); - _objList1[4].setDetails(2001, 19, -1, -1, 1, NULL); + _objList1[4].setDetails(2001, 19, -1, -1, 1, (SceneItem *)NULL); _objList1[5].setVisage(2003); _objList1[5].setStrip(2); - _objList1[5].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[5].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[6].setVisage(2000); _objList1[6].setStrip(1); - _objList1[6].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[6].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[7].setVisage(2000); _objList1[7].setStrip(2); - _objList1[7].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[7].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[8].setVisage(2000); _objList1[8].setStrip(2); - _objList1[8].setDetails(2001, 0, -1, -1, 1, NULL); + _objList1[8].setDetails(2001, 0, -1, -1, 1, (SceneItem *)NULL); _objList1[9].setVisage(2006); _objList1[9].setStrip(1); - _objList1[9].setDetails(2001, 6, -1, -1, 1, NULL); + _objList1[9].setDetails(2001, 6, -1, -1, 1, (SceneItem *)NULL); _objList1[10].setVisage(2007); _objList1[10].setStrip(1); - _objList1[10].setDetails(2001, 12, -1, -1, 1, NULL); + _objList1[10].setDetails(2001, 12, -1, -1, 1, (SceneItem *)NULL); for (int i = 0; i < 11; i++) { _objList1[i].animate(ANIM_MODE_1, NULL); @@ -1099,10 +1099,10 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { _actor2.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor2.setup(20, 5, 1); - _actor2.setDetails(9002, 0, 4, 3, 1, NULL); + _actor2.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor2.setup(2008, 5, 1); - _actor2.setDetails(9001, 0, 5, 3, 1, NULL); + _actor2.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor2.setPosition(Common::Point(135, 128)); } @@ -1115,11 +1115,11 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { } else { _actor3.setup(2350, 0, 1); _actor3.setPosition(Common::Point(197, 101)); - _actor3.setDetails(2000, 12, -1, -1, 1, NULL); + _actor3.setDetails(2000, 12, -1, -1, 1, (SceneItem *)NULL); _actor3.fixPriority(10); _actor4.setup(2350, 1, 2); _actor4.setPosition(Common::Point(199, 129)); - _actor4.setDetails(2000, 12, -1, -1, 1, NULL); + _actor4.setDetails(2000, 12, -1, -1, 1, (SceneItem *)NULL); _actor4.fixPriority(10); } _item1.setDetails(Rect(0, 0, 320, 200), 2000, 9, -1, -1, 1, NULL); @@ -1392,10 +1392,10 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { _actor2.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor2.setup(20, 5, 1); - _actor2.setDetails(9002, 0, 4, 3, 1, NULL); + _actor2.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor2.setup(2008, 5, 1); - _actor2.setDetails(9001, 0, 5, 3, 1, NULL); + _actor2.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor2.setPosition(Common::Point(250, 185)); } @@ -1408,7 +1408,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { _actor1.setPosition(Common::Point(290, 9)); _actor1.fixPriority(20); - _actor1.setDetails(2455, 12, -1, -1, 1, NULL); + _actor1.setDetails(2455, 12, -1, -1, 1, (SceneItem *)NULL); _item1.setDetails(Rect(225, 52, 248, 65), 2425, -1, -1, -1, 1, NULL); _item2.setDetails(Rect(292, 81, 316, 94), 2425, -1, -1, -1, 1, NULL); @@ -1532,14 +1532,14 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { _actor2.setup(2435, 1, 5); _actor2.setPosition(Common::Point(205, 119)); _actor2.fixPriority(152); - _actor2.setDetails(2430, 51, -1, 53, 1, NULL); + _actor2.setDetails(2430, 51, -1, 53, 1, (SceneItem *)NULL); } if (R2_INVENTORY.getObjectScene(50) == 2435) { _actor3.postInit(); _actor3.setup(2435, 1, 1); _actor3.setPosition(Common::Point(31, 65)); - _actor3.setDetails(2430, 48, -1, -1, 1, NULL); + _actor3.setDetails(2430, 48, -1, -1, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -1557,10 +1557,10 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(189, 137)); R2_GLOBALS._walkRegions.enableRegion(4); @@ -1685,7 +1685,7 @@ void Scene2435::postInit(SceneObjectList *OwnerList) { _actor2.postInit(); _actor2.setup(2005, 3, 1); _actor2.setPosition(Common::Point(219, 106)); - _actor2.setDetails(2001, 25, 26, -1, 1, NULL); + _actor2.setDetails(2001, 25, 26, -1, 1, (SceneItem *)NULL); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); if (R2_GLOBALS._player._characterIndex == 1) { @@ -1700,10 +1700,10 @@ void Scene2435::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(107, 145)); R2_GLOBALS._walkRegions.enableRegion(2); @@ -1818,7 +1818,7 @@ void Scene2440::postInit(SceneObjectList *OwnerList) { _actor2.setup(2435, 1, 1); _actor2.setPosition(Common::Point(94, 80)); _actor2.fixPriority(106); - _actor2.setDetails(2430, 48, -1, -1, 1, NULL); + _actor2.setDetails(2430, 48, -1, -1, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); R2_GLOBALS._player.enableControl(); @@ -1836,10 +1836,10 @@ void Scene2440::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 5, 1); - _actor1.setDetails(9002, 0, 5, 3, 1, NULL); + _actor1.setDetails(9002, 0, 5, 3, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(38, 119)); } @@ -1983,7 +1983,7 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _actor2.setVisage(2009); _actor2.setPosition(Common::Point(190, 119)); _actor2.fixPriority(50); - _actor2.setDetails(2450, 0, -1, -1, 1, NULL); + _actor2.setDetails(2450, 0, -1, -1, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -2006,7 +2006,7 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); _actor1.setup(20, 6, 1); _actor1.setPosition(Common::Point(240, 120)); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } setAction(&_sequenceManager, this, 2451, &R2_GLOBALS._player, NULL); } else { @@ -2018,7 +2018,7 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _actor1.setup(2008, 6, 1); else _actor1.setup(10, 6, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); _actor1.setPosition(Common::Point(106, 111)); } setAction(&_sequenceManager, this, 2456, &R2_GLOBALS._player, NULL); @@ -2039,18 +2039,18 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); _actor1.setup(20, 6, 1); _actor1.setPosition(Common::Point(240, 120)); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } } else { _actor1.postInit(); _actor1.setup(20, 8, 1); _actor1.setPosition(Common::Point(93, 158)); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); _actor3.postInit(); _actor3.setup(2001, 7, 1); _actor3.setPosition(Common::Point(34, 153)); - _actor3.setDetails(2001, 40, -1, -1, 1, NULL); + _actor3.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); _exit1._enabled = false; } @@ -2068,7 +2068,7 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _actor1.setup(10, 6, 1); } _actor1.setPosition(Common::Point(106, 111)); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } } else { _actor1.postInit(); @@ -2078,12 +2078,12 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _actor1.setup(10, 6, 1); } _actor1.setPosition(Common::Point(106, 111)); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); _actor3.postInit(); _actor3.setup(2001, 7, 1); _actor3.setPosition(Common::Point(34, 153)); - _actor3.setDetails(2001, 40, -1, -1, 1, NULL); + _actor3.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); _exit1._enabled = false; } @@ -2187,9 +2187,9 @@ void Scene2450::signal() { break; default: _actor1.postInit(); - _actor1.setDetails(9002, 0, 4, 3, 2, NULL); + _actor1.setDetails(9002, 0, 4, 3, 2, (SceneItem *)NULL); _actor3.postInit(); - _actor3.setDetails(2001, 40, -1, -1, 2, NULL); + _actor3.setDetails(2001, 40, -1, -1, 2, (SceneItem *)NULL); _sceneMode = 2453; setAction(&_sequenceManager, this, 2453, &_actor3, &_actor1, NULL); break; @@ -2211,7 +2211,7 @@ bool Scene2455::Actor1::startAction(CursorType action, Event &event) { scene->_actor2._lookLineNum = 9; scene->_actor1.remove(); scene->_actor3.postInit(); - scene->_actor3.setDetails(2455, 16, 1, -1, 2, NULL); + scene->_actor3.setDetails(2455, 16, 1, -1, 2, (SceneItem *)NULL); scene->setAction(&scene->_sequenceManager, scene, 2458, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor3, NULL); return true; } @@ -2230,7 +2230,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { scene->_actor1.postInit(); scene->_actor1.setup(2456, 3, 3); scene->_actor1.setPosition(Common::Point(162, 165)); - scene->_actor1.setDetails(2455, 15, 1, -1, 2, NULL); + scene->_actor1.setDetails(2455, 15, 1, -1, 2, (SceneItem *)NULL); scene->_sceneMode = 11; scene->setAction(&scene->_sequenceManager, scene, 2457, &R2_GLOBALS._player, &scene->_actor2, NULL); return true; @@ -2242,7 +2242,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { scene->_actor1.postInit(); scene->_actor1.setup(2456, 3, 3); scene->_actor1.setPosition(Common::Point(162, 165)); - scene->_actor1.setDetails(2455, 15, 1, -1, 2, NULL); + scene->_actor1.setDetails(2455, 15, 1, -1, 2, (SceneItem *)NULL); scene->_sceneMode = 12; scene->setAction(&scene->_sequenceManager, scene, 2457, &R2_GLOBALS._player, &scene->_actor2, NULL); return true; @@ -2295,25 +2295,25 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); _actor1.setup(2456, 3, 3); _actor1.setPosition(Common::Point(162, 165)); - _actor1.setDetails(2455, 15, 1, -1, 1, NULL); + _actor1.setDetails(2455, 15, 1, -1, 1, (SceneItem *)NULL); } } else { _actor3.postInit(); _actor3.setup(2456, 3, 1); _actor3.setPosition(Common::Point(176, 165)); - _actor3.setDetails(2455, 16, 1, -1, 1, NULL); + _actor3.setDetails(2455, 16, 1, -1, 1, (SceneItem *)NULL); } _actor2.postInit(); if (R2_INVENTORY.getObjectScene(29) == 2455) { _actor2.setup(2456, 3, 2); - _actor2.setDetails(2455, 9, 1, -1, 1, NULL); + _actor2.setDetails(2455, 9, 1, -1, 1, (SceneItem *)NULL); } else { if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455)) _actor2.setup(2455, 1, 1); else _actor2.setup(2456, 1, 1); - _actor2.setDetails(2455, 3, 1, -1, 1, NULL); + _actor2.setDetails(2455, 3, 1, -1, 1, (SceneItem *)NULL); } _actor2.setPosition(Common::Point(162, 165)); _actor2.fixPriority(20); @@ -2426,11 +2426,11 @@ void Scene2500::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(21, 3, 1); - _actor1.setDetails(9002, 1, -1, -1, 1, NULL); + _actor1.setDetails(9002, 1, -1, -1, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 3, 1); _actor1.changeZoom(50); - _actor1.setDetails(9001, 0, -1, -1, 1, NULL); + _actor1.setDetails(9001, 0, -1, -1, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(141, 94)); } @@ -2540,13 +2540,13 @@ void Scene2525::postInit(SceneObjectList *OwnerList) { _actor3.setup(2435, 1, 2); _actor3.setPosition(Common::Point(78, 155)); _actor3.fixPriority(155); - _actor3.setDetails(2525, 27, -1, -1, 1, NULL); + _actor3.setDetails(2525, 27, -1, -1, 1, (SceneItem *)NULL); } _actor2.postInit(); _actor2.setup(2525, 1, 1); _actor2.setPosition(Common::Point(183, 114)); - _actor2.setDetails(2525, 15, -1, -1, 1, NULL); + _actor2.setDetails(2525, 15, -1, -1, 1, (SceneItem *)NULL); _actor2.animate(ANIM_MODE_2, NULL); _actor2._numFrames = 3; @@ -2564,10 +2564,10 @@ void Scene2525::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(209, 162)); @@ -2696,7 +2696,7 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { _actor2.setup(2435, 1, 3); _actor2.setPosition(Common::Point(299, 80)); _actor2.fixPriority(80); - _actor2.setDetails(2530, 28, -1, -1, 1, NULL); + _actor2.setDetails(2530, 28, -1, -1, 1, (SceneItem *)NULL); } _actor3.postInit(); @@ -2707,7 +2707,7 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { _actor3.setup(2531, 4, 1); _actor3.setPosition(Common::Point(173, 131)); } - _actor3.setDetails(2530, 22, -1, -1, 1, NULL); + _actor3.setDetails(2530, 22, -1, -1, 1, (SceneItem *)NULL); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -2725,10 +2725,10 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(20, 130)); R2_GLOBALS._walkRegions.enableRegion(1); @@ -2849,14 +2849,14 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { _actor4.setup(2435, 1, 4); _actor4.setPosition(Common::Point(47, 74)); _actor4.fixPriority(74); - _actor4.setDetails(2535, 21, -1, -1, 1, NULL); + _actor4.setDetails(2535, 21, -1, -1, 1, (SceneItem *)NULL); } if (R2_INVENTORY.getObjectScene(20) == 2535) { _actor3.postInit(); _actor3.setup(2535, 3, 1); _actor3.setPosition(Common::Point(203, 131)); - _actor3.setDetails(3, 20, -1, -1, 1, NULL); + _actor3.setDetails(3, 20, -1, -1, 1, (SceneItem *)NULL); R2_GLOBALS._walkRegions.enableRegion(6); } @@ -2864,7 +2864,7 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { _actor3.postInit(); _actor3.setup(2536, 1, 2); _actor3.setPosition(Common::Point(164, 133)); - _actor3.setDetails(3, 20, -1, -1, 1, NULL); + _actor3.setDetails(3, 20, -1, -1, 1, (SceneItem *)NULL); } if (R2_GLOBALS.getFlag(73)) { @@ -2872,7 +2872,7 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { _actor2.setup(2536, 1, 1); _actor2.setPosition(Common::Point(160, 130)); _actor2.fixPriority(122); - _actor2.setDetails(2535, 37, -1, -1, 1, NULL); + _actor2.setDetails(2535, 37, -1, -1, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -2890,10 +2890,10 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, NULL); + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, NULL); + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } _actor1.setPosition(Common::Point(245, 115)); R2_GLOBALS._walkRegions.enableRegion(2); @@ -2940,7 +2940,7 @@ void Scene2535::signal() { _sceneMode = 20; _actor3.show(); _actor3.setup(2536, 1, 2); - _actor3.setDetails(3, 20, -1, -1, 3, NULL); + _actor3.setDetails(3, 20, -1, -1, 3, (SceneItem *)NULL); _actor3.setPosition(Common::Point(164, 150)); _actor3.fixPriority(130); _actor3._moveDiff.y = 1; @@ -4430,7 +4430,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) { _actor1._moveDiff = Common::Point(2, 1); _actor1.setPosition(Common::Point(122, 82)); _actor1.animate(ANIM_MODE_NONE, NULL); - _actor1.setDetails(2800, -1, -1, -1, 1, NULL); + _actor1.setDetails(2800, -1, -1, -1, 1, (SceneItem *)NULL); } _item1.setDetails(Rect(0, 0, 320, 200), 2800, -1, -1, -1, 1, NULL); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index adcd86e391..85e1f7760b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -102,16 +102,16 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { _guard.setup(3110, 5, 1); _guard.changeZoom(50); _guard.setPosition(Common::Point(10, 149)); - _guard.setDetails(3100, 6, -1, -1, 2, NULL); + _guard.setDetails(3100, 6, -1, -1, 2, (SceneItem *)NULL); _actor4.postInit(); _actor4.setup(3103, 1, 1); _actor4.setPosition(Common::Point(278, 113)); - _actor4.setDetails(3100, 9, -1, -1, 2, NULL); + _actor4.setDetails(3100, 9, -1, -1, 2, (SceneItem *)NULL); _actor4.animate(ANIM_MODE_2, NULL); _field412 = 1; - _actor1.setDetails(3100, 3, -1, -1, 2, NULL); + _actor1.setDetails(3100, 3, -1, -1, 2, (SceneItem *)NULL); R2_GLOBALS._sound1.play(243); R2_GLOBALS._sound2.play(130); _sceneMode = 3100; @@ -130,18 +130,18 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { _guard.setup(3110, 5, 1); _guard.changeZoom(50); _guard.setPosition(Common::Point(10, 149)); - _guard.setDetails(3100, 6, -1, -1, 2, NULL); + _guard.setDetails(3100, 6, -1, -1, 2, (SceneItem *)NULL); _actor4.postInit(); _actor4.setup(3103, 1, 1); _actor4.setPosition(Common::Point(278, 113)); - _actor4.setDetails(3100, 9, -1, -1, 2, NULL); + _actor4.setDetails(3100, 9, -1, -1, 2, (SceneItem *)NULL); _actor4.animate(ANIM_MODE_2, NULL); _actor1.postInit(); _actor1.setup(3104, 4, 1); _actor1.setPosition(Common::Point(143, 104)); - _actor1.setDetails(3100, 3, -1, -1, 2, NULL); + _actor1.setDetails(3100, 3, -1, -1, 2, (SceneItem *)NULL); R2_GLOBALS._player.setup(3110, 3, 1); R2_GLOBALS._player.changeZoom(50); @@ -306,7 +306,7 @@ void Scene3125::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); _actor1.setup(3175, 1, 1); _actor1.setPosition(Common::Point(35, 72)); - _actor1.setDetails(3125, 12, 13, -1, 1, NULL); + _actor1.setDetails(3125, 12, 13, -1, 1, (SceneItem *)NULL); _actor2.postInit(); _actor2.setup(3126, 4, 1); @@ -421,7 +421,7 @@ bool Scene3150::Item6::startAction(CursorType action, Event &event) { scene->_actor5.postInit(); scene->_actor5._effect = 6; scene->_actor5._shade = 3; - scene->_actor5.setDetails(3150, 30, -1, -1, 2, NULL); + scene->_actor5.setDetails(3150, 30, -1, -1, 2, (SceneItem *)NULL); R2_GLOBALS._player.disableControl(); scene->_sceneMode = 3159; @@ -562,7 +562,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor2.fixPriority(125); } else { _actor2.setup(3151, 1, 1); - _actor2.setDetails(3150, 8, -1, 9, 1, NULL); + _actor2.setDetails(3150, 8, -1, 9, 1, (SceneItem *)NULL); } if (R2_GLOBALS.getFlag(78)) { @@ -571,7 +571,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor1.setPosition(Common::Point(104, 129)); _actor1._effect = 6; _actor1._shade = 3; - _actor1.setDetails(3150, 24, -1, -1, -1, NULL); + _actor1.setDetails(3150, 24, -1, -1, -1, (SceneItem *)NULL); } _actor7.postInit(); @@ -581,7 +581,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { else _actor7.setPosition(Common::Point(264, 58)); _actor7.fixPriority(50); - _actor7.setDetails(3150, 17, -1, 19, 1, NULL); + _actor7.setDetails(3150, 17, -1, 19, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(41) == 3150) { _actor4.postInit(); @@ -592,10 +592,10 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._walkRegions.enableRegion(5); R2_GLOBALS._walkRegions.enableRegion(6); _actor4.setup(3152, 4, 10); - _actor4.setDetails(3150, 14, -1, -1, 1, NULL); + _actor4.setDetails(3150, 14, -1, -1, 1, (SceneItem *)NULL); } else { _actor4.setup(3152, 7, 4); - _actor4.setDetails(3150, 13, -1, -1, 1, NULL); + _actor4.setDetails(3150, 13, -1, -1, 1, (SceneItem *)NULL); } _actor4.fixPriority(110); _actor4.setPosition(Common::Point(83, 88)); @@ -604,7 +604,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { } else { _actor4.setup(3152, 7, 3); _actor4.setPosition(Common::Point(143, 70)); - _actor4.setDetails(3150, 15, -1, -1, 1, NULL); + _actor4.setDetails(3150, 15, -1, -1, 1, (SceneItem *)NULL); } } @@ -635,13 +635,13 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor5.setup(3152, 7, 7); _actor5.setPosition(Common::Point(155, 79)); } - _actor5.setDetails(3150, 30, -1, -1, 2, NULL); + _actor5.setDetails(3150, 30, -1, -1, 2, (SceneItem *)NULL); } _actor6.postInit(); _actor6.setup(3152, 7, 6); _actor6.setPosition(Common::Point(98, 73)); - _actor6.setDetails(3150, 43, -1, -1, 1, NULL); + _actor6.setDetails(3150, 43, -1, -1, 1, (SceneItem *)NULL); _item2.setDetails(12, 3150, 10, -1, 12); _item3.setDetails(Rect(186, 17, 210, 36), 3150, 6, -1, -1, 1, NULL); @@ -718,9 +718,9 @@ void Scene3150::signal() { break; case 3153: R2_GLOBALS.setFlag(76); - _actor4.setDetails(3150, 14, -1, -1, 3, NULL); + _actor4.setDetails(3150, 14, -1, -1, 3, (SceneItem *)NULL); _actor1.postInit(); - _actor1.setDetails(3150, 24, -1, -1, 2, NULL); + _actor1.setDetails(3150, 24, -1, -1, 2, (SceneItem *)NULL); _sceneMode = 3161; setAction(&_sequenceManager, this, 3161, &_actor1, &_actor2, NULL); break; @@ -734,7 +734,7 @@ void Scene3150::signal() { R2_GLOBALS._player.enableControl(); break; case 3156: - _actor5.setDetails(3150, 30, -1, -1, 2, NULL); + _actor5.setDetails(3150, 30, -1, -1, 2, (SceneItem *)NULL); R2_INVENTORY.setObjectScene(42, 3150); R2_GLOBALS._player.enableControl(); break; @@ -747,7 +747,7 @@ void Scene3150::signal() { R2_GLOBALS.setFlag(75); R2_INVENTORY.setObjectScene(41, 3150); _actor4.fixPriority(110); - _actor4.setDetails(3150, 13, -1, -1, 2, NULL); + _actor4.setDetails(3150, 13, -1, -1, 2, (SceneItem *)NULL); R2_GLOBALS._player.enableControl(); break; case 3159: @@ -884,7 +884,7 @@ void Scene3175::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); _actor1.setup(3175, 1, 1); _actor1.setPosition(Common::Point(35, 72)); - _actor1.setDetails(3175, 9, 10, -1, 1, NULL); + _actor1.setDetails(3175, 9, 10, -1, 1, (SceneItem *)NULL); _actor2.postInit(); _actor2.setup(3175, 2, 1); @@ -893,7 +893,7 @@ void Scene3175::postInit(SceneObjectList *OwnerList) { _actor3.postInit(); _actor3.setup(3175, 3, 1); _actor3.setPosition(Common::Point(199, 117)); - _actor3.setDetails(3175, 15, 16, 17, 1, NULL); + _actor3.setDetails(3175, 15, 16, 17, 1, (SceneItem *)NULL); _item2.setDetails(12, 3175, 3, 1, 5); _item3.setDetails(11, 3175, 6, 7, 8); @@ -1162,19 +1162,19 @@ void Scene3250::postInit(SceneObjectList *OwnerList) { _actor1.setup(3250, 6, 1); _actor1.setPosition(Common::Point(25, 148)); _actor1.fixPriority(10); - _actor1.setDetails(3250, 9, 10, -1, 1, NULL); + _actor1.setDetails(3250, 9, 10, -1, 1, (SceneItem *)NULL); _actor2.postInit(); _actor2.setup(3250, 4, 1); _actor2.setPosition(Common::Point(259, 126)); _actor2.fixPriority(10); - _actor2.setDetails(3250, 9, 10, -1, 1, NULL); + _actor2.setDetails(3250, 9, 10, -1, 1, (SceneItem *)NULL); _actor3.postInit(); _actor3.setup(3250, 5, 1); _actor3.setPosition(Common::Point(302, 138)); _actor3.fixPriority(10); - _actor3.setDetails(3250, 9, 10, -1, 1, NULL); + _actor3.setDetails(3250, 9, 10, -1, 1, (SceneItem *)NULL); _item3.setDetails(Rect(119, 111, 149, 168), 3250, 6, 7, 2, 1, NULL); _item2.setDetails(Rect(58, 85, 231, 138), 3250, 12, 7, 2, 1, NULL); @@ -1405,67 +1405,67 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _actor13.postInit(); _actor13.setup(3260, 6, 1); _actor13.setPosition(Common::Point(40, 106)); - _actor13.setDetails(3260, 18, 1, -1, 1, NULL); + _actor13.setDetails(3260, 18, 1, -1, 1, (SceneItem *)NULL); if (R2_INVENTORY.getObjectScene(52) == 3260) { _actor14.postInit(); _actor14.setup(3260, 7, 1); _actor14.setPosition(Common::Point(202, 66)); - _actor14.setDetails(3260, 12, 1, -1, 1, NULL); + _actor14.setDetails(3260, 12, 1, -1, 1, (SceneItem *)NULL); } _actor1.postInit(); _actor1.setup(3260, 1, 1); _actor1.setPosition(Common::Point(93, 73)); - _actor1.setDetails(3260, 3, 1, 5, 1, NULL); + _actor1.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor1.setAction(&_action1, &_actor1); _actor2.postInit(); _actor2.setup(3260, 2, 1); _actor2.setPosition(Common::Point(142, 63)); - _actor2.setDetails(3260, 3, 1, 5, 1, NULL); + _actor2.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor2.setAction(&_action2, &_actor2); _actor3.postInit(); _actor3.setup(3260, 2, 1); _actor3.setPosition(Common::Point(166, 54)); - _actor3.setDetails(3260, 3, 1, 5, 1, NULL); + _actor3.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor3.setAction(&_action3, &_actor3); _actor4.postInit(); _actor4.setup(3260, 2, 1); _actor4.setPosition(Common::Point(190, 46)); - _actor4.setDetails(3260, 3, 1, 5, 1, NULL); + _actor4.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor4.setAction(&_action4, &_actor4); _actor5.postInit(); _actor5.setup(3260, 2, 1); _actor5.setPosition(Common::Point(142, 39)); - _actor5.setDetails(3260, 3, 1, 5, 1, NULL); + _actor5.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor5.setAction(&_action5, &_actor5); _actor6.postInit(); _actor6.setup(3260, 2, 1); _actor6.setPosition(Common::Point(166, 30)); - _actor6.setDetails(3260, 3, 1, 5, 1, NULL); + _actor6.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor6.setAction(&_action6, &_actor6); _actor7.postInit(); _actor7.setup(3260, 2, 1); _actor7.setPosition(Common::Point(190, 22)); - _actor7.setDetails(3260, 3, 1, 5, 1, NULL); + _actor7.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor7.setAction(&_action7, &_actor7); _actor8.postInit(); _actor8.setup(3260, 2, 1); _actor8.setPosition(Common::Point(142, 14)); - _actor8.setDetails(3260, 3, 1, 5, 1, NULL); + _actor8.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor8.setAction(&_action8, &_actor8); _actor9.postInit(); _actor9.setup(3260, 2, 1); _actor9.setPosition(Common::Point(166, 6)); - _actor9.setDetails(3260, 3, 1, 5, 1, NULL); + _actor9.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _actor9.setAction(&_action9, &_actor9); _actor10.postInit(); @@ -1473,7 +1473,7 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _actor10.setPosition(Common::Point(265, 163)); _actor10.fixPriority(180); _actor10._numFrames = 10; - _actor10.setDetails(3260, 6, 1, 8, 1, NULL); + _actor10.setDetails(3260, 6, 1, 8, 1, (SceneItem *)NULL); _actor10.animate(ANIM_MODE_2, NULL); _actor11.postInit(); @@ -1482,7 +1482,7 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _actor11.fixPriority(120); _actor11.setAction(&_action11, &_actor11); _actor11._numFrames = 15; - _actor11.setDetails(3260, 6, 1, 8, 1, NULL); + _actor11.setDetails(3260, 6, 1, 8, 1, (SceneItem *)NULL); _actor11.animate(ANIM_MODE_2, NULL); _actor12.postInit(); @@ -1490,7 +1490,7 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _actor12.setPosition(Common::Point(274, 65)); _actor12.setAction(&_action12, &_actor12); _actor12._numFrames = 5; - _actor12.setDetails(3260, 9, 1, 11, 1, NULL); + _actor12.setDetails(3260, 9, 1, 11, 1, (SceneItem *)NULL); _actor12.animate(ANIM_MODE_2, NULL); _item1.setDetails(Rect(0, 0, 320, 200), 3260, 0, 1, 2, 1, NULL); @@ -1588,7 +1588,7 @@ void Scene3275::postInit(SceneObjectList *OwnerList) { _actor2.postInit(); _actor2.setup(3275, 2, 1); _actor2.setPosition(Common::Point(56, 118)); - _actor2.setDetails(3275, 3, 4, -1, 1, NULL); + _actor2.setDetails(3275, 3, 4, -1, 1, (SceneItem *)NULL); _item2.setDetails(Rect(153, 58, 200, 120), 3275, 6, 7, 8, 1, NULL); _item3.setDetails(Rect(275, 58, 331, 120), 3275, 6, 7, 8, 1, NULL); -- cgit v1.2.3 From f9bdde939bc0cae15f821f78f95100b566e69c6a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 21:11:49 +1100 Subject: TSAGE: Added missing NULL prefix to one of the R2R setDetails calls --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 8252584b1c..0ef3a68549 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -423,7 +423,7 @@ void Scene125::Icon::postInit(SceneObjectList *OwnerList) { _sceneText2._color1 = 0; _sceneText2._color2 = 0; _sceneText2._width = 200; - setDetails(125, -1, -1, -1, 2, NULL); + setDetails(125, -1, -1, -1, 2, (SceneItem *)NULL); } void Scene125::Icon::synchronize(Serializer &s) { -- cgit v1.2.3 From 4f5a708d7dc8d4040e866430df7ab019379f3e03 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 28 Dec 2011 01:17:34 +0100 Subject: TSAGE: R2R - Implement scene 3700 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 73 ++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 17 ++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 217 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 26 +++ 5 files changed, 336 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index dfa135be6c..1b6c375b80 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -224,7 +224,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { return new Scene3400(); case 3500: case 3600: + error("Missing scene %d from group 3", sceneNumber); case 3700: + // Cutscene - Teleport outside + return new Scene3700(); case 3800: case 3900: error("Missing scene %d from group 3", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 85e1f7760b..4c749a9166 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1945,5 +1945,78 @@ void Scene3400::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3700 - Cutscene - Teleport outside + * + *--------------------------------------------------------------------------*/ +void Scene3700::postInit(SceneObjectList *OwnerList) { + loadScene(3700); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + + _actor1.postInit(); + _actor1._moveDiff = Common::Point(3, 2); + + _actor2.postInit(); + _actor2._numFrames = 7; + _actor2._moveDiff = Common::Point(5, 3); + _actor2.hide(); + + _actor3.postInit(); + _actor3._moveDiff = Common::Point(3, 2); + _actor3.hide(); + + _actor4.postInit(); + _actor4._numFrames = 7; + _actor4._moveDiff = Common::Point(5, 3); + _actor4.hide(); + + _actor5.postInit(); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._sound1.play(332); + + _sceneMode = 3700; + setAction(&_sequenceManager, this, 3700, &_actor1, &_actor2, &_actor3, &_actor4, &_actor5, NULL); +} + +void Scene3700::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3700::signal() { + switch (_sceneMode) { + case 3328: + // No break on purpose + case 3329: + warning("STUB: sub_1D227()"); + setAction(&_sequenceManager, this, 3701, &_actor2, &_actor3, &_actor4, NULL); + break; + case 3700: + _actor1.setup(10, 6, 1); + _actor2.setup(20, 5, 1); + if (R2_GLOBALS.getFlag(71)) { + _sceneMode = 3329; + _stripManager.start(3329, this); + } else { + _sceneMode = 3328; + _stripManager.start(3328, this); + } + case 3701: + R2_GLOBALS._sceneManager.changeScene(1000); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 8968bddf1a..f83417e772 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -424,6 +424,23 @@ public: virtual void signal(); virtual void synchronize(Serializer &s); }; + +class Scene3700 : public SceneExt { +public: + SpeakerQuinn3700 _quinnSpeaker; + SpeakerSeeker3700 _seekerSpeaker; + SpeakerMiranda3700 _mirandaSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index edcf340e04..25ad156cd3 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1915,5 +1915,222 @@ void SpeakerTeal3400::proc15() { } } +SpeakerQuinn3700::SpeakerQuinn3700() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn3700::setText(const Common::String &msg) { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + switch (_fieldF6) { + case 2: + scene->_actor3.setup(30, 1, 1); + R2_GLOBALS._sound2.play(44); + break; + case 3: + scene->_actor3.setup(30, 1, 1); + break; + default: + scene->_actor3.setup(30, 7, 1); + break; + } + VisualSpeaker::setText(msg); +} + +void SpeakerQuinn3700::proc15() { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + _object1.setPosition(_object2->_position); + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + R2_GLOBALS._sound2.stop(); + scene->_actor1.setup(10, 4, 1); + scene->_actor3.setup(30, 7, 1); + _object1.setup(3701, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor2.setup(20, 1, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(3701, 2, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor1.setup(10, 2, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(4011, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerSeeker3700::SpeakerSeeker3700() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker3700::setText(const Common::String &msg) { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + if (_fieldF6 == 1) { + R2_GLOBALS._sound2.play(44); + scene->_actor3.setup(30, 8, 1); + } else { + scene->_actor3.setup(30, 2, 1); + } + VisualSpeaker::setText(msg); +} + +void SpeakerSeeker3700::proc15() { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + _object1.setPosition(_object2->_position); + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + R2_GLOBALS._sound2.stop(); + scene->_actor1.setup(10, 8, 1); + scene->_actor2.setup(20, 7, 1); + scene->_actor3.setup(30, 8, 1); + _object1.setup(3701, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor1.setup(10, 2, 1); + scene->_actor2.setup(20, 1, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(4031, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerMiranda3700::SpeakerMiranda3700() { + _speakerName = "MIRANDA"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerMiranda3700::proc15() { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + _object1.setPosition(_object2->_position); + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor1.setup(10, 6, 1); + scene->_actor2.setup(20, 5, 1); + _object2->setup(30, 1, 1); + scene->_actor4.setup(40, 1, 1); + _object1.setup(4050, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor3.setup(30, 8, 1); + _object1.setup(4052, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor2.setup(20, 1, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(4051, 7, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index f85b412f9c..e4ea036938 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -428,6 +428,32 @@ public: virtual Common::String getClassName() { return "SpeakerTeal3400"; } virtual void proc15(); }; + +class SpeakerQuinn3700 : public VisualSpeaker { +public: + SpeakerQuinn3700(); + + virtual Common::String getClassName() { return "SpeakerQuinn3700"; } + virtual void setText(const Common::String &msg); + virtual void proc15(); +}; + +class SpeakerSeeker3700 : public VisualSpeaker { +public: + SpeakerSeeker3700(); + + virtual Common::String getClassName() { return "SpeakerSeeker3700"; } + virtual void setText(const Common::String &msg); + virtual void proc15(); +}; + +class SpeakerMiranda3700 : public VisualSpeaker { +public: + SpeakerMiranda3700(); + + virtual Common::String getClassName() { return "SpeakerMiranda3700"; } + virtual void proc15(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 826769f8b8937f6d78c213d477a2a1b84be48b6a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 28 Dec 2011 07:52:12 +0100 Subject: TSAGE: R2R - Fix a bug in scene 3700 --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 4c749a9166..a42bbcb08c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2009,6 +2009,7 @@ void Scene3700::signal() { _sceneMode = 3328; _stripManager.start(3328, this); } + break; case 3701: R2_GLOBALS._sceneManager.changeScene(1000); break; -- cgit v1.2.3 From 3539c5e981b2a07eba18c5c58a9a9b8215b0c4c3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 28 Dec 2011 19:36:15 +0100 Subject: TSAGE: R2R - Partial implementation of scene 3375. --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 410 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 55 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 243 ++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 32 ++ 5 files changed, 741 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 1b6c375b80..0e387083a5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -217,6 +217,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Ship landing return new Scene3350(); case 3375: + return new Scene3375(); case 3385: case 3395: error("Missing scene %d from group 3", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index a42bbcb08c..8c08299e6f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1698,6 +1698,416 @@ void Scene3350::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3375 - + * + *--------------------------------------------------------------------------*/ +Scene3375::Scene3375() { + _field1488 = _field1492 = 0; + for (int i = 0; i < 4; ++i) + _field148A[i] = 0; +} + +void Scene3375::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field1488); + s.syncAsSint16LE(_field1492); + for (int i = 0; i < 4; ++i) + s.syncAsSint16LE(_field148A[i]); +} + +bool Scene3375::Actor1::startAction(CursorType action, Event &event) { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + if (R2_GLOBALS._player._characterIndex == 2) + scene->_stripManager.start(3302, scene); + else + scene->_stripManager.start(3304, scene); + + return true; +} + +bool Scene3375::Actor2::startAction(CursorType action, Event &event) { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + if (R2_GLOBALS._player._characterIndex == 3) + scene->_stripManager.start(3302, scene); + else + scene->_stripManager.start(3301, scene); + + return true; +} + +bool Scene3375::Actor3::startAction(CursorType action, Event &event) { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + scene->_stripManager.start(3303, scene); + + return true; +} + +bool Scene3375::Actor4::startAction(CursorType action, Event &event) { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._v56A9E != 0) { + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(3); + } else { + R2_GLOBALS._walkRegions.disableRegion(1); + R2_GLOBALS._walkRegions.disableRegion(3); + R2_GLOBALS._walkRegions.disableRegion(4); + } + R2_GLOBALS._walkRegions.disableRegion(6); + R2_GLOBALS._walkRegions.disableRegion(7); + R2_GLOBALS._walkRegions.disableRegion(8); + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + + scene->_sceneMode = 3375; + scene->setAction(&scene->_sequenceManager, scene, 3375, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL); + + return true; +} + +void Scene3375::Exit1::changeScene() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 3376; + if (R2_GLOBALS._v56A9E != 0) { + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(3); + } else { + R2_GLOBALS._walkRegions.disableRegion(1); + R2_GLOBALS._walkRegions.disableRegion(3); + R2_GLOBALS._walkRegions.disableRegion(4); + } + if (scene->_actor1._position.y != 163) { + R2_GLOBALS._player.setStrip(-1); + scene->_actor1.setStrip2(-1); + scene->_actor2.setStrip2(-1); + scene->_actor3.setStrip2(-1); + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL); + } else { + R2_GLOBALS._player.setStrip2(2); + scene->_actor1.setStrip2(2); + scene->_actor2.setStrip2(2); + scene->_actor3.setStrip2(2); + R2_GLOBALS._sound2.play(314); + + Common::Point pt(50, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } +} + +void Scene3375::Exit2::changeScene() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._shade = 4; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + + scene->_sceneMode = 3377; + scene->_field1488 = 3381; + + if (R2_GLOBALS._v56A9E != 0) { + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(3); + } else { + R2_GLOBALS._walkRegions.disableRegion(1); + R2_GLOBALS._walkRegions.disableRegion(3); + R2_GLOBALS._walkRegions.disableRegion(4); + } + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL); +} + +void Scene3375::Exit3::changeScene() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._shade = 4; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + + scene->_sceneMode = 3378; + scene->_field1488 = 3380; + + if (R2_GLOBALS._v56A9E != 0) { + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(3); + } else { + R2_GLOBALS._walkRegions.disableRegion(1); + R2_GLOBALS._walkRegions.disableRegion(3); + R2_GLOBALS._walkRegions.disableRegion(4); + } + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL); +} + +void Scene3375::postInit(SceneObjectList *OwnerList) { + _field148A[0] = 3376; + _field148A[1] = 3377; + _field148A[2] = 3375; + _field148A[3] = 3378; + + loadScene(_field148A[R2_GLOBALS._v56A9E]); + SceneExt::postInit(); + + R2_GLOBALS._sound1.play(313); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + + R2_GLOBALS._player._characterScene[1] = 3375; + R2_GLOBALS._player._characterScene[2] = 3375; + R2_GLOBALS._player._characterScene[3] = 3375; + + setZoomPercents(55, 126, 167, 200); + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + } else { + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + } + R2_GLOBALS._player.changeZoom(-1); + + switch (R2_GLOBALS._player._characterIndex) { + case 2: + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setup(20, 1, 1); + else + R2_GLOBALS._player.setup(20, 3, 1); + break; + case 3: + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setup(30, 1, 1); + else + R2_GLOBALS._player.setup(30, 3, 1); + break; + default: + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setup(10, 1, 1); + else + R2_GLOBALS._player.setup(10, 3, 1); + break; + } + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 2) { + _actor1._moveRate = 10; + _actor1._moveDiff = Common::Point(3, 2); + } else { + _actor1._moveRate = 7; + _actor1._moveDiff = Common::Point(5, 3); + } + _actor1.changeZoom(-1); + _actor1._effect = 1; + + int tmpStrip, tmpVisage; + if (R2_GLOBALS._sceneManager._previousScene == 3385) + tmpStrip = 1; + else + tmpStrip = 4; + + if (R2_GLOBALS._player._characterIndex == 2) + tmpVisage = 10; + else + tmpVisage = 20; + + _actor1.setup(tmpVisage, tmpStrip, 1); + _actor1.animate(ANIM_MODE_1, NULL); + + _actor2.postInit(); + _actor2._moveDiff = Common::Point(3, 2); + _actor2.changeZoom(-1); + _actor2._effect = 1; + if (R2_GLOBALS._sceneManager._previousScene == 3385) + tmpStrip = 1; + else + tmpStrip = 8; + + if (R2_GLOBALS._player._characterIndex == 3) + tmpVisage = 10; + else + tmpVisage = 30; + + _actor2.setup(tmpVisage, tmpStrip, 1); + _actor2.animate(ANIM_MODE_1, NULL); + + _actor3.postInit(); + _actor3._moveRate = 7; + _actor3._moveDiff = Common::Point(5, 3); + _actor3.changeZoom(-1); + _actor3._effect = 1; + if (R2_GLOBALS._sceneManager._previousScene == 3385) + tmpStrip = 1; + else + tmpStrip = 4; + + _actor3.setup(40, tmpStrip, 1); + _actor3.animate(ANIM_MODE_1, NULL); + + _actor2.setDetails(3375, -1, -1, -1, 1, NULL); + _actor3.setDetails(3375, 21, -1, -1, 1, NULL); + _actor1.setDetails(3375, -1, -1, -1, 1, NULL); + + _actor4.postInit(); + _actor4.setup(3375, 1, 1); + _actor4.setPosition(Common::Point(254, 166)); + _actor4.fixPriority(140); + _actor4.hide(); + + _exit1.setDetails(Rect(0, 84, 24, 167), EXITCURSOR_W, 3375); + _exit1.setDest(Common::Point(65, 155)); + _exit2.setDetails(Rect(103, 152, 183, 170), SHADECURSOR_DOWN, 3375); + _exit2.setDest(Common::Point(158, 151)); + _exit3.setDetails(Rect(180, 75, 213, 132), EXITCURSOR_E, 3375); + _exit3.setDest(Common::Point(201, 131)); + + for (int i = 0; i <= 12; ++i) + _itemArray[i].setDetails(i, 3375, 3, -1, -1); + + _item1.setDetails(Rect(0, 0, 320, 200), 3375, 0, -1, 1, 1, NULL); + + if (R2_GLOBALS._sceneManager._previousScene == 3385) + _sceneMode = 3379; + else + _sceneMode = 0; + + warning("sub_FC696(_sceneMode)"); +} + +void Scene3375::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3375::signalCase3379() { + switch (R2_GLOBALS._v56A9E) { + case 0: + _exit1._enabled = true; + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._walkRegions.enableRegion(1); + else { + R2_GLOBALS._walkRegions.enableRegion(3); + R2_GLOBALS._walkRegions.enableRegion(4); + } + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(7); + case 2: + _exit1._enabled = false; + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(3); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._walkRegions.enableRegion(8); + R2_GLOBALS._walkRegions.enableRegion(9); + default: + _exit1._enabled = false; + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(3); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + break; + } + R2_GLOBALS._sceneManager._previousScene = 3375; + R2_GLOBALS._player._effect = 1; + _actor1._effect = 1; + _actor2._effect = 1; + _actor3._effect = 1; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); +} + +void Scene3375::signal() { + switch (_sceneMode) { + case 3375: + R2_GLOBALS._sceneManager.changeScene(3400); + break; + case 3376: + R2_GLOBALS._sceneManager.changeScene(3385); + break; + case 3377: + // No break on purpose + case 3378: + _sceneMode = _field1488; + _field1488 = 0; + _actor1._effect = 6; + _actor1._shade = 4; + _actor2._effect = 6; + _actor2._shade = 4; + _actor3._effect = 6; + _actor3._shade = 4; + warning("sub_FC696(_sceneMode)"); + break; + case 3379: + signalCase3379(); + break; + case 9999: + if (_actor1._position.y == 163) + R2_GLOBALS._player.setStrip(1); + else + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(CURSOR_TALK); + default: + _actor1.setPriority(130); + _actor2.setPriority(132); + _actor3.setPriority(134); + signalCase3379(); + break; + } +} + +void Scene3375::dispatch() { + if ((R2_GLOBALS._player._position.y >= 168) && (R2_GLOBALS._player._effect == 1)) + R2_GLOBALS._player._effect = 6; + else if ((R2_GLOBALS._player._position.y < 168) && (R2_GLOBALS._player._effect == 6)) + R2_GLOBALS._player._effect = 1; + + if ((_actor1._position.y >= 168) && (_actor1._effect == 1)) + _actor1._effect = 6; + else if ((_actor1._position.y < 168) && (_actor1._effect == 6)) + _actor1._effect = 1; + + if ((_actor2._position.y >= 168) && (_actor2._effect == 1)) + _actor2._effect = 6; + else if ((_actor2._position.y < 168) && (_actor2._effect == 6)) + _actor2._effect = 1; + + if ((_actor3._position.y >= 168) && (_actor3._effect == 1)) + _actor3._effect = 6; + else if ((_actor3._position.y < 168) && (_actor3._effect == 6)) + _actor3._effect = 1; + + Scene::dispatch(); +} + /*-------------------------------------------------------------------------- * Scene 3400 - * diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index f83417e772..3935a65084 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -400,6 +400,61 @@ public: virtual void signal(); }; +class Scene3375 : public SceneExt { + class Actor1 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit3 : public SceneExit { + public: + virtual void changeScene(); + }; + + void signalCase3379(); +public: + SpeakerQuinn3375 _quinnSpeaker; + SpeakerSeeker3375 _seekerSpeaker; + SpeakerMiranda3375 _mirandaSpeaker; + SpeakerWebbster3375 _webbsterSpeaker; + NamedHotspot _item1; + NamedHotspot _itemArray[13]; + Actor1 _actor1; + Actor2 _actor2; + Actor3 _actor3; + Actor4 _actor4; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + SequenceManager _sequenceManager; + int _field1488; + int _field148A[4]; + int _field1492; + + Scene3375(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void Scene3375::dispatch(); + virtual void Scene3375::synchronize(Serializer &s); +}; + class Scene3400 : public SceneExt { public: SpeakerQuinn3400 _quinnSpeaker; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 25ad156cd3..a07b689645 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1602,6 +1602,249 @@ void SpeakerMiranda3255::proc15() { } } +SpeakerQuinn3375::SpeakerQuinn3375() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerQuinn3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) + _object2 = &R2_GLOBALS._player; + else if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &scene->_actor1; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4010, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerSeeker3375::SpeakerSeeker3375() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor1; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerMiranda3375::SpeakerMiranda3375() { + _speakerName = "MIRANDA"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerMiranda3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); + + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4051, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + +SpeakerWebbster3375::SpeakerWebbster3375() { + _speakerName = "WEBBSTER"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerWebbster3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} + SpeakerQuinn3400::SpeakerQuinn3400() { _speakerName = "QUINN"; _color1 = 60; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index e4ea036938..2f289175e8 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -389,6 +389,38 @@ public: virtual void proc15(); }; +class SpeakerQuinn3375 : public VisualSpeaker { +public: + SpeakerQuinn3375(); + + virtual Common::String getClassName() { return "SpeakerQuinn3375"; } + virtual void proc15(); +}; + +class SpeakerSeeker3375 : public VisualSpeaker { +public: + SpeakerSeeker3375(); + + virtual Common::String getClassName() { return "SpeakerSeeker3375"; } + virtual void proc15(); +}; + +class SpeakerMiranda3375 : public VisualSpeaker { +public: + SpeakerMiranda3375(); + + virtual Common::String getClassName() { return "SpeakerMiranda3375"; } + virtual void proc15(); +}; + +class SpeakerWebbster3375 : public VisualSpeaker { +public: + SpeakerWebbster3375(); + + virtual Common::String getClassName() { return "SpeakerWebbster3375"; } + virtual void proc15(); +}; + class SpeakerQuinn3400 : public VisualSpeaker { public: SpeakerQuinn3400(); -- cgit v1.2.3 From 529a3b8d8269ad5d3dbd04f7fe581844724a20dc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 00:19:56 +0100 Subject: TSAGE: R2R -Fix errors not detected by MSVC --- engines/tsage/ringworld2/ringworld2_scenes3.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 3935a65084..36e4ae83fc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -451,8 +451,8 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); virtual void signal(); - virtual void Scene3375::dispatch(); - virtual void Scene3375::synchronize(Serializer &s); + virtual void dispatch(); + virtual void synchronize(Serializer &s); }; class Scene3400 : public SceneExt { -- cgit v1.2.3 From ce0c4d31e071663abfe31440780c8ed353906782 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 00:29:31 +0100 Subject: TSAGE: R2R - Fix bug in scene 3700 --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 8c08299e6f..7261d6438f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2407,6 +2407,7 @@ void Scene3700::signal() { // No break on purpose case 3329: warning("STUB: sub_1D227()"); + _sceneMode = 3701; setAction(&_sequenceManager, this, 3701, &_actor2, &_actor3, &_actor4, NULL); break; case 3700: -- cgit v1.2.3 From be9cc1dbe3fc986123b328ed5ce2ef2c4001df09 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 01:15:15 +0100 Subject: TSAGE: R2R - Add missing function in scene 3375 --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 81 ++++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes3.h | 2 + 2 files changed, 81 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 7261d6438f..7aa27e9330 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1717,6 +1717,83 @@ void Scene3375::synchronize(Serializer &s) { s.syncAsSint16LE(_field148A[i]); } +void Scene3375::subFC696(int sceneMode) { + switch (sceneMode) { + case 3379: + R2_GLOBALS._player.setPosition(Common::Point(0, 155)); + _actor1.setPosition(Common::Point(-20, 163)); + _actor2.setPosition(Common::Point(-5, 150)); + _actor3.setPosition(Common::Point(-20, 152)); + break; + case 3380: + ++R2_GLOBALS._v56A9E; + if (R2_GLOBALS._v56A9E >= 4) + R2_GLOBALS._v56A9E = 0; + + loadScene(_field148A[R2_GLOBALS._v56A9E]); + + R2_GLOBALS._uiElements.show(); + R2_GLOBALS._player.setStrip(4); + R2_GLOBALS._player.setPosition(Common::Point(148, 230)); + + _actor1.setPosition(Common::Point(191, 274)); + _actor1._effect = 1; + _actor2.setPosition(Common::Point(124, 255)); + _actor2._effect = 1; + _actor3.setPosition(Common::Point(155, 245)); + _actor3._effect = 1; + break; + case 3381: + --R2_GLOBALS._v56A9E; + if (R2_GLOBALS._v56A9E < 0) + R2_GLOBALS._v56A9E = 3; + + loadScene(_field148A[R2_GLOBALS._v56A9E]); + + R2_GLOBALS._uiElements.show(); + R2_GLOBALS._player.setStrip(6); + R2_GLOBALS._player.setPosition(Common::Point(201, 131)); + + _actor1.setPosition(Common::Point(231, 127)); + _actor1._effect = 1; + _actor2.setPosition(Common::Point(231, 127)); + _actor2._effect = 1; + _actor3.setPosition(Common::Point(231, 127)); + _actor3._effect = 1; + break; + default: + R2_GLOBALS._player.setPosition(Common::Point(192, 155)); + + _actor1.setPosition(Common::Point(138, 134)); + _actor2.setPosition(Common::Point(110, 139)); + _actor3.setPosition(Common::Point(125, 142)); + break; + } + + if (R2_GLOBALS._v56A9E == 2) { + R2_GLOBALS._sceneItems.remove(&_actor4); + for (int i = 0; i <= 12; i++) + R2_GLOBALS._sceneItems.remove(&_itemArray[i]); + R2_GLOBALS._sceneItems.remove(&_item1); + + _actor4.show(); + _actor4.setDetails(3375, 9, 10, -1, 1, NULL); + + for (int i = 0; i <= 12; i++) + _itemArray[i].setDetails(3375, 3, -1, -1); + + _item1.setDetails(Rect(0, 0, 320, 200), 3375, 0, -1, -1, 1, NULL); + } else { + _actor4.hide(); + R2_GLOBALS._sceneItems.remove(&_actor4); + } + + if (_sceneMode == 0) + signal(); + else + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); +} + bool Scene3375::Actor1::startAction(CursorType action, Event &event) { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; @@ -2000,7 +2077,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { else _sceneMode = 0; - warning("sub_FC696(_sceneMode)"); + subFC696(_sceneMode); } void Scene3375::remove() { @@ -2064,7 +2141,7 @@ void Scene3375::signal() { _actor2._shade = 4; _actor3._effect = 6; _actor3._shade = 4; - warning("sub_FC696(_sceneMode)"); + subFC696(_sceneMode); break; case 3379: signalCase3379(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 36e4ae83fc..d5e2e451f4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -428,6 +428,8 @@ class Scene3375 : public SceneExt { }; void signalCase3379(); + void subFC696(int sceneMode); + public: SpeakerQuinn3375 _quinnSpeaker; SpeakerSeeker3375 _seekerSpeaker; -- cgit v1.2.3 From 496b776de8af82242850c5060a50a169bac20496 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 01:21:34 +0100 Subject: TSAGE: R2R - Fixed ambiguity with NULL parameters in R2R setDetails calls --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 7aa27e9330..c10a9f63b9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2050,9 +2050,9 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _actor3.setup(40, tmpStrip, 1); _actor3.animate(ANIM_MODE_1, NULL); - _actor2.setDetails(3375, -1, -1, -1, 1, NULL); - _actor3.setDetails(3375, 21, -1, -1, 1, NULL); - _actor1.setDetails(3375, -1, -1, -1, 1, NULL); + _actor2.setDetails(3375, -1, -1, -1, 1, (SceneItem *)NULL); + _actor3.setDetails(3375, 21, -1, -1, 1, (SceneItem *)NULL); + _actor1.setDetails(3375, -1, -1, -1, 1, (SceneItem *)NULL); _actor4.postInit(); _actor4.setup(3375, 1, 1); -- cgit v1.2.3 From cb889a94892cf96528f11d90b24b2ab95421a59b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 01:28:18 +0100 Subject: TSAGE: R2R - Fixed one more ambiguity with NULL parameters in R2R setDetails call --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index c10a9f63b9..29356ef024 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1777,7 +1777,7 @@ void Scene3375::subFC696(int sceneMode) { R2_GLOBALS._sceneItems.remove(&_item1); _actor4.show(); - _actor4.setDetails(3375, 9, 10, -1, 1, NULL); + _actor4.setDetails(3375, 9, 10, -1, 1, (SceneItem *)NULL); for (int i = 0; i <= 12; i++) _itemArray[i].setDetails(3375, 3, -1, -1); -- cgit v1.2.3 From 79bdefccc4f493dc16d6cdf3c986452c84d3a33e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 16:39:09 +0100 Subject: TSAGE: R2R - Fix bugs in scene 3375 --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 2 +- engines/tsage/ringworld2/ringworld2_speakers.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 29356ef024..670143a70b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -1961,7 +1961,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterScene[2] = 3375; R2_GLOBALS._player._characterScene[3] = 3375; - setZoomPercents(55, 126, 167, 200); + setZoomPercents(126, 55, 200, 167); R2_GLOBALS._player.postInit(); if (R2_GLOBALS._player._characterIndex == 2) { diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index a07b689645..4deeb91c06 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1657,7 +1657,7 @@ void SpeakerQuinn3375::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4010, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -1718,7 +1718,7 @@ void SpeakerSeeker3375::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4031, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -1780,7 +1780,7 @@ void SpeakerMiranda3375::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4051, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -1837,7 +1837,7 @@ void SpeakerWebbster3375::proc15() { case 1: ((SceneItem *)_action)->_sceneRegionId = 0; _object1.setup(4110, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); -- cgit v1.2.3 From 44a8e4ac1d963ec31e233884fce83ffdb007898c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 29 Dec 2011 16:54:37 +0100 Subject: TSAGE: R2R - Implement Scene 3385 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 230 +++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 47 +++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 244 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 32 +++ 5 files changed, 554 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0e387083a5..4952cf1831 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -219,6 +219,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3375: return new Scene3375(); case 3385: + return new Scene3385(); case 3395: error("Missing scene %d from group 3", sceneNumber); case 3400: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 670143a70b..db1b9b6c21 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2185,6 +2185,236 @@ void Scene3375::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 3385 - + * + *--------------------------------------------------------------------------*/ +Scene3385::Scene3385() { + _field11B2 = 0; +} + +void Scene3385::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field11B2); +} + +bool Scene3385::Actor1::startAction(CursorType action, Event &event) { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + if (R2_GLOBALS._player._characterIndex == 2) + scene->_stripManager.start(3302, scene); + else + scene->_stripManager.start(3304, scene); + + return true; +} + +bool Scene3385::Actor2::startAction(CursorType action, Event &event) { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + if (R2_GLOBALS._player._characterIndex == 3) + scene->_stripManager.start(3302, scene); + else + scene->_stripManager.start(3301, scene); + + return true; +} + +bool Scene3385::Actor3::startAction(CursorType action, Event &event) { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + scene->_stripManager.start(3303, scene); + + return true; +} + +bool Scene3385::Actor4::startAction(CursorType action, Event &event) { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._sound2.play(314); + + scene->_sceneMode = 3386; + scene->setAction(&scene->_sequenceManager, scene, 3386, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL); + + return true; +} + +void Scene3385::Exit1::changeScene() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 3387; + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL); + else + scene->signal(); +} + +void Scene3385::Action1::signal() { + ++_actionIndex; + + if (_actionIndex == 0) + setDelay(1); + else if (_actionIndex == 1) + R2_GLOBALS._sound2.play(314); +} + +void Scene3385::postInit(SceneObjectList *OwnerList) { + loadScene(3385); + SceneExt::postInit(); + + R2_GLOBALS._sound1.play(313); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + + R2_GLOBALS._player._characterScene[1] = 3385; + R2_GLOBALS._player._characterScene[2] = 3385; + R2_GLOBALS._player._characterScene[3] = 3385; + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + _field11B2 = 3; + else + _field11B2 = 4; + + setZoomPercents(102, 40, 200, 160); + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + else + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + + R2_GLOBALS._player.changeZoom(-1); + + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player.setup(20, _field11B2, 1); + else if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._player.setup(30, _field11B2, 1); + else + R2_GLOBALS._player.setup(10, _field11B2, 1); + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 2) { + _actor1._moveRate = 10; + _actor1._moveDiff = Common::Point(3, 2); + } else { + _actor1._moveRate = 7; + _actor1._moveDiff = Common::Point(5, 3); + } + _actor1.changeZoom(-1); + _actor1._effect = 1; + if (R2_GLOBALS._player._characterIndex == 2) + _actor1.setup(10, _field11B2, 1); + else + _actor1.setup(20, _field11B2, 1); + _actor1.animate(ANIM_MODE_1, NULL); + _actor1.setDetails(3385, -1, -1, -1, 1, (SceneItem *) NULL); + + _actor2.postInit(); + _actor2._moveDiff = Common::Point(3, 2); + _actor2.changeZoom(-1); + _actor2._effect = 1; + if (R2_GLOBALS._player._characterIndex == 2) + _actor2.setup(10, _field11B2, 1); + else + _actor2.setup(30, _field11B2, 1); + _actor2.animate(ANIM_MODE_1, NULL); + _actor2.setDetails(3385, -1, -1, -1, 1, (SceneItem *) NULL); + + _actor3.postInit(); + _actor3._moveDiff = Common::Point(3, 2); + _actor3.changeZoom(-1); + _actor3._effect = 1; + _actor3.setup(40, _field11B2, 1); + _actor3.animate(ANIM_MODE_1, NULL); + _actor3.setDetails(3385, 15, -1, -1, 1, (SceneItem *) NULL); + + _exit1.setDetails(Rect(103, 152, 217, 170), SHADECURSOR_DOWN, 3395); + _exit1.setDest(Common::Point(158, 151)); + + _actor4.postInit(); + _actor4.setPosition(Common::Point(160, 100)); + _actor4.fixPriority(90); + _actor4.setDetails(3385, 3, 4, -1, 1, (SceneItem *) NULL); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) { + R2_GLOBALS._player.setPosition(Common::Point(158, 102)); + _actor1.setPosition(Common::Point(164, 100)); + _actor1.fixPriority(98); + _actor2.setPosition(Common::Point(150, 100)); + _actor2.fixPriority(97); + _actor3.setPosition(Common::Point(158, 100)); + _actor3.fixPriority(96); + _sceneMode = 3384; + _actor4.setup(3385, 1, 6); + _actor4.animate(ANIM_MODE_6, this); + setAction(&_action1, &_actor4); + } else { + R2_GLOBALS._player.setPosition(Common::Point(158, 230)); + _actor1.setPosition(Common::Point(191, 270)); + _actor2.setPosition(Common::Point(124, 255)); + _actor3.setPosition(Common::Point(155, 245)); + _actor4.setup(3385, 1, 1); + _sceneMode = 3385; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); + } + + _item1.setDetails(Rect(0, 0, 320, 200), 3385, 0, -1, -1, 1, NULL); + R2_GLOBALS._v56A9E = 0; +} + +void Scene3385::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3385::signal() { + switch (_sceneMode) { + case 3386: + R2_GLOBALS._sceneManager.changeScene(3375); + break; + case 3387: + R2_GLOBALS._sceneManager.changeScene(3395); + break; + case 9999: + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(3); + else + R2_GLOBALS._player.setStrip(4); + break; + default: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } +} + /*-------------------------------------------------------------------------- * Scene 3400 - * diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index d5e2e451f4..558acf62e9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -457,6 +457,53 @@ public: virtual void synchronize(Serializer &s); }; +class Scene3385 : public SceneExt { + class Actor1 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Action1: public Action { + public: + virtual void signal(); + }; + +public: + SpeakerQuinn3385 _quinnSpeaker; + SpeakerSeeker3385 _seekerSpeaker; + SpeakerMiranda3385 _mirandaSpeaker; + SpeakerWebbster3385 _webbsterSpeaker; + NamedHotspot _item1; + Actor1 _actor1; + Actor2 _actor2; + Actor3 _actor3; + Actor4 _actor4; + Exit1 _exit1; + Action1 _action1; + SequenceManager _sequenceManager; + + int _field11B2; + + Scene3385(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void synchronize(Serializer &s); +}; + class Scene3400 : public SceneExt { public: SpeakerQuinn3400 _quinnSpeaker; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 4deeb91c06..b8773192b0 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1845,6 +1845,250 @@ void SpeakerWebbster3375::proc15() { } } +SpeakerQuinn3385::SpeakerQuinn3385() { + _speakerName = "QUINN"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +void SpeakerQuinn3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) + _object2 = &R2_GLOBALS._player; + else if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &scene->_actor1; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + if (R2_GLOBALS._player._characterIndex == 2) + _object1.setup(4010, 3, 1); + else + _object1.setup(4010, 5, 1); + + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + +SpeakerSeeker3385::SpeakerSeeker3385() { + _speakerName = "SEEKER"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerSeeker3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor1; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 3, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + +SpeakerMiranda3385::SpeakerMiranda3385() { + _speakerName = "MIRANDA"; + _color1 = 154; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerMiranda3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4051, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + +SpeakerWebbster3385::SpeakerWebbster3385() { + _speakerName = "WEBBSTER"; + _color1 = 60; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerWebbster3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + SpeakerQuinn3400::SpeakerQuinn3400() { _speakerName = "QUINN"; _color1 = 60; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 2f289175e8..c3de6a68a8 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -421,6 +421,38 @@ public: virtual void proc15(); }; +class SpeakerQuinn3385 : public VisualSpeaker { +public: + SpeakerQuinn3385(); + + virtual Common::String getClassName() { return "SpeakerQuinn3385"; } + virtual void proc15(); +}; + +class SpeakerSeeker3385 : public VisualSpeaker { +public: + SpeakerSeeker3385(); + + virtual Common::String getClassName() { return "SpeakerSeeker3385"; } + virtual void proc15(); +}; + +class SpeakerMiranda3385 : public VisualSpeaker { +public: + SpeakerMiranda3385(); + + virtual Common::String getClassName() { return "SpeakerMiranda3385"; } + virtual void proc15(); +}; + +class SpeakerWebbster3385 : public VisualSpeaker { +public: + SpeakerWebbster3385(); + + virtual Common::String getClassName() { return "SpeakerWebbster3385"; } + virtual void proc15(); +}; + class SpeakerQuinn3400 : public VisualSpeaker { public: SpeakerQuinn3400(); -- cgit v1.2.3 From 211eb00e8725e36b8c802a9b7b9b9812e9c3053e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 30 Dec 2011 12:08:41 +0100 Subject: TSAGE: R2R - Cleanup: reorganise speakers, add ancestor classes where speaker declaration is common to several speakers. --- engines/tsage/ringworld2/ringworld2_scenes2.h | 11 +- engines/tsage/ringworld2/ringworld2_scenes3.h | 4 +- engines/tsage/ringworld2/ringworld2_speakers.cpp | 2306 +++++++++------------- engines/tsage/ringworld2/ringworld2_speakers.h | 425 ++-- 4 files changed, 1157 insertions(+), 1589 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index d007f7e9f5..281d1da366 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -106,8 +106,8 @@ class Scene2350 : public SceneExt { }; public: - SpeakerQuinn2350 _quinnSpeaker; - SpeakerPharisha2350 _pharishaSpeaker; + SpeakerQuinn _quinnSpeaker; + SpeakerPharisha _pharishaSpeaker; NamedHotspot _item1; SceneActor _actor1; Actor2 _actor2; @@ -368,9 +368,9 @@ class Scene2500 : public SceneExt { virtual void changeScene(); }; public: - SpeakerQuinn2500 _quinnSpeaker; - SpeakerSeeker2500 _seekerSpeaker; - SpeakerMiranda2500 _mirandaSpeaker; + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + SpeakerMiranda _mirandaSpeaker; SpeakerWebbster2500 _webbsterSpeaker; NamedHotspot _item1; SceneActor _actor1; @@ -665,6 +665,7 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 558acf62e9..812ab800cc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -47,7 +47,7 @@ class Scene3100 : public SceneExt { public: int _field412; - SpeakerGuard3100 _guardSpeaker; + SpeakerGuard _guardSpeaker; NamedHotspot _item1; NamedHotspot _item2; SceneActor _actor1; @@ -241,7 +241,7 @@ class Scene3240 : public SceneExt { public: SpeakerTeal3240 _tealSpeaker; SpeakerWebbster3240 _webbsterSpeaker; - SpeakerMiranda2500 _mirandaSpeaker; + SpeakerMiranda _mirandaSpeaker; SceneActor _actor1; SceneActor _actor2; SequenceManager _sequenceManager; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index b8773192b0..7f5cdc1328 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -191,11 +191,13 @@ void VisualSpeaker::setDelay(int delay) { _frameNumber = R2_GLOBALS._events.getFrameNumber(); } -/*--------------------------------------------------------------------------*/ +//---------------------------------------------------------------------------- +// Classes related to CAPTAIN +//---------------------------------------------------------------------------- -SpeakerMiranda300::SpeakerMiranda300(): VisualSpeaker() { - _speakerName = "MIRANDA"; - _color1 = 154; +SpeakerCaptain3210::SpeakerCaptain3210() { + _speakerName = "Captain"; + _color1 = 5; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -205,17 +207,12 @@ SpeakerMiranda300::SpeakerMiranda300(): VisualSpeaker() { _numFrames = 0; } -void SpeakerMiranda300::proc15() { +void SpeakerCaptain3210::proc15() { int v = _fieldF6; + Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) { - _object2 = &R2_GLOBALS._player; - } else { - Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_miranda; - } - + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -226,30 +223,20 @@ void SpeakerMiranda300::proc15() { if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - } else if (v == 100) { - _numFrames = 0; - ((SceneItem *)_action)->_sceneRegionId = 0; - - _object1.setStrip(_object1._strip - 1); - _object1.setFrame(_object1.getFrameCount()); - _object1.animate(ANIM_MODE_6, this); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - - if (v == 4) { - _object1.setup(304, 5, 1); - } else { - _object1.setup(305, v * 2 - 1, 1); - } + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); _object1.animate(ANIM_MODE_5, this); } } -/*--------------------------------------------------------------------------*/ +//---------------------------------------------------------------------------- +// Classes related to CARETAKER +//---------------------------------------------------------------------------- -SpeakerSeeker300::SpeakerSeeker300(): VisualSpeaker() { - _speakerName = "SEEKER"; - _color1 = 35; +SpeakerCaretaker2450::SpeakerCaretaker2450() { + _speakerName = "CARETAKER"; + _color1 = 43; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -259,20 +246,30 @@ SpeakerSeeker300::SpeakerSeeker300(): VisualSpeaker() { _numFrames = 0; } -void SpeakerSeeker300::proc15() { +//---------------------------------------------------------------------------- +// Classes related to GUARD +//---------------------------------------------------------------------------- + +SpeakerGuard::SpeakerGuard() { + _speakerName = "GUARD"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerGuard2800::proc15() { int v = _fieldF6; + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) { - _object2 = &R2_GLOBALS._player; - } else { - Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_seeker; - } - + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); - _object1.fixPriority(140); _object1.setPosition(_object2->_position); if (_object2->_mover) @@ -281,55 +278,21 @@ void SpeakerSeeker300::proc15() { if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - } else if (v == 100) { - _numFrames = 0; - ((SceneItem *)_action)->_sceneRegionId = 0; - - _object1.setStrip(_object1._strip - 1); - _object1.setFrame(_object1.getFrameCount()); - _object1.animate(ANIM_MODE_6, this); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(306, v * 2 - 1, 1); + _object1.setZoom(75); + _object1.setup(4060, 3, 1); _object1.animate(ANIM_MODE_5, this); } } -/*--------------------------------------------------------------------------*/ - -SpeakerSeekerL::SpeakerSeekerL(): VisualSpeaker() { - _speakerName = "SEEKERL"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; - _fontNumber = 10; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQuinnL::SpeakerQuinnL(): VisualSpeaker() { - _speakerName = "QUINNL"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; - _fontNumber = 10; -} - -/*--------------------------------------------------------------------------*/ +//---------------------------------------------------------------------------- +// Classes related to JOCKO +//---------------------------------------------------------------------------- -SpeakerQuinn300::SpeakerQuinn300(): VisualSpeaker() { - _speakerName = "QUINN"; - _color1 = 60; +SpeakerJocko::SpeakerJocko() { + _speakerName = "Jocko"; + _color1 = 45; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -339,17 +302,12 @@ SpeakerQuinn300::SpeakerQuinn300(): VisualSpeaker() { _numFrames = 0; } -void SpeakerQuinn300::proc15() { +void SpeakerJocko3200::proc15() { int v = _fieldF6; + Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) { - _object2 = &R2_GLOBALS._player; - } else { - Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_quinn; - } - + _object2 = &scene->_actor2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -360,54 +318,20 @@ void SpeakerQuinn300::proc15() { if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - } else if (v == 100) { - _numFrames = 0; - ((SceneItem *)_action)->_sceneRegionId = 0; - - _object1.setStrip(_object1._strip - 1); - _object1.setFrame(_object1.getFrameCount()); - _object1.animate(ANIM_MODE_6, this); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - - switch (_object2->_visage) { - case 10: - _object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1); - break; - case 302: - _object1.setup(308, (v - 1) % 8 + 1, 1); - break; - case 308: - _object1.setup(308, 5, 1); - break; - } - + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); _object1.animate(ANIM_MODE_5, this); } } -/*--------------------------------------------------------------------------*/ - -SpeakerTeal300::SpeakerTeal300(): VisualSpeaker() { - _speakerName = "TEAL"; - _color1 = 22; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerTeal300::proc15() { +void SpeakerJocko3220::proc15() { int v = _fieldF6; + Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_teal; + _object2 = &scene->_actor2; _object2->hide(); - _object1.postInit(); _object1.setPosition(_object2->_position); @@ -419,34 +343,18 @@ void SpeakerTeal300::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(303, 1, 1); + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); _object1.animate(ANIM_MODE_5, this); } } - -/*--------------------------------------------------------------------------*/ - -SpeakerSoldier300::SpeakerSoldier300(): VisualSpeaker() { - _speakerName = "SOLDIER"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerSoldier300::proc15() { +void SpeakerJocko3230::proc15() { int v = _fieldF6; + Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_teal; + _object2 = &scene->_actor2; _object2->hide(); - _object1.postInit(); _object1.setPosition(_object2->_position); @@ -458,28 +366,18 @@ void SpeakerSoldier300::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(303, 3, 1); + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); _object1.animate(ANIM_MODE_5, this); } } -/*--------------------------------------------------------------------------*/ - -SpeakerQuinn2350::SpeakerQuinn2350(): VisualSpeaker() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} +//---------------------------------------------------------------------------- +// Classes related to MIRANDA +//---------------------------------------------------------------------------- -SpeakerPharisha2350::SpeakerPharisha2350(): VisualSpeaker() { - _speakerName = "PHARISHA"; - _color1 = 151; +SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() { + _speakerName = "MIRANDA"; + _color1 = 154; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -489,70 +387,55 @@ SpeakerPharisha2350::SpeakerPharisha2350(): VisualSpeaker() { _numFrames = 0; } -/*--------------------------------------------------------------------------*/ - -SpeakerQuinn2435::SpeakerQuinn2435() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} -void SpeakerQuinn2435::proc15() { +void SpeakerMiranda300::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == 3) { _object2 = &R2_GLOBALS._player; } else { - Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_miranda; } _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); } if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); + } else if (v == 100) { + _numFrames = 0; + ((SceneItem *)_action)->_sceneRegionId = 0; + + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object2->setStrip(7); - _object1.setup(2020, 5, 1); + + if (v == 4) { + _object1.setup(304, 5, 1); + } else { + _object1.setup(305, v * 2 - 1, 1); + } _object1.animate(ANIM_MODE_5, this); } } -SpeakerSeeker2435::SpeakerSeeker2435() { - _speakerName = "SEEKER"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerSeeker2435::proc15() { +void SpeakerMiranda3255::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { - _object2 = &R2_GLOBALS._player; - } else { - Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; - } - + _object2 = &R2_GLOBALS._player; _object2->hide(); _object1.postInit(); + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; _object1.setPosition(_object2->_position); } @@ -560,572 +443,213 @@ void SpeakerSeeker2435::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object2->setStrip(7); - _object1.setup(4099, 1, 1); + _object1.setup(3257, 5, 1); _object1.animate(ANIM_MODE_5, this); } } -SpeakerPharisha2435::SpeakerPharisha2435() { - _speakerName = "PHARISHA"; - _color1 = 151; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerPharisha2435::proc15() { - int v = _fieldF6; - Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - - if (!_object2) { - _object2 = &scene->_actor2; - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4098, 5, 1); - _object1.animate(ANIM_MODE_5, this); - } -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQuinn2450::SpeakerQuinn2450() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} -void SpeakerQuinn2450::proc15() { - int v = _fieldF6; - - if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) { - _object2 = &R2_GLOBALS._player; - } else { - Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; - } - - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - if (R2_GLOBALS.getFlag(61)) - _object1.setup(2020, 3, 1); - else - _object1.setup(2020, 1, 1); - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerSeeker2450::SpeakerSeeker2450() { - _speakerName = "SEEKER"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerSeeker2450::proc15() { - int v = _fieldF6; - - if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { - _object2 = &R2_GLOBALS._player; - } else { - Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; - } - - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4099, 3, 1); - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerCaretaker2450::SpeakerCaretaker2450() { - _speakerName = "CARETAKER"; - _color1 = 43; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -/*--------------------------------------------------------------------------*/ - -SpeakerQuinn2500::SpeakerQuinn2500() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -SpeakerSeeker2500::SpeakerSeeker2500() { - _speakerName = "SEEKER"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -SpeakerMiranda2500::SpeakerMiranda2500() { - // Not in uppercase in the original - _speakerName = "Miranda"; - _color1 = 154; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -SpeakerWebbster2500::SpeakerWebbster2500() { - // Not in uppercase in the original - _speakerName = "Webbster"; - _color1 = 27; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -SpeakerQuinn2700::SpeakerQuinn2700() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerQuinn2700::proc15() { - int v = _fieldF6; - - if (!_object2) { - _object2 = &R2_GLOBALS._player; - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - switch (_object2->_visage) { - case 19: - _object1.setup(4022, 5, 1); - break; - case 2701: - _object1.setup(4022, 1, 1); - break; - default: - break; - } - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerNej2700::SpeakerNej2700() { - _speakerName = "NEJ"; - _color1 = 171; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerNej2700::proc15() { - int v = _fieldF6; - Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; - - if (!_object2) { - _object2 = &scene->_actor1; - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - switch (_object2->_visage) { - case 2701: - _object1.setup(4022, 3, 1); - _object1.setPosition(Common::Point(164, 163)); - _object2->setPosition(Common::Point(-10, -10)); - break; - case 2705: - _object1.setup(4022, 7, 1); - _object1.fixPriority(162); - break; - default: - break; - } - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerQuinn2750::SpeakerQuinn2750() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerQuinn2750::proc15() { - int v = _fieldF6; - - if (!_object2) { - _object2 = &R2_GLOBALS._player; - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - switch (_object2->_visage) { - case 19: - _object1.setup(4022, 5, 1); - break; - case 2752: - _object1.setup(2752, 1, 1); - break; - default: - break; - } - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerNej2750::SpeakerNej2750() { - _speakerName = "NEJ"; - _color1 = 171; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerNej2750::proc15() { - int v = _fieldF6; - Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; - - if (!_object2) { - _object2 = &scene->_actor1; - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - switch (_object2->_visage) { - case 2705: - _object1.setup(4022, 7, 1); - break; - case 2752: - _object1.setup(2752, 1, 1); - break; - default: - break; - } - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerQuinn2800::SpeakerQuinn2800() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerQuinn2800::proc15() { - int v = _fieldF6; - - if (!_object2) { - _object2 = &R2_GLOBALS._player; - _object2->hide(); - _object1.postInit(); - _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); - } - - if (v == 0) { - _object1.animate(ANIM_MODE_2, NULL); - } else { - ((SceneItem *)_action)->_sceneRegionId = 0; - switch (_object2->_visage) { - case 16: - _object1.setZoom(75); - _object1.setup(4023, 5, 1); - break; - case 19: - _object1.setup(4023, 1, 1); - break; - case 3110: - _object1.setZoom(75); - if (_object2->_strip == 1) - _object1.setup(4061 , 1, 1); - else - _object1.setup(4061 , 3, 1); - break; - default: - break; - } - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerNej2800::SpeakerNej2800() { - _speakerName = "NEJ"; - _color1 = 171; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} +void SpeakerMiranda3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; -void SpeakerNej2800::proc15() { int v = _fieldF6; - Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); - if (_object2->_mover) + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) _object2->addMover(NULL); } + - if (v == 0) { + switch (v) { + case 0: _object1.animate(ANIM_MODE_2, NULL); - } else { + break; + case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4023, 3, 1); - if (_object2->_visage == 2801) - _object1.setPosition(Common::Point(R2_GLOBALS._player._position.x - 12, R2_GLOBALS._player._position.y)); + _object1.setup(4051, 5, 1); _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; } } -SpeakerGuard2800::SpeakerGuard2800() { - _speakerName = "GUARD"; - _color1 = 5; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} +void SpeakerMiranda3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; -void SpeakerGuard2800::proc15() { int v = _fieldF6; - Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); - if (_object2->_mover) + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) _object2->addMover(NULL); } + - if (v == 0) { + switch (v) { + case 0: _object1.animate(ANIM_MODE_2, NULL); - } else { + break; + case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setZoom(75); - _object1.setup(4060, 3, 1); + _object1.setup(4051, 5, 1); _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; } } -SpeakerGuard3100::SpeakerGuard3100() { - _speakerName = "GUARD"; - _color1 = 5; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -SpeakerRocko3200::SpeakerRocko3200() { - _speakerName = "Rocko"; - _color1 = 5; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} +void SpeakerMiranda3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; -void SpeakerRocko3200::proc15() { int v = _fieldF6; - Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - if (v == 0) { + switch (v) { + case 0: _object1.animate(ANIM_MODE_2, NULL); - } else { + break; + case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); - _object1.animate(ANIM_MODE_5, this); + _object1.setup(4051, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4050, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; } } -SpeakerJocko3200::SpeakerJocko3200() { - _speakerName = "Jocko"; - _color1 = 45; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} +void SpeakerMiranda3700::proc15() { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; -void SpeakerJocko3200::proc15() { int v = _fieldF6; - Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_actor3; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - if (v == 0) { + _object1.setPosition(_object2->_position); + + switch (v) { + case 0: _object1.animate(ANIM_MODE_2, NULL); - } else { + break; + case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); - _object1.animate(ANIM_MODE_5, this); + scene->_actor1.setup(10, 6, 1); + scene->_actor2.setup(20, 5, 1); + _object2->setup(30, 1, 1); + scene->_actor4.setup(40, 1, 1); + _object1.setup(4050, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor3.setup(30, 8, 1); + _object1.setup(4052, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor2.setup(20, 1, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(4051, 7, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; } } -SpeakerSocko3200::SpeakerSocko3200() { - _speakerName = "Socko"; - _color1 = 10; +//---------------------------------------------------------------------------- +// Classes related to NEJ +//---------------------------------------------------------------------------- + +SpeakerNej::SpeakerNej() { + _speakerName = "NEJ"; + _color1 = 171; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -1135,12 +659,12 @@ SpeakerSocko3200::SpeakerSocko3200() { _numFrames = 0; } -void SpeakerSocko3200::proc15() { +void SpeakerNej2700::proc15() { int v = _fieldF6; - Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; + Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1153,26 +677,26 @@ void SpeakerSocko3200::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + switch (_object2->_visage) { + case 2701: + _object1.setup(4022, 3, 1); + _object1.setPosition(Common::Point(164, 163)); + _object2->setPosition(Common::Point(-10, -10)); + break; + case 2705: + _object1.setup(4022, 7, 1); + _object1.fixPriority(162); + break; + default: + break; + } _object1.animate(ANIM_MODE_5, this); } } -SpeakerCaptain3210::SpeakerCaptain3210() { - _speakerName = "Captain"; - _color1 = 5; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerCaptain3210::proc15() { +void SpeakerNej2750::proc15() { int v = _fieldF6; - Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { _object2 = &scene->_actor1; @@ -1188,26 +712,23 @@ void SpeakerCaptain3210::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + switch (_object2->_visage) { + case 2705: + _object1.setup(4022, 7, 1); + break; + case 2752: + _object1.setup(2752, 1, 1); + break; + default: + break; + } _object1.animate(ANIM_MODE_5, this); } } -SpeakerPrivate3210::SpeakerPrivate3210() { - _speakerName = "Private"; - _color1 = 45; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerPrivate3210::proc15() { +void SpeakerNej2800::proc15() { int v = _fieldF6; - Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; + Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { _object2 = &scene->_actor2; @@ -1223,14 +744,20 @@ void SpeakerPrivate3210::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.setup(4023, 3, 1); + if (_object2->_visage == 2801) + _object1.setPosition(Common::Point(R2_GLOBALS._player._position.x - 12, R2_GLOBALS._player._position.y)); _object1.animate(ANIM_MODE_5, this); } } -SpeakerRocko3220::SpeakerRocko3220() { - _speakerName = "Rocko"; - _color1 = 5; +//---------------------------------------------------------------------------- +// Classes related to PHARISHA +//---------------------------------------------------------------------------- + +SpeakerPharisha::SpeakerPharisha(): VisualSpeaker() { + _speakerName = "PHARISHA"; + _color1 = 151; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -1240,31 +767,32 @@ SpeakerRocko3220::SpeakerRocko3220() { _numFrames = 0; } -void SpeakerRocko3220::proc15() { +void SpeakerPharisha2435::proc15() { int v = _fieldF6; - Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_actor2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); } if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.setup(4098, 5, 1); _object1.animate(ANIM_MODE_5, this); } } -SpeakerJocko3220::SpeakerJocko3220() { - _speakerName = "Jocko"; +//---------------------------------------------------------------------------- +// Classes related to PRIVATE +//---------------------------------------------------------------------------- + +SpeakerPrivate3210::SpeakerPrivate3210() { + _speakerName = "Private"; _color1 = 45; _color2 = 0; _fieldF6 = 0; @@ -1275,9 +803,9 @@ SpeakerJocko3220::SpeakerJocko3220() { _numFrames = 0; } -void SpeakerJocko3220::proc15() { +void SpeakerPrivate3210::proc15() { int v = _fieldF6; - Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; + Scene3210 *scene = (Scene3210 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { _object2 = &scene->_actor2; @@ -1298,9 +826,13 @@ void SpeakerJocko3220::proc15() { } } -SpeakerRocko3230::SpeakerRocko3230() { - _speakerName = "Rocko"; - _color1 = 5; +//---------------------------------------------------------------------------- +// Classes related to QUINN +//---------------------------------------------------------------------------- + +SpeakerQuinn::SpeakerQuinn(): VisualSpeaker() { + _speakerName = "QUINN"; + _color1 = 60; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -1310,12 +842,17 @@ SpeakerRocko3230::SpeakerRocko3230() { _numFrames = 0; } -void SpeakerRocko3230::proc15() { +void SpeakerQuinn300::proc15() { int v = _fieldF6; - Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + if (R2_GLOBALS._player._characterIndex == 3) { + _object2 = &R2_GLOBALS._player; + } else { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_quinn; + } + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1326,101 +863,91 @@ void SpeakerRocko3230::proc15() { if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); + } else if (v == 100) { + _numFrames = 0; + ((SceneItem *)_action)->_sceneRegionId = 0; + + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4111, (_object2->_strip * 2) - 1, 1); + + switch (_object2->_visage) { + case 10: + _object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1); + break; + case 302: + _object1.setup(308, (v - 1) % 8 + 1, 1); + break; + case 308: + _object1.setup(308, 5, 1); + break; + } + _object1.animate(ANIM_MODE_5, this); } } -SpeakerJocko3230::SpeakerJocko3230() { - _speakerName = "Jocko"; - _color1 = 45; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerJocko3230::proc15() { +void SpeakerQuinn2435::proc15() { int v = _fieldF6; - Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + if (R2_GLOBALS._player._characterIndex == 1) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); } if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object2->setStrip(7); + _object1.setup(2020, 5, 1); _object1.animate(ANIM_MODE_5, this); } } -SpeakerTeal3240::SpeakerTeal3240() { - _speakerName = "Teal"; - _color1 = 22; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerTeal3240::proc15() { +void SpeakerQuinn2450::proc15() { int v = _fieldF6; - Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + if (R2_GLOBALS._player._characterIndex == 1) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - - if (_object2->_mover) - _object2->addMover(NULL); } if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4070, (_object2->_strip * 2) - 1, 1); + if (R2_GLOBALS.getFlag(61)) + _object1.setup(2020, 3, 1); + else + _object1.setup(2020, 1, 1); _object1.animate(ANIM_MODE_5, this); } } -SpeakerWebbster3240::SpeakerWebbster3240() { - _speakerName = "Webbster"; - _color1 = 10; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerWebbster3240::proc15() { +void SpeakerQuinn2700::proc15() { int v = _fieldF6; - Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &R2_GLOBALS._player; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1433,29 +960,25 @@ void SpeakerWebbster3240::proc15() { _object1.animate(ANIM_MODE_2, NULL); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4110, 5, 1); + switch (_object2->_visage) { + case 19: + _object1.setup(4022, 5, 1); + break; + case 2701: + _object1.setup(4022, 1, 1); + break; + default: + break; + } _object1.animate(ANIM_MODE_5, this); } } -SpeakerRalf3245::SpeakerRalf3245() { - _speakerName = "Ralf"; - _color1 = 5; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerRalf3245::proc15() { +void SpeakerQuinn2750::proc15() { int v = _fieldF6; - Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &R2_GLOBALS._player; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1469,41 +992,24 @@ void SpeakerRalf3245::proc15() { } else { ((SceneItem *)_action)->_sceneRegionId = 0; switch (_object2->_visage) { - case 3100: - _object1.setup(4105, (_object2->_strip * 2) - 1, 1); - break; - case 3101: - _object1.setup(4108, (_object2->_strip * 2) - 1, 1); + case 19: + _object1.setup(4022, 5, 1); break; - case 3102: - _object1.setup(4109, (_object2->_strip * 2) - 1, 1); + case 2752: + _object1.setup(2752, 1, 1); break; default: break; } - _object1.animate(ANIM_MODE_5, this); } } -SpeakerTomko3245::SpeakerTomko3245() { - _speakerName = "Tomko"; - _color1 = 10; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerTomko3245::proc15() { +void SpeakerQuinn2800::proc15() { int v = _fieldF6; - Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &R2_GLOBALS._player; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1517,33 +1023,25 @@ void SpeakerTomko3245::proc15() { } else { ((SceneItem *)_action)->_sceneRegionId = 0; switch (_object2->_visage) { - case 3100: - _object1.setup(4105, (_object2->_strip * 2) - 1, 1); + case 16: + _object1.setZoom(75); + _object1.setup(4023, 5, 1); break; - case 3101: - _object1.setup(4108, (_object2->_strip * 2) - 1, 1); + case 19: + _object1.setup(4023, 1, 1); break; - case 3102: - _object1.setup(4109, (_object2->_strip * 2) - 1, 1); + case 3110: + _object1.setZoom(75); + if (_object2->_strip == 1) + _object1.setup(4061 , 1, 1); + else + _object1.setup(4061 , 3, 1); break; default: break; - } - - _object1.animate(ANIM_MODE_5, this); - } -} - -SpeakerQuinn3255::SpeakerQuinn3255() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; + } + _object1.animate(ANIM_MODE_5, this); + } } void SpeakerQuinn3255::proc15() { @@ -1569,53 +1067,59 @@ void SpeakerQuinn3255::proc15() { } } -SpeakerMiranda3255::SpeakerMiranda3255() { - _speakerName = "MIRANDA"; - _color1 = 154; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} +void SpeakerQuinn3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; -void SpeakerMiranda3255::proc15() { int v = _fieldF6; if (!_object2) { - _object2 = &R2_GLOBALS._player; + if (R2_GLOBALS._player._characterIndex == 1) + _object2 = &R2_GLOBALS._player; + else if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &scene->_actor1; + else + _object2 = &scene->_actor2; + _object2->hide(); _object1.postInit(); - _object1._effect = _object2->_effect; - _object1._shade = _object2->_shade; _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); } + - if (v == 0) { + switch (v) { + case 0: _object1.animate(ANIM_MODE_2, NULL); - } else { + break; + case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(3257, 5, 1); + _object1.setup(4010, 5, 1); _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; } } -SpeakerQuinn3375::SpeakerQuinn3375() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerQuinn3375::proc15() { - Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; +void SpeakerQuinn3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; @@ -1634,10 +1138,10 @@ void SpeakerQuinn3375::proc15() { _object1._effect = 1; _object1.changeZoom(-1); - if (scene->_actor1._position.y != 163) - R2_GLOBALS._player.setStrip(8); + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); else - R2_GLOBALS._player.setStrip(2); + R2_GLOBALS._player.setStrip(3); if (R2_GLOBALS._player._mover) R2_GLOBALS._player.addMover(NULL); @@ -1656,7 +1160,11 @@ void SpeakerQuinn3375::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4010, 5, 1); + if (R2_GLOBALS._player._characterIndex == 2) + _object1.setup(4010, 3, 1); + else + _object1.setup(4010, 5, 1); + _object1.animate(ANIM_MODE_5, this); break; default: @@ -1665,28 +1173,18 @@ void SpeakerQuinn3375::proc15() { } } -SpeakerSeeker3375::SpeakerSeeker3375() { - _speakerName = "SEEKER"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerSeeker3375::proc15() { - Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; +void SpeakerQuinn3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 1) _object2 = &R2_GLOBALS._player; - else + else if (R2_GLOBALS._player._characterIndex == 2) _object2 = &scene->_actor1; + else + _object2 = &scene->_actor2; _object2->hide(); _object1.postInit(); @@ -1694,22 +1192,73 @@ void SpeakerSeeker3375::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - - if (scene->_actor1._position.y != 163) - R2_GLOBALS._player.setStrip(8); - else - R2_GLOBALS._player.setStrip(2); + R2_GLOBALS._player.disableControl(); + if (_object2->_mover) + _object2->addMover(NULL); + } - if (R2_GLOBALS._player._mover) - R2_GLOBALS._player.addMover(NULL); + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4010, 5, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4010, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4012, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + default: + signal(); + break; + } +} - R2_GLOBALS._player.disableControl(CURSOR_TALK); +void SpeakerQuinn3700::setText(const Common::String &msg) { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + switch (_fieldF6) { + case 2: + scene->_actor3.setup(30, 1, 1); + R2_GLOBALS._sound2.play(44); + break; + case 3: + scene->_actor3.setup(30, 1, 1); + break; + default: + scene->_actor3.setup(30, 7, 1); + break; + } + VisualSpeaker::setText(msg); +} + +void SpeakerQuinn3700::proc15() { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); if (_object2->_mover) _object2->addMover(NULL); } - + + _object1.setPosition(_object2->_position); switch (v) { case 0: @@ -1717,8 +1266,25 @@ void SpeakerSeeker3375::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4031, 1, 1); - _object1.animate(ANIM_MODE_5, this); + R2_GLOBALS._sound2.stop(); + scene->_actor1.setup(10, 4, 1); + scene->_actor3.setup(30, 7, 1); + _object1.setup(3701, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor2.setup(20, 1, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(3701, 2, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + scene->_actor1.setup(10, 2, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(4011, 1, 1); + _object1.animate(ANIM_MODE_5, NULL); break; default: signal(); @@ -1726,9 +1292,82 @@ void SpeakerSeeker3375::proc15() { } } -SpeakerMiranda3375::SpeakerMiranda3375() { - _speakerName = "MIRANDA"; - _color1 = 154; +//---------------------------------------------------------------------------- +// Classes related to QUINNL +//---------------------------------------------------------------------------- + +SpeakerQuinnL::SpeakerQuinnL(): VisualSpeaker() { + _speakerName = "QUINNL"; + _color1 = 35; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; + _fontNumber = 10; +} + +//---------------------------------------------------------------------------- +// Classes related to RALF +//---------------------------------------------------------------------------- + +SpeakerRalf3245::SpeakerRalf3245() { + _speakerName = "Ralf"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerRalf3245::proc15() { + int v = _fieldF6; + Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + switch (_object2->_visage) { + case 3100: + _object1.setup(4105, (_object2->_strip * 2) - 1, 1); + break; + case 3101: + _object1.setup(4108, (_object2->_strip * 2) - 1, 1); + break; + case 3102: + _object1.setup(4109, (_object2->_strip * 2) - 1, 1); + break; + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + +//---------------------------------------------------------------------------- +// Classes related to ROCKO +//---------------------------------------------------------------------------- + +SpeakerRocko::SpeakerRocko() { + _speakerName = "Rocko"; + _color1 = 5; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -1738,116 +1377,82 @@ SpeakerMiranda3375::SpeakerMiranda3375() { _numFrames = 0; } -void SpeakerMiranda3375::proc15() { - Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; - +void SpeakerRocko3200::proc15() { int v = _fieldF6; + Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) - _object2 = &R2_GLOBALS._player; - else - _object2 = &scene->_actor2; - + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); - - if (scene->_actor1._position.y != 163) - R2_GLOBALS._player.setStrip(8); - else - R2_GLOBALS._player.setStrip(2); - R2_GLOBALS._player.disableControl(); + if (_object2->_mover) + _object2->addMover(NULL); + } - if (R2_GLOBALS._player._mover) - R2_GLOBALS._player.addMover(NULL); + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); +void SpeakerRocko3220::proc15() { + int v = _fieldF6; + Scene3220 *scene = (Scene3220 *)R2_GLOBALS._sceneManager._scene; - if (_object2->_mover) + if (!_object2) { + _object2 = &scene->_actor1; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) _object2->addMover(NULL); } - - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: + } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4051, 5, 1); + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); _object1.animate(ANIM_MODE_5, this); - break; - default: - signal(); - break; } } -SpeakerWebbster3375::SpeakerWebbster3375() { - _speakerName = "WEBBSTER"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerWebbster3375::proc15() { - Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; - +void SpeakerRocko3230::proc15() { int v = _fieldF6; + Scene3230 *scene = (Scene3230 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor3; + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); - - if (scene->_actor1._position.y != 163) - R2_GLOBALS._player.setStrip(8); - else - R2_GLOBALS._player.setStrip(2); - - if (R2_GLOBALS._player._mover) - R2_GLOBALS._player.addMover(NULL); - - R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: + } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4110, 5, 1); + _object1.setup(4111, (_object2->_strip * 2) - 1, 1); _object1.animate(ANIM_MODE_5, this); - break; - default: - signal(); - break; } } -SpeakerQuinn3385::SpeakerQuinn3385() { - _speakerName = "QUINN"; - _color1 = 60; +//---------------------------------------------------------------------------- +// Classes related to SEEKER +//---------------------------------------------------------------------------- + +SpeakerSeeker::SpeakerSeeker(): VisualSpeaker() { + _speakerName = "SEEKER"; + _color1 = 35; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -1856,144 +1461,104 @@ SpeakerQuinn3385::SpeakerQuinn3385() { _displayMode = 1; _numFrames = 0; } -void SpeakerQuinn3385::proc15() { - Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; +void SpeakerSeeker300::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 3) { _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &scene->_actor1; - else - _object2 = &scene->_actor2; + } else { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } _object2->hide(); _object1.postInit(); + _object1.fixPriority(140); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); - - if (R2_GLOBALS._sceneManager._previousScene == 3375) - R2_GLOBALS._player.setStrip(4); - else - R2_GLOBALS._player.setStrip(3); - - if (R2_GLOBALS._player._mover) - R2_GLOBALS._player.addMover(NULL); - - R2_GLOBALS._player.disableControl(CURSOR_TALK); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: + } else if (v == 100) { + _numFrames = 0; ((SceneItem *)_action)->_sceneRegionId = 0; - if (R2_GLOBALS._player._characterIndex == 2) - _object1.setup(4010, 3, 1); - else - _object1.setup(4010, 5, 1); + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(306, v * 2 - 1, 1); _object1.animate(ANIM_MODE_5, this); - break; - default: - signal(); - break; } } -SpeakerSeeker3385::SpeakerSeeker3385() { - _speakerName = "SEEKER"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerSeeker3385::proc15() { - Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; - +void SpeakerSeeker2435::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; - else + } else { + Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; + } _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); - - if (R2_GLOBALS._sceneManager._previousScene == 3375) - R2_GLOBALS._player.setStrip(4); - else - R2_GLOBALS._player.setStrip(3); + } - if (R2_GLOBALS._player._mover) - R2_GLOBALS._player.addMover(NULL); + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object2->setStrip(7); + _object1.setup(4099, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} - R2_GLOBALS._player.disableControl(CURSOR_TALK); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); +void SpeakerSeeker2450::proc15() { + int v = _fieldF6; - if (_object2->_mover) - _object2->addMover(NULL); + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) { + _object2 = &R2_GLOBALS._player; + } else { + Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); } - - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: + } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4031, 3, 1); + _object1.setup(4099, 3, 1); _object1.animate(ANIM_MODE_5, this); - break; - default: - signal(); - break; } } -SpeakerMiranda3385::SpeakerMiranda3385() { - _speakerName = "MIRANDA"; - _color1 = 154; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerMiranda3385::proc15() { - Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; +void SpeakerSeeker3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; else - _object2 = &scene->_actor2; + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); @@ -2002,10 +1567,10 @@ void SpeakerMiranda3385::proc15() { _object1._effect = 1; _object1.changeZoom(-1); - if (R2_GLOBALS._sceneManager._previousScene == 3375) - R2_GLOBALS._player.setStrip(4); + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); else - R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setStrip(2); if (R2_GLOBALS._player._mover) R2_GLOBALS._player.addMover(NULL); @@ -2024,7 +1589,7 @@ void SpeakerMiranda3385::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4051, 5, 1); + _object1.setup(4031, 1, 1); _object1.animate(ANIM_MODE_5, this); break; default: @@ -2033,25 +1598,17 @@ void SpeakerMiranda3385::proc15() { } } -SpeakerWebbster3385::SpeakerWebbster3385() { - _speakerName = "WEBBSTER"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - -void SpeakerWebbster3385::proc15() { +void SpeakerSeeker3385::proc15() { Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; if (!_object2) { - _object2 = &scene->_actor3; + if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor1; + _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -2073,6 +1630,7 @@ void SpeakerWebbster3385::proc15() { if (_object2->_mover) _object2->addMover(NULL); } + switch (v) { case 0: @@ -2080,7 +1638,7 @@ void SpeakerWebbster3385::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4110, 5, 1); + _object1.setup(4031, 3, 1); _object1.animate(ANIM_MODE_5, this); break; default: @@ -2089,29 +1647,16 @@ void SpeakerWebbster3385::proc15() { } } -SpeakerQuinn3400::SpeakerQuinn3400() { - _speakerName = "QUINN"; - _color1 = 60; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} -void SpeakerQuinn3400::proc15() { +void SpeakerSeeker3400::proc15() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &scene->_actor1; else - _object2 = &scene->_actor2; + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); @@ -2120,6 +1665,8 @@ void SpeakerQuinn3400::proc15() { _object1._effect = 1; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (_object2->_mover) _object2->addMover(NULL); } @@ -2130,17 +1677,27 @@ void SpeakerQuinn3400::proc15() { break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4010, 5, 1); + _object1.setup(4031, 1, 1); _object1.animate(ANIM_MODE_5, NULL); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4010, 3, 1); + _object1.setup(4031, 3, 1); _object1.animate(ANIM_MODE_5, NULL); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4012, 3, 1); + _object1.setup(4030, 3, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 4: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 7, 1); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 5: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4033, 1, 1); _object1.animate(ANIM_MODE_5, NULL); break; default: @@ -2149,35 +1706,29 @@ void SpeakerQuinn3400::proc15() { } } -SpeakerSeeker3400::SpeakerSeeker3400() { - _speakerName = "SEEKER"; - _color1 = 35; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; +void SpeakerSeeker3700::setText(const Common::String &msg) { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; + + if (_fieldF6 == 1) { + R2_GLOBALS._sound2.play(44); + scene->_actor3.setup(30, 8, 1); + } else { + scene->_actor3.setup(30, 2, 1); + } + VisualSpeaker::setText(msg); } -void SpeakerSeeker3400::proc15() { - Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; +void SpeakerSeeker3700::proc15() { + Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) - _object2 = &R2_GLOBALS._player; - else - _object2 = &scene->_actor1; - + _object2 = &scene->_actor2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2185,33 +1736,27 @@ void SpeakerSeeker3400::proc15() { _object2->addMover(NULL); } + _object1.setPosition(_object2->_position); + switch (v) { case 0: _object1.animate(ANIM_MODE_2, NULL); break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4031, 1, 1); + R2_GLOBALS._sound2.stop(); + scene->_actor1.setup(10, 8, 1); + scene->_actor2.setup(20, 7, 1); + scene->_actor3.setup(30, 8, 1); + _object1.setup(3701, 3, 1); _object1.animate(ANIM_MODE_5, NULL); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4031, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 3: - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4030, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 4: - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4031, 7, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 5: - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4033, 1, 1); + scene->_actor1.setup(10, 2, 1); + scene->_actor2.setup(20, 1, 1); + scene->_actor3.setup(30, 1, 1); + _object1.setup(4031, 1, 1); _object1.animate(ANIM_MODE_5, NULL); break; default: @@ -2220,9 +1765,13 @@ void SpeakerSeeker3400::proc15() { } } -SpeakerMiranda3400::SpeakerMiranda3400() { - _speakerName = "MIRANDA"; - _color1 = 154; +//---------------------------------------------------------------------------- +// Classes related to SEEKERL +//---------------------------------------------------------------------------- + +SpeakerSeekerL::SpeakerSeekerL(): VisualSpeaker() { + _speakerName = "SEEKERL"; + _color1 = 35; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -2230,55 +1779,55 @@ SpeakerMiranda3400::SpeakerMiranda3400() { _object2 = NULL; _displayMode = 1; _numFrames = 0; + _fontNumber = 10; } -void SpeakerMiranda3400::proc15() { - Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; +//---------------------------------------------------------------------------- +// Classes related to SOCKO +//---------------------------------------------------------------------------- + +SpeakerSocko3200::SpeakerSocko3200() { + _speakerName = "Socko"; + _color1 = 10; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +void SpeakerSocko3200::proc15() { int v = _fieldF6; + Scene3200 *scene = (Scene3200 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) - _object2 = &R2_GLOBALS._player; - else - _object2 = &scene->_actor2; - + _object2 = &scene->_actor3; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); - R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4051, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 2: + } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4050, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - default: - signal(); - break; + _object1.setup(4060, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); } } -SpeakerWebbster3400::SpeakerWebbster3400() { - _speakerName = "WEBBSTER"; - _color1 = 27; +//---------------------------------------------------------------------------- +// Classes related to SOLDIER +//---------------------------------------------------------------------------- + +SpeakerSoldier300::SpeakerSoldier300(): VisualSpeaker() { + _speakerName = "SOLDIER"; + _color1 = 60; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -2288,63 +1837,93 @@ SpeakerWebbster3400::SpeakerWebbster3400() { _numFrames = 0; } -void SpeakerWebbster3400::proc15() { - Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; +void SpeakerSoldier300::proc15() { + int v = _fieldF6; + + if (!_object2) { + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_teal; + _object2->hide(); + + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(303, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +//---------------------------------------------------------------------------- +// Classes related to TEAL +//---------------------------------------------------------------------------- + +SpeakerTeal::SpeakerTeal(): VisualSpeaker() { + _speakerName = "TEAL"; + _color1 = 22; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} +void SpeakerTeal300::proc15() { int v = _fieldF6; if (!_object2) { - _object2 = &scene->_actor3; + Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_teal; + _object2->hide(); + + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(303, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + +void SpeakerTeal3240::proc15() { + int v = _fieldF6; + Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor1; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - _object1._effect = 1; - _object1.changeZoom(-1); - R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4110, 5, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 2: - ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4110, 7, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 3: + } else { ((SceneItem *)_action)->_sceneRegionId = 0; - _object1.setup(4110, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - default: - signal(); - break; + _object1.setup(4070, (_object2->_strip * 2) - 1, 1); + _object1.animate(ANIM_MODE_5, this); } } -SpeakerTeal3400::SpeakerTeal3400() { - _speakerName = "TEAL"; - _color1 = 22; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; -} - void SpeakerTeal3400::proc15() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; @@ -2402,9 +1981,13 @@ void SpeakerTeal3400::proc15() { } } -SpeakerQuinn3700::SpeakerQuinn3700() { - _speakerName = "QUINN"; - _color1 = 60; +//---------------------------------------------------------------------------- +// Classes related to TOMKO +//---------------------------------------------------------------------------- + +SpeakerTomko3245::SpeakerTomko3245() { + _speakerName = "Tomko"; + _color1 = 10; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -2414,79 +1997,49 @@ SpeakerQuinn3700::SpeakerQuinn3700() { _numFrames = 0; } -void SpeakerQuinn3700::setText(const Common::String &msg) { - Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - - switch (_fieldF6) { - case 2: - scene->_actor3.setup(30, 1, 1); - R2_GLOBALS._sound2.play(44); - break; - case 3: - scene->_actor3.setup(30, 1, 1); - break; - default: - scene->_actor3.setup(30, 7, 1); - break; - } - VisualSpeaker::setText(msg); -} - -void SpeakerQuinn3700::proc15() { - Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; - +void SpeakerTomko3245::proc15() { int v = _fieldF6; + Scene3245 *scene = (Scene3245 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor1; + _object2 = &scene->_actor2; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); - _object1._numFrames = 7; - R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } - _object1.setPosition(_object2->_position); - - switch (v) { - case 0: + if (v == 0) { _object1.animate(ANIM_MODE_2, NULL); - break; - case 1: - ((SceneItem *)_action)->_sceneRegionId = 0; - R2_GLOBALS._sound2.stop(); - scene->_actor1.setup(10, 4, 1); - scene->_actor3.setup(30, 7, 1); - _object1.setup(3701, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 2: - ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor2.setup(20, 1, 1); - scene->_actor3.setup(30, 1, 1); - _object1.setup(3701, 2, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 3: + } else { ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor1.setup(10, 2, 1); - scene->_actor3.setup(30, 1, 1); - _object1.setup(4011, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - default: - signal(); - break; + switch (_object2->_visage) { + case 3100: + _object1.setup(4105, (_object2->_strip * 2) - 1, 1); + break; + case 3101: + _object1.setup(4108, (_object2->_strip * 2) - 1, 1); + break; + case 3102: + _object1.setup(4109, (_object2->_strip * 2) - 1, 1); + break; + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); } } -SpeakerSeeker3700::SpeakerSeeker3700() { - _speakerName = "SEEKER"; - _color1 = 35; +//---------------------------------------------------------------------------- +// Classes related to WEBBSTER +//---------------------------------------------------------------------------- + +SpeakerWebbster::SpeakerWebbster(int colour) { + _speakerName = "WEBBSTER"; + _color1 = colour; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -2496,29 +2049,51 @@ SpeakerSeeker3700::SpeakerSeeker3700() { _numFrames = 0; } -void SpeakerSeeker3700::setText(const Common::String &msg) { - Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; +void SpeakerWebbster3240::proc15() { + int v = _fieldF6; + Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; - if (_fieldF6 == 1) { - R2_GLOBALS._sound2.play(44); - scene->_actor3.setup(30, 8, 1); + if (!_object2) { + _object2 = &scene->_actor2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); } else { - scene->_actor3.setup(30, 2, 1); + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, this); } - VisualSpeaker::setText(msg); } -void SpeakerSeeker3700::proc15() { - Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; +void SpeakerWebbster3375::proc15() { + Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_actor3; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (scene->_actor1._position.y != 163) + R2_GLOBALS._player.setStrip(8); + else + R2_GLOBALS._player.setStrip(2); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2526,28 +2101,14 @@ void SpeakerSeeker3700::proc15() { _object2->addMover(NULL); } - _object1.setPosition(_object2->_position); - switch (v) { case 0: _object1.animate(ANIM_MODE_2, NULL); break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - R2_GLOBALS._sound2.stop(); - scene->_actor1.setup(10, 8, 1); - scene->_actor2.setup(20, 7, 1); - scene->_actor3.setup(30, 8, 1); - _object1.setup(3701, 3, 1); - _object1.animate(ANIM_MODE_5, NULL); - break; - case 2: - ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor1.setup(10, 2, 1); - scene->_actor2.setup(20, 1, 1); - scene->_actor3.setup(30, 1, 1); - _object1.setup(4031, 1, 1); - _object1.animate(ANIM_MODE_5, NULL); + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, this); break; default: signal(); @@ -2555,20 +2116,52 @@ void SpeakerSeeker3700::proc15() { } } -SpeakerMiranda3700::SpeakerMiranda3700() { - _speakerName = "MIRANDA"; - _color1 = 154; - _color2 = 0; - _fieldF6 = 0; - _textWidth = 300; - _hideObjects = false; - _object2 = NULL; - _displayMode = 1; - _numFrames = 0; +void SpeakerWebbster3385::proc15() { + Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3375) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } } -void SpeakerMiranda3700::proc15() { - Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; +void SpeakerWebbster3400::proc15() { + Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; int v = _fieldF6; @@ -2578,6 +2171,8 @@ void SpeakerMiranda3700::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2585,32 +2180,23 @@ void SpeakerMiranda3700::proc15() { _object2->addMover(NULL); } - _object1.setPosition(_object2->_position); - switch (v) { case 0: _object1.animate(ANIM_MODE_2, NULL); break; case 1: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor1.setup(10, 6, 1); - scene->_actor2.setup(20, 5, 1); - _object2->setup(30, 1, 1); - scene->_actor4.setup(40, 1, 1); - _object1.setup(4050, 5, 1); + _object1.setup(4110, 5, 1); _object1.animate(ANIM_MODE_5, NULL); break; case 2: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor3.setup(30, 8, 1); - _object1.setup(4052, 3, 1); + _object1.setup(4110, 7, 1); _object1.animate(ANIM_MODE_5, NULL); break; case 3: ((SceneItem *)_action)->_sceneRegionId = 0; - scene->_actor2.setup(20, 1, 1); - scene->_actor3.setup(30, 1, 1); - _object1.setup(4051, 7, 1); + _object1.setup(4110, 3, 1); _object1.animate(ANIM_MODE_5, NULL); break; default: diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index c3de6a68a8..3020b19431 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -63,461 +63,442 @@ public: void setDelay(int delay); }; -class SpeakerMiranda300 : public VisualSpeaker { +// Classes related to Captain + +class SpeakerCaptain3210 : public VisualSpeaker { public: - SpeakerMiranda300(); + SpeakerCaptain3210(); - virtual Common::String getClassName() { return "SpeakerMiranda300"; } + virtual Common::String getClassName() { return "SpeakerCaptain3210"; } virtual void proc15(); }; -class SpeakerSeeker300 : public VisualSpeaker { +// Classes related to Caretaker + +class SpeakerCaretaker2450 : public VisualSpeaker { public: - SpeakerSeeker300(); + SpeakerCaretaker2450(); - virtual Common::String getClassName() { return "SpeakerSeeker300"; } - virtual void proc15(); + virtual Common::String getClassName() { return "SpeakerCaretaker2450"; } }; -class SpeakerSeekerL : public VisualSpeaker { -public: - SpeakerSeekerL(); +// Classes related to Guard - virtual Common::String getClassName() { return "SpeakerSeekerL"; } +class SpeakerGuard : public VisualSpeaker { +public: + SpeakerGuard(); + virtual Common::String getClassName() { return "SpeakerGuard"; } }; -class SpeakerQuinnL : public VisualSpeaker { +class SpeakerGuard2800 : public SpeakerGuard { public: - SpeakerQuinnL(); - - virtual Common::String getClassName() { return "SpeakerQuinnL"; } + virtual Common::String getClassName() { return "SpeakerGuard2800"; } + virtual void proc15(); }; -class SpeakerQuinn300 : public VisualSpeaker { +// Classes related to Jocko + +class SpeakerJocko : public VisualSpeaker { public: - SpeakerQuinn300(); + SpeakerJocko(); + virtual Common::String getClassName() { return "SpeakerJocko"; } +}; - virtual Common::String getClassName() { return "SpeakerQuinn300"; } +class SpeakerJocko3200 : public SpeakerJocko { +public: + virtual Common::String getClassName() { return "SpeakerJocko3200"; } virtual void proc15(); }; -class SpeakerTeal300 : public VisualSpeaker { +class SpeakerJocko3220 : public SpeakerJocko { public: - SpeakerTeal300(); - - virtual Common::String getClassName() { return "SpeakerTeal300"; } + virtual Common::String getClassName() { return "SpeakerJocko3220"; } virtual void proc15(); }; -class SpeakerSoldier300 : public VisualSpeaker { +class SpeakerJocko3230 : public SpeakerJocko { public: - SpeakerSoldier300(); - - virtual Common::String getClassName() { return "SpeakerSoldier300"; } + virtual Common::String getClassName() { return "SpeakerJocko3230"; } virtual void proc15(); }; -class SpeakerQuinn2350 : public VisualSpeaker { -public: - SpeakerQuinn2350(); +// Classes related to Miranda - virtual Common::String getClassName() { return "SpeakerQuinn2350"; } +class SpeakerMiranda : public VisualSpeaker { +public: + SpeakerMiranda(); + virtual Common::String getClassName() { return "SpeakerMiranda"; } }; -class SpeakerPharisha2350 : public VisualSpeaker { +class SpeakerMiranda300 : public SpeakerMiranda { public: - SpeakerPharisha2350(); - - virtual Common::String getClassName() { return "SpeakerPharisha2350"; } + virtual Common::String getClassName() { return "SpeakerMiranda300"; } + virtual void proc15(); }; -class SpeakerQuinn2435 : public VisualSpeaker { +class SpeakerMiranda3255 : public SpeakerMiranda { public: - SpeakerQuinn2435(); - - virtual Common::String getClassName() { return "SpeakerQuinn2435"; } + virtual Common::String getClassName() { return "SpeakerMiranda3255"; } virtual void proc15(); }; -class SpeakerSeeker2435 : public VisualSpeaker { +class SpeakerMiranda3375 : public SpeakerMiranda { public: - SpeakerSeeker2435(); - - virtual Common::String getClassName() { return "SpeakerSeeker2435"; } + virtual Common::String getClassName() { return "SpeakerMiranda3375"; } virtual void proc15(); }; -class SpeakerPharisha2435 : public VisualSpeaker { +class SpeakerMiranda3385 : public SpeakerMiranda { public: - SpeakerPharisha2435(); - - virtual Common::String getClassName() { return "SpeakerPharisha2435"; } + virtual Common::String getClassName() { return "SpeakerMiranda3385"; } virtual void proc15(); }; -class SpeakerQuinn2450 : public VisualSpeaker { +class SpeakerMiranda3400 : public SpeakerMiranda { public: - SpeakerQuinn2450(); - - virtual Common::String getClassName() { return "SpeakerQuinn2450"; } + virtual Common::String getClassName() { return "SpeakerMiranda3400"; } virtual void proc15(); }; -class SpeakerSeeker2450 : public VisualSpeaker { +class SpeakerMiranda3700 : public SpeakerMiranda { public: - SpeakerSeeker2450(); - - virtual Common::String getClassName() { return "SpeakerSeeker2450"; } + virtual Common::String getClassName() { return "SpeakerMiranda3700"; } virtual void proc15(); }; -class SpeakerCaretaker2450 : public VisualSpeaker { -public: - SpeakerCaretaker2450(); +// Classes related to Nej - virtual Common::String getClassName() { return "SpeakerCaretaker2450"; } +class SpeakerNej : public VisualSpeaker { +public: + SpeakerNej(); + virtual Common::String getClassName() { return "SpeakerNej"; } }; -class SpeakerQuinn2500 : public VisualSpeaker { +class SpeakerNej2700 : public SpeakerNej { public: - SpeakerQuinn2500(); - - virtual Common::String getClassName() { return "SpeakerQuinn2500"; } + virtual Common::String getClassName() { return "SpeakerNej2700"; } + virtual void proc15(); }; -class SpeakerSeeker2500 : public VisualSpeaker { +class SpeakerNej2750 : public SpeakerNej { public: - SpeakerSeeker2500(); - - virtual Common::String getClassName() { return "SpeakerSeeker2500"; } + virtual Common::String getClassName() { return "SpeakerNej2750"; } + virtual void proc15(); }; -class SpeakerMiranda2500 : public VisualSpeaker { +class SpeakerNej2800 : public SpeakerNej { public: - SpeakerMiranda2500(); - - virtual Common::String getClassName() { return "SpeakerMiranda2500"; } + virtual Common::String getClassName() { return "SpeakerNej2800"; } + virtual void proc15(); }; -class SpeakerWebbster2500 : public VisualSpeaker { +// Classes related to Pharisha + +class SpeakerPharisha : public VisualSpeaker { public: - SpeakerWebbster2500(); + SpeakerPharisha(); - virtual Common::String getClassName() { return "SpeakerWebbster2500"; } + virtual Common::String getClassName() { return "SpeakerPharisha"; } }; -class SpeakerQuinn2700 : public VisualSpeaker { +class SpeakerPharisha2435 : public SpeakerPharisha { public: - SpeakerQuinn2700(); - - virtual Common::String getClassName() { return "SpeakerQuinn2700"; } + virtual Common::String getClassName() { return "SpeakerPharisha2435"; } virtual void proc15(); }; -class SpeakerNej2700 : public VisualSpeaker { +// Classes related to Private + +class SpeakerPrivate3210 : public VisualSpeaker { public: - SpeakerNej2700(); + SpeakerPrivate3210(); - virtual Common::String getClassName() { return "SpeakerNej2700"; } + virtual Common::String getClassName() { return "SpeakerPrivate3210"; } virtual void proc15(); }; -class SpeakerQuinn2750 : public VisualSpeaker { -public: - SpeakerQuinn2750(); +// Classes related to Quinn - virtual Common::String getClassName() { return "SpeakerQuinn2750"; } - virtual void proc15(); +class SpeakerQuinn : public VisualSpeaker { +public: + SpeakerQuinn(); + virtual Common::String getClassName() { return "SpeakerQuinn"; } }; -class SpeakerNej2750 : public VisualSpeaker { +class SpeakerQuinn300 : public SpeakerQuinn { public: - SpeakerNej2750(); - - virtual Common::String getClassName() { return "SpeakerNej2750"; } + virtual Common::String getClassName() { return "SpeakerQuinn300"; } virtual void proc15(); }; -class SpeakerQuinn2800 : public VisualSpeaker { +class SpeakerQuinn2435 : public SpeakerQuinn { public: - SpeakerQuinn2800(); - - virtual Common::String getClassName() { return "SpeakerQuinn2800"; } + virtual Common::String getClassName() { return "SpeakerQuinn2435"; } virtual void proc15(); }; -class SpeakerNej2800 : public VisualSpeaker { +class SpeakerQuinn2450 : public SpeakerQuinn { public: - SpeakerNej2800(); - - virtual Common::String getClassName() { return "SpeakerNej2800"; } + virtual Common::String getClassName() { return "SpeakerQuinn2450"; } virtual void proc15(); }; -class SpeakerGuard2800 : public VisualSpeaker { +class SpeakerQuinn2700 : public SpeakerQuinn { public: - SpeakerGuard2800(); - - virtual Common::String getClassName() { return "SpeakerGuard2800"; } + virtual Common::String getClassName() { return "SpeakerQuinn2700"; } virtual void proc15(); }; -class SpeakerGuard3100 : public VisualSpeaker { +class SpeakerQuinn2750 : public SpeakerQuinn { public: - SpeakerGuard3100(); - - virtual Common::String getClassName() { return "SpeakerGuard3100"; } + virtual Common::String getClassName() { return "SpeakerQuinn2750"; } + virtual void proc15(); }; -class SpeakerRocko3200 : public VisualSpeaker { +class SpeakerQuinn2800 : public SpeakerQuinn { public: - SpeakerRocko3200(); - - virtual Common::String getClassName() { return "SpeakerRocko3200"; } + virtual Common::String getClassName() { return "SpeakerQuinn2800"; } virtual void proc15(); }; -class SpeakerJocko3200 : public VisualSpeaker { +class SpeakerQuinn3255 : public SpeakerQuinn { public: - SpeakerJocko3200(); - - virtual Common::String getClassName() { return "SpeakerJocko3200"; } + virtual Common::String getClassName() { return "SpeakerQuinn3255"; } virtual void proc15(); }; -class SpeakerSocko3200 : public VisualSpeaker { +class SpeakerQuinn3375 : public SpeakerQuinn { public: - SpeakerSocko3200(); - - virtual Common::String getClassName() { return "SpeakerSocko3200"; } + virtual Common::String getClassName() { return "SpeakerQuinn3375"; } virtual void proc15(); }; -class SpeakerCaptain3210 : public VisualSpeaker { +class SpeakerQuinn3385 : public SpeakerQuinn { public: - SpeakerCaptain3210(); - - virtual Common::String getClassName() { return "SpeakerCaptain3210"; } + virtual Common::String getClassName() { return "SpeakerQuinn3385"; } virtual void proc15(); }; -class SpeakerPrivate3210 : public VisualSpeaker { +class SpeakerQuinn3400 : public SpeakerQuinn { public: - SpeakerPrivate3210(); - - virtual Common::String getClassName() { return "SpeakerPrivate3210"; } + virtual Common::String getClassName() { return "SpeakerQuinn3400"; } virtual void proc15(); }; -class SpeakerRocko3220 : public VisualSpeaker { +class SpeakerQuinn3700 : public SpeakerQuinn { public: - SpeakerRocko3220(); - - virtual Common::String getClassName() { return "SpeakerRocko3220"; } + virtual Common::String getClassName() { return "SpeakerQuinn3700"; } + virtual void setText(const Common::String &msg); virtual void proc15(); }; -class SpeakerJocko3220 : public VisualSpeaker { +// Classes related to QuinnL + +class SpeakerQuinnL : public VisualSpeaker { public: - SpeakerJocko3220(); + SpeakerQuinnL(); - virtual Common::String getClassName() { return "SpeakerJocko3220"; } - virtual void proc15(); + virtual Common::String getClassName() { return "SpeakerQuinnL"; } }; -class SpeakerRocko3230 : public VisualSpeaker { +// Classes related to Ralf + +class SpeakerRalf3245 : public VisualSpeaker { public: - SpeakerRocko3230(); + SpeakerRalf3245(); - virtual Common::String getClassName() { return "SpeakerRocko3230"; } + virtual Common::String getClassName() { return "SpeakerRalf3245"; } virtual void proc15(); }; -class SpeakerJocko3230 : public VisualSpeaker { -public: - SpeakerJocko3230(); +// Classes related to Rocko - virtual Common::String getClassName() { return "SpeakerJocko3230"; } - virtual void proc15(); +class SpeakerRocko : public VisualSpeaker { +public: + SpeakerRocko(); + virtual Common::String getClassName() { return "SpeakerRocko"; } }; -class SpeakerTeal3240 : public VisualSpeaker { +class SpeakerRocko3200 : public SpeakerRocko { public: - SpeakerTeal3240(); - - virtual Common::String getClassName() { return "SpeakerTeal3240"; } + virtual Common::String getClassName() { return "SpeakerRocko3200"; } virtual void proc15(); }; -class SpeakerWebbster3240 : public VisualSpeaker { +class SpeakerRocko3220 : public SpeakerRocko { public: - SpeakerWebbster3240(); - - virtual Common::String getClassName() { return "SpeakerWebbster3240"; } + virtual Common::String getClassName() { return "SpeakerRocko3220"; } virtual void proc15(); }; -class SpeakerRalf3245 : public VisualSpeaker { +class SpeakerRocko3230 : public SpeakerRocko { public: - SpeakerRalf3245(); - - virtual Common::String getClassName() { return "SpeakerRalf3245"; } + virtual Common::String getClassName() { return "SpeakerRocko3230"; } virtual void proc15(); }; -class SpeakerTomko3245 : public VisualSpeaker { -public: - SpeakerTomko3245(); +// Classes related to Seeker - virtual Common::String getClassName() { return "SpeakerTomko3245"; } - virtual void proc15(); +class SpeakerSeeker : public VisualSpeaker { +public: + SpeakerSeeker(); + virtual Common::String getClassName() { return "SpeakerSeeker"; } }; -class SpeakerQuinn3255 : public VisualSpeaker { +class SpeakerSeeker300 : public SpeakerSeeker { public: - SpeakerQuinn3255(); - - virtual Common::String getClassName() { return "SpeakerQuinn3255"; } + virtual Common::String getClassName() { return "SpeakerSeeker300"; } virtual void proc15(); }; -class SpeakerMiranda3255 : public VisualSpeaker { +class SpeakerSeeker2435 : public SpeakerSeeker { public: - SpeakerMiranda3255(); - - virtual Common::String getClassName() { return "SpeakerMiranda3255"; } + virtual Common::String getClassName() { return "SpeakerSeeker2435"; } virtual void proc15(); }; -class SpeakerQuinn3375 : public VisualSpeaker { +class SpeakerSeeker2450 : public SpeakerSeeker { public: - SpeakerQuinn3375(); - - virtual Common::String getClassName() { return "SpeakerQuinn3375"; } + virtual Common::String getClassName() { return "SpeakerSeeker2450"; } virtual void proc15(); }; -class SpeakerSeeker3375 : public VisualSpeaker { +class SpeakerSeeker3375 : public SpeakerSeeker { public: - SpeakerSeeker3375(); - virtual Common::String getClassName() { return "SpeakerSeeker3375"; } virtual void proc15(); }; -class SpeakerMiranda3375 : public VisualSpeaker { +class SpeakerSeeker3385 : public SpeakerSeeker { public: - SpeakerMiranda3375(); - - virtual Common::String getClassName() { return "SpeakerMiranda3375"; } + virtual Common::String getClassName() { return "SpeakerSeeker3385"; } virtual void proc15(); }; -class SpeakerWebbster3375 : public VisualSpeaker { +class SpeakerSeeker3400 : public SpeakerSeeker { public: - SpeakerWebbster3375(); - - virtual Common::String getClassName() { return "SpeakerWebbster3375"; } + virtual Common::String getClassName() { return "SpeakerSeeker3400"; } virtual void proc15(); }; -class SpeakerQuinn3385 : public VisualSpeaker { +class SpeakerSeeker3700 : public SpeakerSeeker { public: - SpeakerQuinn3385(); - - virtual Common::String getClassName() { return "SpeakerQuinn3385"; } + virtual Common::String getClassName() { return "SpeakerSeeker3700"; } + virtual void setText(const Common::String &msg); virtual void proc15(); }; -class SpeakerSeeker3385 : public VisualSpeaker { +// Classes related to SeekerL + +class SpeakerSeekerL : public VisualSpeaker { public: - SpeakerSeeker3385(); + SpeakerSeekerL(); - virtual Common::String getClassName() { return "SpeakerSeeker3385"; } - virtual void proc15(); + virtual Common::String getClassName() { return "SpeakerSeekerL"; } }; -class SpeakerMiranda3385 : public VisualSpeaker { +// Classes related to Socko + +class SpeakerSocko3200 : public VisualSpeaker { public: - SpeakerMiranda3385(); + SpeakerSocko3200(); - virtual Common::String getClassName() { return "SpeakerMiranda3385"; } + virtual Common::String getClassName() { return "SpeakerSocko3200"; } virtual void proc15(); }; -class SpeakerWebbster3385 : public VisualSpeaker { +// Classes related to Soldier + +class SpeakerSoldier300 : public VisualSpeaker { public: - SpeakerWebbster3385(); + SpeakerSoldier300(); - virtual Common::String getClassName() { return "SpeakerWebbster3385"; } + virtual Common::String getClassName() { return "SpeakerSoldier300"; } virtual void proc15(); }; -class SpeakerQuinn3400 : public VisualSpeaker { +// Classes related to Teal + +class SpeakerTeal : public VisualSpeaker { public: - SpeakerQuinn3400(); + SpeakerTeal(); + virtual Common::String getClassName() { return "SpeakerTeal"; } +}; - virtual Common::String getClassName() { return "SpeakerQuinn3400"; } +class SpeakerTeal300 : public SpeakerTeal { +public: + virtual Common::String getClassName() { return "SpeakerTeal300"; } virtual void proc15(); }; -class SpeakerSeeker3400 : public VisualSpeaker { +class SpeakerTeal3240 : public SpeakerTeal { public: - SpeakerSeeker3400(); + virtual Common::String getClassName() { return "SpeakerTeal3240"; } + virtual void proc15(); +}; - virtual Common::String getClassName() { return "SpeakerSeeker3400"; } +class SpeakerTeal3400 : public SpeakerTeal { +public: + virtual Common::String getClassName() { return "SpeakerTeal3400"; } virtual void proc15(); }; -class SpeakerMiranda3400 : public VisualSpeaker { +// Classes related to Tomko + +class SpeakerTomko3245 : public VisualSpeaker { public: - SpeakerMiranda3400(); + SpeakerTomko3245(); - virtual Common::String getClassName() { return "SpeakerMiranda3400"; } + virtual Common::String getClassName() { return "SpeakerTomko3245"; } virtual void proc15(); }; -class SpeakerWebbster3400 : public VisualSpeaker { +// Classes related to Webbster + +class SpeakerWebbster : public VisualSpeaker { public: - SpeakerWebbster3400(); + SpeakerWebbster(int colour); + virtual Common::String getClassName() { return "SpeakerWebbster"; } +}; - virtual Common::String getClassName() { return "SpeakerWebbster3400"; } - virtual void proc15(); +class SpeakerWebbster2500 : public SpeakerWebbster { +public: + SpeakerWebbster2500() : SpeakerWebbster(27) {} + virtual Common::String getClassName() { return "SpeakerWebbster2500"; } }; -class SpeakerTeal3400 : public VisualSpeaker { +class SpeakerWebbster3240 : public SpeakerWebbster { public: - SpeakerTeal3400(); + SpeakerWebbster3240() : SpeakerWebbster(10) {}; - virtual Common::String getClassName() { return "SpeakerTeal3400"; } + virtual Common::String getClassName() { return "SpeakerWebbster3240"; } virtual void proc15(); }; -class SpeakerQuinn3700 : public VisualSpeaker { +class SpeakerWebbster3375 : public SpeakerWebbster { public: - SpeakerQuinn3700(); + SpeakerWebbster3375() : SpeakerWebbster(60) {}; - virtual Common::String getClassName() { return "SpeakerQuinn3700"; } - virtual void setText(const Common::String &msg); + virtual Common::String getClassName() { return "SpeakerWebbster3375"; } virtual void proc15(); }; -class SpeakerSeeker3700 : public VisualSpeaker { +class SpeakerWebbster3385 : public SpeakerWebbster { public: - SpeakerSeeker3700(); + SpeakerWebbster3385() : SpeakerWebbster(60) {}; - virtual Common::String getClassName() { return "SpeakerSeeker3700"; } - virtual void setText(const Common::String &msg); + virtual Common::String getClassName() { return "SpeakerWebbster3385"; } virtual void proc15(); }; -class SpeakerMiranda3700 : public VisualSpeaker { +class SpeakerWebbster3400 : public SpeakerWebbster { public: - SpeakerMiranda3700(); + SpeakerWebbster3400() : SpeakerWebbster(27) {}; - virtual Common::String getClassName() { return "SpeakerMiranda3700"; } + virtual Common::String getClassName() { return "SpeakerWebbster3400"; } virtual void proc15(); }; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 3234c3c1f3747f6eff5c55858c1fe02cf06a56f4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 30 Dec 2011 17:47:04 +0100 Subject: TSAGE: R2R - Implement scene 3395, fix some glitches in scene 3385 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 230 ++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes3.h | 42 +++++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 198 +++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 26 +++ 5 files changed, 493 insertions(+), 5 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 4952cf1831..537b34b4bb 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -221,7 +221,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3385: return new Scene3385(); case 3395: - error("Missing scene %d from group 3", sceneNumber); + return new Scene3395(); case 3400: return new Scene3400(); case 3500: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index db1b9b6c21..61fc6a7796 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2270,11 +2270,12 @@ void Scene3385::Exit1::changeScene() { } void Scene3385::Action1::signal() { + int v = _actionIndex; ++_actionIndex; - - if (_actionIndex == 0) + + if (v == 0) setDelay(1); - else if (_actionIndex == 1) + else if (v == 1) R2_GLOBALS._sound2.play(314); } @@ -2341,7 +2342,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _actor2._moveDiff = Common::Point(3, 2); _actor2.changeZoom(-1); _actor2._effect = 1; - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 3) _actor2.setup(10, _field11B2, 1); else _actor2.setup(30, _field11B2, 1); @@ -2408,6 +2409,227 @@ void Scene3385::signal() { R2_GLOBALS._player.setStrip(3); else R2_GLOBALS._player.setStrip(4); + R2_GLOBALS._player.enableControl(CURSOR_TALK); + break; + default: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } +} + +/*-------------------------------------------------------------------------- + * Scene 3395 - + * + *--------------------------------------------------------------------------*/ +Scene3395::Scene3395() { + _field142E = 0; +} + +void Scene3395::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field142E); +} + +bool Scene3395::Actor1::startAction(CursorType action, Event &event) { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + if (R2_GLOBALS._player._characterIndex == 2) + scene->_stripManager.start(3302, scene); + else + scene->_stripManager.start(3304, scene); + + return true; +} + +bool Scene3395::Actor2::startAction(CursorType action, Event &event) { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + if (R2_GLOBALS._player._characterIndex == 3) + scene->_stripManager.start(3302, scene); + else + scene->_stripManager.start(3301, scene); + + return true; +} + +bool Scene3395::Actor3::startAction(CursorType action, Event &event) { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + scene->_sceneMode = 9999; + scene->_stripManager.start(3303, scene); + + return true; +} + +bool Scene3395::Actor4::startAction(CursorType action, Event &event) { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._sound2.play(314); + + scene->_sceneMode = 3396; + scene->setAction(&scene->_sequenceManager, scene, 3396, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL); + + return true; +} + +void Scene3395::Action1::signal() { + int v = _actionIndex; + ++_actionIndex; + + if (v == 0) + setDelay(2); + else if (v == 1) + R2_GLOBALS._sound2.play(314); +} + +void Scene3395::postInit(SceneObjectList *OwnerList) { + loadScene(3395); + SceneExt::postInit(); + + R2_GLOBALS._sound1.play(313); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + + R2_GLOBALS._player._characterScene[1] = 3395; + R2_GLOBALS._player._characterScene[2] = 3395; + R2_GLOBALS._player._characterScene[3] = 3395; + + if (R2_GLOBALS._sceneManager._previousScene == 3385) + _field142E = 3; + else + _field142E = 4; + + setZoomPercents(51, 40, 200, 137); + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + else + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + + R2_GLOBALS._player.changeZoom(-1); + + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player.setup(20, _field142E, 1); + else if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._player.setup(30, _field142E, 1); + else + R2_GLOBALS._player.setup(10, _field142E, 1); + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 2) { + _actor1._moveRate = 10; + _actor1._moveDiff = Common::Point(3, 2); + } else { + _actor1._moveRate = 7; + _actor1._moveDiff = Common::Point(5, 3); + } + _actor1.changeZoom(-1); + _actor1._effect = 1; + if (R2_GLOBALS._player._characterIndex == 2) + _actor1.setup(10, _field142E, 1); + else + _actor1.setup(20, _field142E, 1); + _actor1.animate(ANIM_MODE_1, NULL); + _actor1.setDetails(3395, -1, -1, -1, 1, (SceneItem *) NULL); + + _actor2.postInit(); + _actor2._moveDiff = Common::Point(3, 2); + _actor2.changeZoom(-1); + _actor2._effect = 1; + if (R2_GLOBALS._player._characterIndex == 3) + _actor2.setup(10, _field142E, 1); + else + _actor2.setup(30, _field142E, 1); + _actor2.animate(ANIM_MODE_1, NULL); + _actor2.setDetails(3395, -1, -1, -1, 1, (SceneItem *) NULL); + + _actor3.postInit(); + _actor3._moveDiff = Common::Point(3, 2); + _actor3.changeZoom(-1); + _actor3._effect = 1; + _actor3.setup(40, _field142E, 1); + _actor3.animate(ANIM_MODE_1, NULL); + _actor3.setDetails(3385, 18, -1, -1, 1, (SceneItem *) NULL); + + _actor4.postInit(); + _actor4.setPosition(Common::Point(159, 50)); + _actor4.fixPriority(40); + _actor4.setDetails(3395, 6, 7, -1, 1, (SceneItem *) NULL); + + if (R2_GLOBALS._sceneManager._previousScene == 3385) { + R2_GLOBALS._player.setPosition(Common::Point(158, 53)); + _actor1.setPosition(Common::Point(164, 51)); + _actor1.fixPriority(48); + _actor2.setPosition(Common::Point(150, 51)); + _actor2.fixPriority(47); + _actor3.setPosition(Common::Point(158, 51)); + _actor3.fixPriority(46); + _sceneMode = 3394; + _actor4.setup(3395, 1, 7); + _actor4.animate(ANIM_MODE_6, this); + setAction(&_action1, &_actor4); + } else { + R2_GLOBALS._player.setPosition(Common::Point(158, 200)); + _actor1.setPosition(Common::Point(191, 255)); + _actor2.setPosition(Common::Point(124, 240)); + _actor3.setPosition(Common::Point(155, 242)); + _actor4.setup(3395, 1, 1); + + R2_GLOBALS._walkRegions.enableRegion(1); + + _sceneMode = 3395; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); + } + + for (int i = 0; i <= 12; i++) { + _itemArray[i].setDetails(i, 3995, 0, -1, -1); + } + + _item1.setDetails(Rect(0, 0, 320, 200), 3395, 3, -1, -1, 1, NULL); +} + +void Scene3395::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3395::signal() { + switch (_sceneMode) { + case 3396: + R2_GLOBALS._sceneManager.changeScene(3385); + break; + case 9999: + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setStrip(3); + else + R2_GLOBALS._player.setStrip(4); + R2_GLOBALS._player.enableControl(CURSOR_TALK); break; default: R2_GLOBALS._player.enableControl(CURSOR_ARROW); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 812ab800cc..4b336b2dde 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -504,6 +504,48 @@ public: virtual void synchronize(Serializer &s); }; +class Scene3395 : public SceneExt { + class Actor1 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor2 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + virtual bool startAction(CursorType action, Event &event); + }; + + class Action1: public Action { + public: + virtual void signal(); + }; + +public: + SpeakerQuinn3395 _quinnSpeaker; + SpeakerSeeker3395 _seekerSpeaker; + SpeakerMiranda3395 _mirandaSpeaker; + SpeakerWebbster3395 _webbsterSpeaker; + NamedHotspot _item1; + NamedHotspot _itemArray[13]; + Actor1 _actor1; + Actor2 _actor2; + Actor3 _actor3; + Actor4 _actor4; + Action1 _action1; + SequenceManager _sequenceManager; + + int _field142E; + + Scene3395(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void synchronize(Serializer &s); +}; + class Scene3400 : public SceneExt { public: SpeakerQuinn3400 _quinnSpeaker; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 7f5cdc1328..ab5868a409 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -547,6 +547,56 @@ void SpeakerMiranda3385::proc15() { } } +void SpeakerMiranda3395::proc15() { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4051, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerMiranda3400::proc15() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; @@ -1173,6 +1223,61 @@ void SpeakerQuinn3385::proc15() { } } +void SpeakerQuinn3395::proc15() { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) + _object2 = &R2_GLOBALS._player; + else if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &scene->_actor1; + else + _object2 = &scene->_actor2; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + if (R2_GLOBALS._player._characterIndex == 2) + _object1.setup(4010, 3, 1); + else + _object1.setup(4010, 5, 1); + + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerQuinn3400::proc15() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; @@ -1647,6 +1752,55 @@ void SpeakerSeeker3385::proc15() { } } +void SpeakerSeeker3395::proc15() { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor1; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 3, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerSeeker3400::proc15() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; @@ -2160,6 +2314,50 @@ void SpeakerWebbster3385::proc15() { } } +void SpeakerWebbster3395::proc15() { + Scene3395 *scene = (Scene3395 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + if (R2_GLOBALS._sceneManager._previousScene == 3385) + R2_GLOBALS._player.setStrip(4); + else + R2_GLOBALS._player.setStrip(3); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + R2_GLOBALS._player.disableControl(CURSOR_TALK); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4110, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerWebbster3400::proc15() { Scene3400 *scene = (Scene3400 *)R2_GLOBALS._sceneManager._scene; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 3020b19431..3a58917c44 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -154,6 +154,12 @@ public: virtual void proc15(); }; +class SpeakerMiranda3395 : public SpeakerMiranda { +public: + virtual Common::String getClassName() { return "SpeakerMiranda3395"; } + virtual void proc15(); +}; + class SpeakerMiranda3400 : public SpeakerMiranda { public: virtual Common::String getClassName() { return "SpeakerMiranda3400"; } @@ -279,6 +285,12 @@ public: virtual void proc15(); }; +class SpeakerQuinn3395 : public SpeakerQuinn { +public: + virtual Common::String getClassName() { return "SpeakerQuinn3395"; } + virtual void proc15(); +}; + class SpeakerQuinn3400 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn3400"; } @@ -375,6 +387,12 @@ public: virtual void proc15(); }; +class SpeakerSeeker3395 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker3395"; } + virtual void proc15(); +}; + class SpeakerSeeker3400 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker3400"; } @@ -491,6 +509,14 @@ public: virtual void proc15(); }; +class SpeakerWebbster3395 : public SpeakerWebbster { +public: + SpeakerWebbster3395() : SpeakerWebbster(60) {}; + + virtual Common::String getClassName() { return "SpeakerWebbster3395"; } + virtual void proc15(); +}; + class SpeakerWebbster3400 : public SpeakerWebbster { public: SpeakerWebbster3400() : SpeakerWebbster(27) {}; -- cgit v1.2.3 From a837bb409a0235e4b459bfbdfb66684c8b5d33e3 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 1 Jan 2012 16:12:07 +1100 Subject: TSAGE: Revert buggy implementation of dirty rects This reverts commit f69dfba21a5d4be8cc60a20a0dd0628717fa5373. --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 6035b37e19..ddb4eae9c4 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -153,7 +153,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } // Execute the specified action -- cgit v1.2.3 From 83acabfdbdf4a44ce94eb068574d9938df301b1f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 1 Jan 2012 16:31:56 +1100 Subject: TSAGE: Do all screen drawing in an intermediate temporary screen surface. This will be the first half of properly handling on screen dirty rects. --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index ddb4eae9c4..5178fe6418 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -153,7 +153,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } // Execute the specified action -- cgit v1.2.3 From 79328a393f9f42b006ab46b7da4a2919e710b539 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 3 Jan 2012 13:34:10 +0100 Subject: TSAGE: R2R - Preliminar implementation of scene 3600 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 696 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 69 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 201 +++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 30 + 5 files changed, 998 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 537b34b4bb..0d8e5fda88 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -225,8 +225,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3400: return new Scene3400(); case 3500: - case 3600: error("Missing scene %d from group 3", sceneNumber); + case 3600: + return new Scene3600(); case 3700: // Cutscene - Teleport outside return new Scene3700(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 61fc6a7796..a819f2708a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2884,6 +2884,702 @@ void Scene3400::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3600 - + * + *--------------------------------------------------------------------------*/ +Scene3600::Scene3600() { + _field2548 = 0; + _field254A = 0; + _field254C = 0; + _field254E = 0; + _field2550 = false; +} +void Scene3600::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field2548); + s.syncAsSint16LE(_field254A); + s.syncAsSint16LE(_field254C); + s.syncAsSint16LE(_field254E); + s.syncAsSint16LE(_field2550); +} + +Scene3600::Action3600::Action3600() { + _field1E = 0; + _field20 = 0; +} + +void Scene3600::Action3600::synchronize(Serializer &s) { + Action::synchronize(s); + + s.syncAsSint16LE(_field1E); + s.syncAsSint16LE(_field20); +} + +void Scene3600::Action3600::signal() { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: + ++_actionIndex; + setDelay(60); + break; + case 1: + if (_field1E == 0) { + _field1E = 1; + scene->_actor2.setAction(NULL); + R2_GLOBALS._sound2.play(330, NULL, 0); + R2_GLOBALS._sound2.fade(127, 5, 10, false, NULL); + } + setDelay(1); + warning("TODO: Palette fader using parameter 2 = 256"); + R2_GLOBALS._scenePalette.fade((const byte *)&scene->_palette1._palette, true, _field20); + if (_field20 > 0) + _field20 -= 2; + break; + case 2: + R2_GLOBALS._sound2.stop(); + ++_actionIndex; + setDelay(3); + break; + case 3: + R2_GLOBALS._sound2.play(330, this, 0); + R2_GLOBALS._sound2.fade(127, 5, 10, false, NULL); + _actionIndex = 1; + break; + default: + break; + } +} + +void Scene3600::Action2::signal() { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 3621: + R2_GLOBALS._events.proc1(); + R2_GLOBALS._player.enableControl(); + _actionIndex = 3619; + scene->_sequenceManager1._action = NULL; + warning("CHECKME: use of scene->_sequenceManager1._action"); + // No break on purpose + case 3619: { + ++_actionIndex; + scene->_actor13.setup(3127, 2, 1); + scene->_actor13.animate(ANIM_MODE_1, NULL); + Common::Point pt(226, 152); + warning("TODO: Fix use of SceneActor::_field8A and SceneActor::_field8C"); + NpcMover *mover = new NpcMover(); + scene->_actor13.addMover(mover, &scene->_actor13._position, scene); + } + break; + default: + _actionIndex = 3619; + setDelay(360); + break; + } +} + +bool Scene3600::Item5::startAction(CursorType action, Event &event) { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + if ((action != CURSOR_USE) || (scene->_action1._field1E == 0)) + return SceneItem::startAction(action, event); + + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(7); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 3624; + scene->_actor10.setStrip2(-1); + scene->_actor11.setStrip2(-1); + scene->_actor12.setStrip2(-1); + scene->_actor4.setStrip2(-1); + + if (R2_GLOBALS._player._characterIndex == 2) + R2_GLOBALS._player.setAction(&scene->_sequenceManager3, scene, 3611, &R2_GLOBALS._player, NULL); + else if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._player.setAction(&scene->_sequenceManager4, scene, 3612, &R2_GLOBALS._player, NULL); + else + R2_GLOBALS._player.setAction(&scene->_sequenceManager2, scene, 3610, &R2_GLOBALS._player, NULL); + + return true; +} + +bool Scene3600::Actor13::startAction(CursorType action, Event &event) { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + switch(action) { + case CURSOR_TALK: + if (!_action) + return SceneActor::startAction(action, event); + + scene->_protectorSpeaker._displayMode = 1; + if (!R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + if (!scene->_actor10._mover) + scene->_actor10.addMover(NULL); + if (!scene->_actor11._mover) + scene->_actor11.addMover(NULL); + if (!scene->_actor12._mover) + scene->_actor12.addMover(NULL); + if (!scene->_actor4._mover) + scene->_actor4.addMover(NULL); + + setup(3127, 2, 1); + scene->_sceneMode = 3327; + scene->_stripManager.start(3327, scene); + + return true; + case R2_7: + // No break on purpose + case R2_44: + if (action == R2_7) + R2_GLOBALS._sound3.play(43); + else + R2_GLOBALS._sound3.play(99); + if (_state != 0) { + _state = 1; + setup(3128, 1, 1); + addMover(NULL); + } + scene->_action2.setActionIndex(3621); + + if (!_action) + setAction(&scene->_action2, scene, NULL); + + animate(ANIM_MODE_5, &scene->_action2); + R2_GLOBALS._player.disableControl(); + return true; + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +void Scene3600::postInit(SceneObjectList *OwnerList) { + if (R2_GLOBALS._sceneManager._previousScene == 3600) { + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + R2_GLOBALS._v558B6.set(60, 0, 260, 200); + } else { + R2_GLOBALS._scrollFollower = &_actor2; + g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); + R2_GLOBALS._v558B6.set(25, 0, 260, 200); + } + + loadScene(3600); + SceneExt::postInit(); + _field254C = 0; + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_tealSpeaker); + _stripManager.addSpeaker(&_protectorSpeaker); + + setZoomPercents(142, 80, 167, 105); + R2_GLOBALS._player._characterScene[1] = 3600; + R2_GLOBALS._player._characterScene[2] = 3600; + R2_GLOBALS._player._characterScene[3] = 3600; + + _item2.setDetails(33, 3600, 6, -1, -1); + _item3.setDetails(Rect(3, 3, 22, 45), 3600, 9, -1, -1, 1, NULL); + _item4.setDetails(Rect(449, 3, 475, 45), 3600, 9, -1, -1, 1, NULL); + + _actor10.postInit(); + _actor10._moveDiff = Common::Point(3, 2); + _actor10.changeZoom(-1); + _actor10._effect = 1; + + if (R2_GLOBALS._player._characterIndex != 1) + _actor10.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); + + _actor11.postInit(); + _actor11._numFrames = 7; + _actor11._moveDiff = Common::Point(5, 3); + _actor11.changeZoom(-1); + _actor11._effect = 1; + + if (R2_GLOBALS._player._characterIndex != 2) + _actor11.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); + + _actor12.postInit(); + _actor12._moveDiff = Common::Point(3, 2); + _actor12.changeZoom(-1); + _actor12._effect = 1; + + if (R2_GLOBALS._player._characterIndex != 3) + _actor12.setDetails(9003, 1, -1, -1, 1, (SceneItem *) NULL); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _actor4.postInit(); + _actor4._numFrames = 7; + _actor4._moveDiff = Common::Point(5, 3); + _actor4.changeZoom(-1); + _actor4._effect = 1; + _actor4.setDetails(3600, 27, -1, -1, 1, (SceneItem *) NULL); + + _actor5.postInit(); + _actor5._numFrames = 7; + _actor5._moveDiff = Common::Point(3, 2); + _actor5.changeZoom(-1); + _actor5._effect = 1; + _actor5.setDetails(3600, 12, -1, -1, 1, (SceneItem *) NULL); + + _palette1.loadPalette(0); + _palette1.loadPalette(3601); + + if (R2_GLOBALS._sceneManager._previousScene == 3600) { + _item5._sceneRegionId = 200; + _item5.setDetails(3600, 30, -1, -1, 5, &_actor4); + _field254A = 1; + _field2548 = 1; + + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._walkRegions.enableRegion(14); + R2_GLOBALS._walkRegions.enableRegion(15); + R2_GLOBALS._walkRegions.enableRegion(16); + + _actor10.setup(10, 5, 11); + _actor10.animate(ANIM_MODE_1, NULL); + + _actor11.setup(20, 5, 11); + _actor11.animate(ANIM_MODE_1, NULL); + + _actor12.setup(30, 5, 11); + _actor12.animate(ANIM_MODE_1, NULL); + + if (R2_GLOBALS._player._characterIndex == 2) { + _actor10.setPosition(Common::Point(76, 148)); + _actor11.setPosition(Common::Point(134, 148)); + _actor12.setPosition(Common::Point(100, 148)); + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + R2_GLOBALS._player.setup(20, _actor11._strip, 1); + R2_GLOBALS._player.setPosition(_actor11._position); + _actor11.hide(); + } else if (R2_GLOBALS._player._characterIndex == 3) { + _actor10.setPosition(Common::Point(110, 148)); + _actor11.setPosition(Common::Point(76, 148)); + _actor12.setPosition(Common::Point(134, 148)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.setup(30, _actor12._strip, 1); + R2_GLOBALS._player.setPosition(_actor12._position); + _actor12.hide(); + } else { + _actor10.setPosition(Common::Point(134, 148)); + _actor11.setPosition(Common::Point(76, 148)); + _actor12.setPosition(Common::Point(110, 148)); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.setup(10, _actor10._strip, 1); + R2_GLOBALS._player.setPosition(_actor10._position); + _actor10.hide(); + } + _actor4.setPosition(Common::Point(47, 149)); + _actor4.setup(40, 1, 11); + _actor4.animate(ANIM_MODE_1, NULL); + + _actor5.setPosition(Common::Point(367, 148)); + _actor5.setup(3601, 7, 5); + + if (!R2_GLOBALS.getFlag(71)) { + _actor13.postInit(); + _actor13._state = 0; + warning("TODO: Fix use of SceneActor::_field8A and SceneActor::_field8C in postInit()"); + _actor13._moveDiff = Common::Point(3, 2); + _actor13.setPosition(Common::Point(284, 152)); + _actor13.setup(3127, 2, 1); + _actor13.changeZoom(-1); + _actor13.setDetails(3600, 15, -1, 17, 1, (SceneItem *) NULL); + } + + R2_GLOBALS._sound2.play(330); + _actor3.postInit(); + _actor3.setPosition(Common::Point(84, 156)); + _actor3.fixPriority(158); + _actor3.setup(3601, 5, 1); + _actor3.animate(ANIM_MODE_2, NULL); + + _action1._field1E = 1; + _action1._field20 = 0; + _action1.setActionIndex(1); + + _actor3.setAction(&_action1); + _sceneMode = 3623; + + g_globals->_events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } else { + _field254A = 0; + _field2548 = 0; + + R2_GLOBALS._walkRegions.enableRegion(17); + R2_GLOBALS._walkRegions.enableRegion(18); + + _actor10.setPosition(Common::Point(393, 148)); + _actor11.setPosition(Common::Point(364, 153)); + _actor12.setPosition(Common::Point(413, 164)); + + R2_GLOBALS._player.hide(); + + _actor4.setPosition(Common::Point(373, 164)); + + _actor5.setup(3403, 8, 11); + _actor5.setPosition(Common::Point(403, 155)); + + _actor12.setup(3403, 7, 1); + + _actor13.setPosition(Common::Point(405, 155)); + + _actor2.postInit(); + _actor2.setup(3600, 2, 1); + _actor2.setPosition(Common::Point(403, 161)); + _actor2.fixPriority(149); + _actor2.changeZoom(-1); + + _action1._field1E = 0; + _action1._field20 = 90; + + _sceneMode = 3600; + setAction(&_sequenceManager1, this, 3600, &_actor11, &_actor10, &_actor12, &_actor4, &_actor5, &_actor2, NULL); + _field254E = 0; + } + _field254E = 0; + _field2550 = R2_GLOBALS.getFlag(71); + + R2_GLOBALS._sound1.play(326); + _item1.setDetails(Rect(0, 0, 480, 200), 3600, 0, -1, -1, 1, NULL); +} + +void Scene3600::remove() { + _actor3.animate(ANIM_MODE_NONE, NULL); + _actor3.setAction(NULL); + R2_GLOBALS._sound2.fadeOut2(NULL); + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + SceneExt::remove(); +} + +void Scene3600::signal() { + switch (_sceneMode) { + case 3320: + warning("STUB: sub_1D227()"); + R2_GLOBALS._walkRegions.enableRegion(14); + R2_GLOBALS._scrollFollower = &_actor11; + _tealSpeaker._object1.hide(); + _actor5.show(); + _actor5.setStrip(2); + if (R2_GLOBALS._player._characterIndex == 2) + _sceneMode = 3602; + else if (R2_GLOBALS._player._characterIndex == 3) + _sceneMode = 3603; + else + _sceneMode = 3601; + setAction(&_sequenceManager1, this, _sceneMode, &_actor11, &_actor10, &_actor12, &_actor4, &_actor5, NULL); + break; + case 3321: + warning("STUB: sub_1D227()"); + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + _tealSpeaker.proc16(); + _actor5.show(); + _actor5.setStrip(1); + _actor3.postInit(); + _sceneMode = 3604; + setAction(&_sequenceManager1, this, _sceneMode, &_actor5, &_actor3, &_actor10, &_actor11, &_actor12, &_actor4, NULL); + break; + case 3322: + warning("STUB: sub_1D227()"); + _quinnSpeaker.proc16(); + _quinnSpeaker._displayMode = 1; + _tealSpeaker.proc16(); + _tealSpeaker._displayMode = 7; + R2_GLOBALS._scrollFollower = &_actor5; + _sceneMode = 3605; + setAction(&_sequenceManager1, this, _sceneMode, &_actor5, &_actor13, &_actor2, NULL); + break; + case 3323: + if (_field254A == 0) + _field254A = 1; + else { + warning("STUB: sub_1D227()"); + _protectorSpeaker.proc16(); + _actor13.show(); + _actor13.setup(3258, 6, 1); + _sceneMode = 3607; + _actor13.setAction(&_sequenceManager1, this, _sceneMode, &_actor13, NULL); + R2_GLOBALS._v558C2 = 1; + _protectorSpeaker.proc16(); + _protectorSpeaker._displayMode = 1; + _quinnSpeaker._displayMode = 1; + _actor13.show(); + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + R2_GLOBALS._walkRegions.disableRegion(17); + R2_GLOBALS._walkRegions.disableRegion(18); + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._walkRegions.enableRegion(14); + R2_GLOBALS._walkRegions.enableRegion(15); + R2_GLOBALS._walkRegions.enableRegion(16); + _actor13.setAction(&_action1); + } + break; + case 3324: + // No break on purpose + case 3607: + g_globals->_events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + _actor13.fixPriority(-1); + _sceneMode = 3623; + _field2548 = 1; + break; + case 3327: + g_globals->_events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + _sceneMode = 3623; + break; + case 3450: + R2_GLOBALS._sound1.stop(); + _actor1.hide(); + _actor6.hide(); + g_globals->gfxManager()._bounds.moveTo(Common::Point(40, 0)); + setZoomPercents(142, 80, 167, 105); + loadScene(3600); + R2_GLOBALS._uiElements.show(); + _item5._sceneRegionId = 200; + _item5.setDetails(3600, 30, -1, -1, 5, &_actor4); + + _actor3.show(); + _actor10.show(); + _actor11.show(); + _actor12.show(); + _actor4.show(); + _actor5.show(); + + _actor5.setPosition(Common::Point(298, 151)); + + _actor13.postInit(); + _actor13._state = 0; + warning("_actor13._field8A = 226"); + warning("_actor13._field8C = 152"); + _actor13._moveDiff = Common::Point(5, 3); + _actor13.setup(3403, 7, 1); + _actor13.setPosition(Common::Point(405, 155)); + _actor13.changeZoom(-1); + _actor13.addMover(NULL); + _actor13.animate(ANIM_MODE_NONE); + _actor13.hide(); + _actor13.setDetails(3600, 15, -1, 17, 5, &_item5); + + _actor2.setup(3600, 2, 1); + _actor2.setPosition(Common::Point(403, 161)); + _actor2.fixPriority(149); + _actor2.changeZoom(-1); + _actor2.show(); + + _quinnSpeaker._displayMode = 2; + _tealSpeaker._displayMode = 2; + + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + R2_GLOBALS._player.setup(20, _actor11._strip, 1); + R2_GLOBALS._player.setPosition(_actor11._position); + _actor11.hide(); + } else if (R2_GLOBALS._player._characterIndex == 3) { + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.setup(30, _actor12._strip, 1); + R2_GLOBALS._player.setPosition(_actor12._position); + _actor12.hide(); + } else { + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + R2_GLOBALS._player.setup(10, _actor10._strip, 1); + R2_GLOBALS._player.setPosition(_actor10._position); + _actor10.hide(); + } + R2_GLOBALS._player.show(); + R2_GLOBALS._sound1.play(326); + _sceneMode = 3322; + _stripManager.start(3322, this); + R2_GLOBALS._sound2.play(329); + break; + case 3600: + _sceneMode = 3320; + _stripManager.start(3320, this); + break; + case 3601: + // No break on purpose + case 3602: + // No break on purpose + case 3603: + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._v558B6.set(60, 0, 260, 200); + _tealSpeaker._displayMode = 1; + _sceneMode = 3321; + _stripManager.start(3321, this); + break; + case 3604: + R2_GLOBALS._sound2.fadeOut2(NULL); + R2_GLOBALS._sound1.stop(); + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(7); + + _actor2.hide(); + _actor3.hide(); + R2_GLOBALS._player.hide(); + _actor10.hide(); + _actor11.hide(); + _actor12.hide(); + _actor4.hide(); + _actor5.hide(); + + g_globals->gfxManager()._bounds.moveTo(Common::Point(60, 0)); + setZoomPercents(51, 46, 180, 200); + + loadScene(3400); + R2_GLOBALS._uiElements.show(); + _actor1.postInit(); + + _actor2.setup(3403, 1, 1); + _actor2.setPosition(Common::Point(190, 103)); + _actor2.fixPriority(89); + _actor2.show(); + + _actor6.postInit(); + _actor6.setup(3400, 1, 6); + _actor6.setPosition(Common::Point(236, 51)); + _actor6.fixPriority(51); + R2_GLOBALS._scrollFollower = &_actor6; + + R2_GLOBALS._sound1.play(323); + _sceneMode = 3450; + setAction(&_sequenceManager1, this, 3450, &_actor1, &_actor6, NULL); + break; + case 3605: + _actor13.setup(3258, 4, 1); + _actor13.setAction(&_sequenceManager1, this, 3606, &_actor5, &_actor13, &_actor2, NULL); + _sceneMode = 3323; + _stripManager.start(3323, this); + + break; + case 3620: + // No break on purpose + case 3623: + if ((_actor13._position.x == 226) && (_actor13._position.y == 152) && (_action1._field1E != 0) && (_actor13._visage == 3127) && (!R2_GLOBALS.getFlag(71))) { + R2_GLOBALS._sound2.stop(); + R2_GLOBALS._sound2.play(331); + R2_GLOBALS.setFlag(71); + _sceneMode = 3626; + setAction(&_sequenceManager1, this, 3626, &_actor13, NULL); + } + break; + case 3624: + R2_GLOBALS._player.disableControl(); + if ((_field254E != 0) && (_actor10._position.x == 229) && (_actor10._position.y == 154) && (_actor11._position.x == 181) && (_actor11._position.y == 154) && (_actor12._position.x == 207) && (_actor12._position.y == 154) && (_actor4._position.x == 155) && (_actor4._position.y == 154)) { + R2_GLOBALS._sound2.stop(); + R2_GLOBALS._sound2.play(331); + _sceneMode = 3625; + setAction(&_sequenceManager1, this, 3625, &_actor10, &_actor11, &_actor12, &_actor4, NULL); + } + break; + case 3625: + R2_GLOBALS._sound2.stop(); + R2_GLOBALS._sceneManager.changeScene(3700); + break; + case 3626: + _actor13.setPosition(Common::Point(0, 0)); + _action1.setActionIndex(2); + if (R2_GLOBALS._events.getCursor() > R2_LAST_INVENT) { + R2_GLOBALS._events.setCursor(CURSOR_USE); + R2_GLOBALS._player.enableControl(CURSOR_USE); + } else { + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._sound2.stop(); + _sceneMode = 3623; + break; + default: + break; + } +} + +void Scene3600::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_ARROW) && (event.mousePos.x > 237) && (!R2_GLOBALS.getFlag(71))) { + SceneItem::display(3600, 17, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7 -999); + event.handled = true; + } + Scene::process(event); +} + +void Scene3600::dispatch() { + if ((R2_GLOBALS._player.getRegionIndex() == 200) && (_action1._field1E != 0) && (_field254E == 0)){ + R2_GLOBALS._sound2.fadeOut2(NULL); + if (_actor13._mover) + _actor13.addMover(NULL); + if (R2_GLOBALS._player._action) + R2_GLOBALS._player.setAction(NULL); + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + + _field254C = 0; + _field254E = 1; + + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(7); + R2_GLOBALS._player.disableControl(); + + _sceneMode = 3624; + + _actor10.setStrip(-1); + _actor11.setStrip(-1); + _actor12.setStrip(-1); + _actor4.setStrip(-1); + + R2_GLOBALS._player.hide(); + + if (R2_GLOBALS._player._characterIndex == 2) { + _actor11.setPosition(R2_GLOBALS._player._position); + _actor11.show(); + } else if (R2_GLOBALS._player._characterIndex == 3) { + _actor12.setPosition(R2_GLOBALS._player._position); + _actor12.show(); + } else { + _actor10.setPosition(R2_GLOBALS._player._position); + _actor10.show(); + } + _actor10.setAction(&_sequenceManager2, this, 3610, &_actor10, NULL); + _actor11.setAction(&_sequenceManager3, this, 3611, &_actor11, NULL); + _actor12.setAction(&_sequenceManager4, this, 3612, &_actor12, NULL); + _actor4.setAction(&_sequenceManager1, this, 3613, &_actor4, NULL); + } + + if ((_actor13.getRegionIndex() == 200) && (_action1._field1E != 0) && (_field254E == 0)){ + R2_GLOBALS._sound2.fadeOut2(NULL); + _sceneMode = 3620; + _field2550 = 1; + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + if (_actor10._mover) + _actor10.addMover(NULL); + if (_actor11._mover) + _actor11.addMover(NULL); + if (_actor12._mover) + _actor12.addMover(NULL); + if (_actor4._mover) + _actor4.addMover(NULL); + } + Scene::dispatch(); +} + /*-------------------------------------------------------------------------- * Scene 3700 - Cutscene - Teleport outside * diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 4b336b2dde..cd8ebc87e4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -571,6 +571,75 @@ public: virtual void synchronize(Serializer &s); }; +class Scene3600 : public SceneExt { + class Action3600: public ActionExt { + public: + int _field1E, _field20; + + Action3600(); + virtual void synchronize(Serializer &s); + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; + + class Item5 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor13 : public SceneActorExt { + virtual bool startAction(CursorType action, Event &event); + }; +public: + Action3600 _action1; + Action2 _action2; + SpeakerQuinn3600 _quinnSpeaker; + SpeakerSeeker3600 _seekerSpeaker; + SpeakerMiranda3600 _mirandaSpeaker; + SpeakerTeal3600 _tealSpeaker; + VisualSpeaker _protectorSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + Item5 _item5; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SceneActor _actor10; + SceneActor _actor11; + SceneActor _actor12; + Actor13 _actor13; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + SequenceManager _sequenceManager3; + SequenceManager _sequenceManager4; + ScenePalette _palette1; + + int _field2548; + int _field254A; + int _field254C; + int _field254E; + bool _field2550; + + Scene3600(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + class Scene3700 : public SceneExt { public: SpeakerQuinn3700 _quinnSpeaker; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index ab5868a409..b6fed884ca 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -641,6 +641,52 @@ void SpeakerMiranda3400::proc15() { } } +void SpeakerMiranda3600::proc15() { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 3) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor12; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + + _object1.setPosition(_object2->_position); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4051, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4050, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerMiranda3700::proc15() { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; @@ -1327,6 +1373,54 @@ void SpeakerQuinn3400::proc15() { } } +void SpeakerQuinn3600::proc15() { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 1) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor10; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4021, 7, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4010, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4012, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerQuinn3700::setText(const Common::String &msg) { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; @@ -1860,6 +1954,53 @@ void SpeakerSeeker3400::proc15() { } } +void SpeakerSeeker3600::proc15() { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) + _object2 = &R2_GLOBALS._player; + else + _object2 = &scene->_actor11; + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + + _object1.setPosition(_object2->_position); + + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4031, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4030, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerSeeker3700::setText(const Common::String &msg) { Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene; @@ -2031,6 +2172,10 @@ SpeakerTeal::SpeakerTeal(): VisualSpeaker() { _numFrames = 0; } +SpeakerTealMode7::SpeakerTealMode7(): SpeakerTeal() { + _displayMode = 7; +} + void SpeakerTeal300::proc15() { int v = _fieldF6; @@ -2135,6 +2280,62 @@ void SpeakerTeal3400::proc15() { } } +void SpeakerTeal3600::proc15() { + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_actor5; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + _object1.setPosition(_object2->_position); + + if (scene ->_sceneMode == 3323) { + _object1.hide(); + _object2->show(); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 7, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 4: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4107, 3, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + //---------------------------------------------------------------------------- // Classes related to TOMKO //---------------------------------------------------------------------------- diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 3a58917c44..a4c93a131c 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -166,6 +166,12 @@ public: virtual void proc15(); }; +class SpeakerMiranda3600 : public SpeakerMiranda { +public: + virtual Common::String getClassName() { return "SpeakerMiranda3600"; } + virtual void proc15(); +}; + class SpeakerMiranda3700 : public SpeakerMiranda { public: virtual Common::String getClassName() { return "SpeakerMiranda3700"; } @@ -297,6 +303,12 @@ public: virtual void proc15(); }; +class SpeakerQuinn3600 : public SpeakerQuinn { +public: + virtual Common::String getClassName() { return "SpeakerQuinn3600"; } + virtual void proc15(); +}; + class SpeakerQuinn3700 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn3700"; } @@ -399,6 +411,12 @@ public: virtual void proc15(); }; +class SpeakerSeeker3600 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker3600"; } + virtual void proc15(); +}; + class SpeakerSeeker3700 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker3700"; } @@ -443,6 +461,12 @@ public: virtual Common::String getClassName() { return "SpeakerTeal"; } }; +class SpeakerTealMode7 : public SpeakerTeal { +public: + SpeakerTealMode7(); + virtual Common::String getClassName() { return "SpeakerTealMode7"; } +}; + class SpeakerTeal300 : public SpeakerTeal { public: virtual Common::String getClassName() { return "SpeakerTeal300"; } @@ -461,6 +485,12 @@ public: virtual void proc15(); }; +class SpeakerTeal3600 : public SpeakerTealMode7 { +public: + virtual Common::String getClassName() { return "SpeakerTeal3600"; } + virtual void proc15(); +}; + // Classes related to Tomko class SpeakerTomko3245 : public VisualSpeaker { -- cgit v1.2.3 From 44b3120b81526f214818c4cdbed83a7260a1d60b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 3 Jan 2012 15:39:16 +0100 Subject: TSAGE: R2R - Add missing custom VisualSpeaker in scene 3600 --- engines/tsage/ringworld2/ringworld2_scenes3.h | 2 +- engines/tsage/ringworld2/ringworld2_speakers.cpp | 61 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 10 ++++ 3 files changed, 72 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index cd8ebc87e4..163008739f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -600,7 +600,7 @@ public: SpeakerSeeker3600 _seekerSpeaker; SpeakerMiranda3600 _mirandaSpeaker; SpeakerTeal3600 _tealSpeaker; - VisualSpeaker _protectorSpeaker; + SpeakerProtector3600 _protectorSpeaker; NamedHotspot _item1; NamedHotspot _item2; NamedHotspot _item3; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index b6fed884ca..26ed818819 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -922,6 +922,67 @@ void SpeakerPrivate3210::proc15() { } } +//---------------------------------------------------------------------------- +// Classes related to PROTECTOR +//---------------------------------------------------------------------------- + +SpeakerProtector3600::SpeakerProtector3600() { + _speakerName = "Protector"; + _color1 = 170; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 7; + _numFrames = 0; +} + +void SpeakerProtector3600::proc15() { + int v = _fieldF6; + Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor13; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + _object1._effect = 1; + _object1.changeZoom(-1); + + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + _object1.setPosition(_object2->_position); + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + if (scene->_sceneMode != 3324) { + _object1.setup(4125, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } else { + _object1.setup(3258, 6, 1); + _object1.animate(ANIM_MODE_2, NULL); + _object1.hide(); + _object2->setup(3258, 6, 1); + _object2->show(); + } + break; + default: + signal(); + break; + } +} + //---------------------------------------------------------------------------- // Classes related to QUINN //---------------------------------------------------------------------------- diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index a4c93a131c..cbd440e1a9 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -229,6 +229,16 @@ public: virtual void proc15(); }; +// Classes related to Protector + +class SpeakerProtector3600 : public VisualSpeaker { +public: + SpeakerProtector3600(); + + virtual Common::String getClassName() { return "SpeakerProtector3600"; } + virtual void proc15(); +}; + // Classes related to Quinn class SpeakerQuinn : public VisualSpeaker { -- cgit v1.2.3 From bda4e9ba9eed4d440661a321f527389d4d78bda7 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 3 Jan 2012 16:04:10 +0100 Subject: TSAGE: Add _field8A to SceneObject, use it in R2R scene 3600 --- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index a819f2708a..31723c658b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2961,17 +2961,14 @@ void Scene3600::Action2::signal() { R2_GLOBALS._events.proc1(); R2_GLOBALS._player.enableControl(); _actionIndex = 3619; - scene->_sequenceManager1._action = NULL; - warning("CHECKME: use of scene->_sequenceManager1._action"); + scene->_actor13._state = 0; // No break on purpose case 3619: { ++_actionIndex; scene->_actor13.setup(3127, 2, 1); scene->_actor13.animate(ANIM_MODE_1, NULL); - Common::Point pt(226, 152); - warning("TODO: Fix use of SceneActor::_field8A and SceneActor::_field8C"); NpcMover *mover = new NpcMover(); - scene->_actor13.addMover(mover, &scene->_actor13._position, scene); + scene->_actor13.addMover(mover, &scene->_actor13._field8A, scene); } break; default: @@ -3193,7 +3190,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { if (!R2_GLOBALS.getFlag(71)) { _actor13.postInit(); _actor13._state = 0; - warning("TODO: Fix use of SceneActor::_field8A and SceneActor::_field8C in postInit()"); + _actor13._field8A = Common::Point(226, 152); _actor13._moveDiff = Common::Point(3, 2); _actor13.setPosition(Common::Point(284, 152)); _actor13.setup(3127, 2, 1); @@ -3367,8 +3364,7 @@ void Scene3600::signal() { _actor13.postInit(); _actor13._state = 0; - warning("_actor13._field8A = 226"); - warning("_actor13._field8C = 152"); + _actor13._field8A = Common::Point(226, 152); _actor13._moveDiff = Common::Point(5, 3); _actor13.setup(3403, 7, 1); _actor13.setPosition(Common::Point(405, 155)); -- cgit v1.2.3 From 0d3287671e3132d3d24ff2f87295a100b731c849 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 4 Jan 2012 21:52:21 +1100 Subject: TSAGE: Implemented the changes needed for R2R SceneActor::dispatch --- engines/tsage/ringworld2/ringworld2_logic.cpp | 10 ++-------- engines/tsage/ringworld2/ringworld2_logic.h | 4 ---- 2 files changed, 2 insertions(+), 12 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0d8e5fda88..6c15e987e6 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -897,19 +897,13 @@ bool NamedHotspot::startAction(CursorType action, Event &event) { } } +/*--------------------------------------------------------------------------*/ + void SceneActor::postInit(SceneObjectList *OwnerList) { _lookLineNum = _talkLineNum = _useLineNum = -1; SceneObject::postInit(); } -void SceneActor::synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsSint16LE(_resNum); - s.syncAsSint16LE(_lookLineNum); - s.syncAsSint16LE(_talkLineNum); - s.syncAsSint16LE(_useLineNum); -} - bool SceneActor::startAction(CursorType action, Event &event) { bool handled = true; diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 2d7a81cd2f..535072f0b5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -253,11 +253,7 @@ public: class SceneActor: public SceneObject { public: - int _resNum; - int _lookLineNum, _talkLineNum, _useLineNum; - virtual Common::String getClassName() { return "SceneActor"; } - virtual void synchronize(Serializer &s); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual bool startAction(CursorType action, Event &event); }; -- cgit v1.2.3 From a9fa9e14cdf27c38352923235ae114004ea650dc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 4 Jan 2012 15:04:55 +0100 Subject: TSAGE: R2R - Implement scene 3800. sub1B007() is still stubbed as _field312 usage is conflicting with IDB structure --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_logic.h | 1 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 423 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 46 +++ 4 files changed, 473 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 6c15e987e6..1f046d1bff 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -232,6 +232,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Teleport outside return new Scene3700(); case 3800: + return new Scene3800(); case 3900: error("Missing scene %d from group 3", sceneNumber); default: @@ -262,6 +263,8 @@ SceneExt::SceneExt(): Scene() { _stripManager._onBegin = SceneExt::startStrip; _stripManager._onEnd = SceneExt::endStrip; + for (int i = 0; i < 44; i++) + _field312[i] = 0; _field372 = _field37A = 0; _savedPlayerEnabled = false; _savedUiEnabled = false; diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 535072f0b5..4805de48bb 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -79,6 +79,7 @@ private: static void startStrip(); static void endStrip(); public: + byte _field312[44]; int _field372; bool _savedPlayerEnabled; bool _savedUiEnabled; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 31723c658b..a8deb88829 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -3651,5 +3651,428 @@ void Scene3700::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3800 - + * + *--------------------------------------------------------------------------*/ +Scene3800::Scene3800() { + _field412 = 0; +} +void Scene3800::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + +void Scene3800::Exit1::changeScene() { + Scene3800 *scene = (Scene3800 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_field412 = 1; + + if (R2_GLOBALS.getFlag(46)) { + if (scene->_field412 == R2_GLOBALS._v566A9) { + R2_GLOBALS._v566AA = 3; + if (R2_GLOBALS._v56A93 + 1 == 0) { + R2_GLOBALS._v566A8--; + R2_GLOBALS._v566A9 = 0; + } else { + R2_GLOBALS._v566A9 = R2_GLOBALS._v566AB[R2_GLOBALS._v56A93]; + R2_GLOBALS._v56A93--; + } + } else { + ++R2_GLOBALS._v56A93; + if (R2_GLOBALS._v56A93 > 999) + R2_GLOBALS._v56A93 = 999; + R2_GLOBALS._v566AB[R2_GLOBALS._v56A93] = R2_GLOBALS._v566A9; + R2_GLOBALS._v566A9 = 3; + } + } + + if (R2_GLOBALS._v566A8 == 0) + scene->_sceneMode = 16; + else + scene->_sceneMode = 11; + + Common::Point pt(160, 115); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3800::Exit2::changeScene() { + Scene3800 *scene = (Scene3800 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_field412 = 2; + + if (R2_GLOBALS.getFlag(46)) { + if (scene->_field412 == R2_GLOBALS._v566A9) { + R2_GLOBALS._v566AA = 4; + if (R2_GLOBALS._v56A93 + 1 == 0) { + R2_GLOBALS._v566A8--; + R2_GLOBALS._v566A9 = 0; + } else { + R2_GLOBALS._v566A9 = R2_GLOBALS._v566AB[R2_GLOBALS._v56A93]; + R2_GLOBALS._v56A93--; + } + } else { + ++R2_GLOBALS._v56A93; + if (R2_GLOBALS._v56A93 > 999) + R2_GLOBALS._v56A93 = 999; + R2_GLOBALS._v566AB[R2_GLOBALS._v56A93] = R2_GLOBALS._v566A9; + R2_GLOBALS._v566A9 = 4; + } + } + + if (R2_GLOBALS._v566A8 == 0) + scene->_sceneMode = 16; + else + scene->_sceneMode = 12; + + Common::Point pt(330, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3800::Exit3::changeScene() { + Scene3800 *scene = (Scene3800 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_field412 = 3; + + if (R2_GLOBALS.getFlag(46)) { + if (scene->_field412 == R2_GLOBALS._v566A9) { + R2_GLOBALS._v566AA = 1; + if (R2_GLOBALS._v56A93 + 1 == 0) { + R2_GLOBALS._v566A8--; + R2_GLOBALS._v566A9 = 0; + } else { + R2_GLOBALS._v566A9 = R2_GLOBALS._v566AB[R2_GLOBALS._v56A93]; + R2_GLOBALS._v56A93--; + } + } else { + ++R2_GLOBALS._v56A93; + if (R2_GLOBALS._v56A93 > 999) + R2_GLOBALS._v56A93 = 999; + R2_GLOBALS._v566AB[R2_GLOBALS._v56A93] = R2_GLOBALS._v566A9; + R2_GLOBALS._v566A9 = 1; + } + } + + if (R2_GLOBALS._v566A8 == 0) + scene->_sceneMode = 16; + else + scene->_sceneMode = 13; + + Common::Point pt(160, 220); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3800::Exit4::changeScene() { + Scene3800 *scene = (Scene3800 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_field412 = 4; + + if (R2_GLOBALS.getFlag(46)) { + if (scene->_field412 == R2_GLOBALS._v566A9) { + R2_GLOBALS._v566AA = 2; + if (R2_GLOBALS._v56A93 + 1 == 0) { + R2_GLOBALS._v566A8--; + R2_GLOBALS._v566A9 = 0; + } else { + R2_GLOBALS._v566A9 = R2_GLOBALS._v566AB[R2_GLOBALS._v56A93]; + R2_GLOBALS._v56A93--; + } + } else { + ++R2_GLOBALS._v56A93; + if (R2_GLOBALS._v56A93 > 999) + R2_GLOBALS._v56A93 = 999; + R2_GLOBALS._v566AB[R2_GLOBALS._v56A93] = R2_GLOBALS._v566A9; + R2_GLOBALS._v566A9 = 2; + } + } + + if (R2_GLOBALS._v566A8 == 0) + scene->_sceneMode = 16; + else + scene->_sceneMode = 14; + + Common::Point pt(-10, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3800::initScene3800() { + _exit1._enabled = true; + _exit2._enabled = true; + _exit3._enabled = true; + _exit4._enabled = true; + _exit1._insideArea = false; + _exit2._insideArea = false; + _exit3._insideArea = false; + _exit4._insideArea = false; + _exit1._moving = false; + _exit2._moving = false; + _exit3._moving = false; + _exit4._moving = false; + + loadScene(R2_GLOBALS._v566A6); + + R2_GLOBALS._uiElements.draw(); +} + +void Scene3800::sub110BBD() { + R2_GLOBALS._player.disableControl(); + switch (_field412) { + case 0: + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(160, 145)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + _actor1.postInit(); + _actor1.fixPriority(10); + _actor1.changeZoom(-1); + _actor1.setVisage(1110); + _actor1._effect = 5; + _actor1._field9C = this->_field312; + R2_GLOBALS._player._linkedActor = &_actor1; + switch (R2_GLOBALS._sceneManager._previousScene) { + case 2600: + _object1.postInit(); + _object2.postInit(); + _actor1.hide(); + _sceneMode = 3800; + setAction(&_sequenceManager1, this, 3800, &R2_GLOBALS._player, &_object1, &_object2, NULL); + break; + case 3900: + _sceneMode = 15; + switch (R2_GLOBALS._v566AA - 1) { + case 0: { + R2_GLOBALS._player.setPosition(Common::Point(160, 220)); + Common::Point pt(160, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 1: { + R2_GLOBALS._player.setPosition(Common::Point(-10, 145)); + Common::Point pt(19, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: { + R2_GLOBALS._player.setPosition(Common::Point(160, 115)); + Common::Point pt(160, 120); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: { + R2_GLOBALS._player.setPosition(Common::Point(330, 145)); + Common::Point pt(300, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } + default: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } + break; + case 1: { + _sceneMode = 15; + R2_GLOBALS._player.setPosition(Common::Point(160, 220)); + Common::Point pt(160, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: { + _sceneMode = 15; + R2_GLOBALS._player.setPosition(Common::Point(-10, 145)); + Common::Point pt(19, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: { + _sceneMode = 15; + R2_GLOBALS._player.setPosition(Common::Point(160, 115)); + Common::Point pt(160, 120); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 4: { + _sceneMode = 15; + R2_GLOBALS._player.setPosition(Common::Point(330, 145)); + Common::Point pt(300, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } +} + +void Scene3800::sub1B007(int arg1, int arg2, int arg3) { + byte *tmpPal = R2_GLOBALS._scenePalette._palette; + byte newR, newG, newB; + int tmp, varC, varD = 0; + + for (int i = 0; i < 256; i++) { + newR = (arg1 * tmpPal[(3 * i)]) / 100; + newG = (arg2 * tmpPal[(3 * i) + 1]) / 100; + newB = (arg3 * tmpPal[(3 * i) + 2]) / 100; + + varC = 769; + for (int j = 255; j >= 0; j--) { + tmp = abs(tmpPal[(3 * j)] - newR); + if (tmp >= varC) + continue; + + tmp += abs(tmpPal[(3 * j) + 1] - newG); + if (tmp >= varC) + continue; + + tmp += abs(tmpPal[(3 * j) + 2] - newB); + if (tmp >= varC) + continue; + + varC = tmp; + varD = j; + } + this->_field312[i] = varD; + } +} + +void Scene3800::postInit(SceneObjectList *OwnerList) { + _field412 = 0; + + initScene3800(); + + SceneExt::postInit(); + R2_GLOBALS._sound1.play(231); + + warning("sub_1B007(65, 65, 65)"); + + setZoomPercents(87, 40, 144, 100); + + _exit1.setDetails(Rect(14, 87, 305, 125), SHADECURSOR_UP, 3800); + _exit1.setDest(Common::Point(160, 126)); + _exit2.setDetails(Rect(305, 87, 320, 128), EXITCURSOR_E, 3800); + _exit2.setDest(Common::Point(312, 145)); + _exit3.setDetails(Rect(14, 160, 305, 168), SHADECURSOR_DOWN, 3800); + _exit3.setDest(Common::Point(160, 165)); + _exit4.setDetails(Rect(0, 87, 14, 168), EXITCURSOR_W, 3800); + _exit4.setDest(Common::Point(7, 145)); + + _rect1.set(0, 0, 320, 87); + _item1.setDetails(Rect(0, 0, 320, 200), 3800, 0, 1, 2, 1, (SceneItem *) NULL); + + sub110BBD(); +} + +void Scene3800::signal() { + switch (_sceneMode) { + case 11: + R2_GLOBALS._v566A6 += 15; + if (R2_GLOBALS._v566A6 > 3815) + R2_GLOBALS._v566A6 -= 20; + initScene3800(); + sub110BBD(); + break; + case 12: + R2_GLOBALS._v566A6 += 5; + if (R2_GLOBALS._v566A6 > 3815) + R2_GLOBALS._v566A6 = 3800; + initScene3800(); + sub110BBD(); + break; + case 13: + R2_GLOBALS._v566A6 -= 15; + if (R2_GLOBALS._v566A6 < 3800) + R2_GLOBALS._v566A6 += 20; + initScene3800(); + sub110BBD(); + break; + case 14: + R2_GLOBALS._v566A6 -= 5; + if (R2_GLOBALS._v566A6 < 3800) + R2_GLOBALS._v566A6 = 3815; + initScene3800(); + sub110BBD(); + break; + case 15: + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + break; + case 16: + g_globals->_sceneManager.changeScene(3900); + break; + case 3800: + _actor1.show(); + _object1.remove(); + _object2.remove(); + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + break; + case 3805: + _exit1._enabled = false; + _exit2._enabled = false; + _exit3._enabled = false; + _exit4._enabled = false; + R2_GLOBALS._player._canWalk = false; + R2_GLOBALS._events.setCursor(CURSOR_USE); + break; + case 3806: + _exit1._enabled = true; + _exit2._enabled = true; + _exit3._enabled = true; + _exit4._enabled = true; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + break; + default: + break; + } +} + +void Scene3800::process(Event &event) { + if ((R2_GLOBALS._player._uiEnabled) && (event.eventType == 1) && (_rect1.contains(event.mousePos))) { + event.handled = true; + switch (R2_GLOBALS._events.getCursor()) { + case R2_NEGATOR_GUN: + R2_GLOBALS._player.addMover(NULL); + R2_GLOBALS._player.updateAngle(event.mousePos); + break; + case R2_STEPPING_DISKS: + SceneItem::display(3800, 5, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case R2_ATTRACTOR_UNIT: + SceneItem::display(3800, 3, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + default: + event.handled = false; + break; + } + } + + Scene::process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 163008739f..d5536791b1 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -656,6 +656,52 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene3800 : public SceneExt { + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit3 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit4 : public SceneExit { + public: + virtual void changeScene(); + }; + +public: + SceneObject _object1; + SceneObject _object2; + SceneActor _actor1; + NamedHotspot _item1; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + Exit4 _exit4; + Rect _rect1; + SequenceManager _sequenceManager1; + + int _field412; + + Scene3800(); + void initScene3800(); + void sub110BBD(); + void sub1B007(int arg1, int arg2, int arg3); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void synchronize(Serializer &s); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From e914ec5d890dc742f40b19b127d2e9e44d418cd9 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 5 Jan 2012 15:19:55 +0100 Subject: TSAGE: R2R - Implement scene 3900 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 263 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes3.h | 41 ++++ 3 files changed, 304 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 1f046d1bff..d39db9c2f8 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -234,7 +234,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3800: return new Scene3800(); case 3900: - error("Missing scene %d from group 3", sceneNumber); + return new Scene3900(); default: error("Unknown scene number - %d", sceneNumber); break; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index a8deb88829..5ae15d9c08 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -3968,7 +3968,7 @@ void Scene3800::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); R2_GLOBALS._sound1.play(231); - warning("sub_1B007(65, 65, 65)"); + warning("sub1B007(65, 65, 65)"); setZoomPercents(87, 40, 144, 100); @@ -4074,5 +4074,266 @@ void Scene3800::process(Event &event) { Scene::process(event); } +/*-------------------------------------------------------------------------- + * Scene 3900 - + * + *--------------------------------------------------------------------------*/ +void Scene3900::Exit1::changeScene() { + Scene3900 *scene = (Scene3900 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A9 = 3; + R2_GLOBALS._v566AA = 1; + R2_GLOBALS._v566A8 = 1; + scene->_sceneMode = 14; + + Common::Point pt(160, 115); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3900::Exit2::changeScene() { + Scene3900 *scene = (Scene3900 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A9 = 4; + R2_GLOBALS._v566AA = 2; + R2_GLOBALS._v566A8 = 1; + scene->_sceneMode = 14; + + Common::Point pt(330, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3900::Exit3::changeScene() { + Scene3900 *scene = (Scene3900 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A9 = 1; + R2_GLOBALS._v566AA = 3; + R2_GLOBALS._v566A8 = 1; + scene->_sceneMode = 14; + + Common::Point pt(160, 220); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3900::Exit4::changeScene() { + Scene3900 *scene = (Scene3900 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A9 = 2; + R2_GLOBALS._v566AA = 4; + R2_GLOBALS._v566A8 = 1; + scene->_sceneMode = 14; + + Common::Point pt(-10, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene3900::Exit5::changeScene() { + Scene3900 *scene = (Scene3900 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 13; + + if (R2_GLOBALS._v566A9 == 4) { + Common::Point pt(-10, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } else { + Common::Point pt(330, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } + + R2_GLOBALS._v566A9 = 0; +} + +void Scene3900::postInit(SceneObjectList *OwnerList) { + if ((R2_GLOBALS._v566AA == 2) && (R2_GLOBALS._sceneManager._previousScene != 2700)) + loadScene(3825); + else + loadScene(3820); + SceneExt::postInit(); + R2_GLOBALS._sound1.changeSound(231); + setZoomPercents(87, 40, 144, 100); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + _actor1.postInit(); + _actor1.fixPriority(10); + _actor1.changeZoom(-1); + _actor1.setVisage(1110); + _actor1._effect = 5; + _actor1._field9C = _field312; + R2_GLOBALS._player._linkedActor = &_actor1; + if ((R2_GLOBALS._v566AA == 2) && (R2_GLOBALS._sceneManager._previousScene != 2700)) { +// loadScene(3825); + R2_GLOBALS._v566AA = 4; + _exit1.setDetails(Rect(29, 87, 305, 125), SHADECURSOR_UP, 3900); + _exit3.setDetails(Rect(29, 160, 305, 168), SHADECURSOR_DOWN, 3900); + + _exit2.setDetails(Rect(305, 87, 320, 168), EXITCURSOR_E, 3900); + _exit2.setDest(Common::Point(312, 145)); + _exit2._enabled = true; + _exit2._insideArea = false; + _exit2._moving = false; + + _exit4._enabled = false; + + _exit5.setDetails(Rect(0, 87, 29, 168), EXITCURSOR_W, 3900); + _exit5.setDest(Common::Point(24, 135)); + } else { +// loadScene(3820); + R2_GLOBALS._v566AA = 2; + _exit1.setDetails(Rect(14, 87, 290, 125), SHADECURSOR_UP, 3900); + _exit3.setDetails(Rect(14, 160, 290, 168), SHADECURSOR_DOWN, 3900); + + + _exit2._enabled = false; + + _exit4.setDetails(Rect(0, 87, 14, 168), EXITCURSOR_W, 3900); + _exit4.setDest(Common::Point(7, 145)); + _exit4._enabled = true; + _exit4._insideArea = false; + _exit4._moving = false; + + _exit5.setDetails(Rect(290, 87, 320, 168), EXITCURSOR_E, 3900); + _exit5.setDest(Common::Point(295, 135)); + } + _exit5._enabled = true; + _exit5._insideArea = false; + _exit5._moving = false; + + warning("sub1B007(65, 65, 65)"); + _exit1.setDest(Common::Point(160, 126)); + _exit1._enabled = true; + _exit1._insideArea = false; + _exit1._moving = false; + + _exit3.setDest(Common::Point(160, 165)); + _exit3._enabled = true; + _exit3._insideArea = false; + _exit3._moving = false; + + R2_GLOBALS._uiElements.draw(); + + _rect1.set(0, 0, 320, 87); + _item1.setDetails(Rect(0, 0, 320, 200), 3800, 0, 1, 2, 1, (SceneItem *)NULL); + if (R2_GLOBALS._sceneManager._previousScene == 3800) { + _sceneMode = 11; + switch (R2_GLOBALS._v566AA - 1) { + case 0: { + R2_GLOBALS._player.setPosition(Common::Point(160, 115)); + Common::Point pt(160, 120); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 1: { + R2_GLOBALS._player.setPosition(Common::Point(330, 145)); + Common::Point pt(300, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: { + R2_GLOBALS._player.setPosition(Common::Point(160, 220)); + Common::Point pt(160, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: { + R2_GLOBALS._player.setPosition(Common::Point(-10, 145)); + Common::Point pt(19, 145); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } + } else if (R2_GLOBALS._sceneManager._previousScene == 2700) { + _sceneMode = 12; + R2_GLOBALS._player.setPosition(Common::Point(330, 135)); + Common::Point pt(265, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(160, 145)); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } +} + +void Scene3900::signal() { + switch (_sceneMode) { + case 11: + // No break on purpose + case 12: + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + case 13: + R2_GLOBALS._sceneManager.changeScene(2700); + break; + case 14: + R2_GLOBALS._sceneManager.changeScene(3800); + break; + case 3805: + _exit1._enabled = false; + _exit2._enabled = false; + _exit3._enabled = false; + _exit4._enabled = false; + R2_GLOBALS._player._canWalk = false; + R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); + break; + case 3806: + _exit1._enabled = true; + _exit2._enabled = true; + _exit3._enabled = true; + _exit4._enabled = true; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + default: + break; + } +} + +void Scene3900::process(Event &event) { + if ((R2_GLOBALS._player._uiEnabled) && (event.eventType == 1) && (_rect1.contains(event.mousePos))) { + event.handled = true; + switch (R2_GLOBALS._events.getCursor()) { + case R2_NEGATOR_GUN: + R2_GLOBALS._player.addMover(NULL); + R2_GLOBALS._player.updateAngle(event.mousePos); + break; + case R2_STEPPING_DISKS: + SceneItem::display(3800, 5, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case R2_ATTRACTOR_UNIT: + SceneItem::display(3800, 3, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + default: + event.handled = false; + break; + } + } + Scene::process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index d5536791b1..c925871747 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -702,6 +702,47 @@ public: virtual void process(Event &event); virtual void synchronize(Serializer &s); }; + +class Scene3900 : public SceneExt { + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit3 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit4 : public SceneExit { + public: + virtual void changeScene(); + }; + + class Exit5 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SceneActor _actor1; + NamedHotspot _item1; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + Exit4 _exit4; + Exit5 _exit5; + Rect _rect1; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 8e54ddfabf81d382c4e6f026611a7dabd90c9a51 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 5 Jan 2012 22:22:30 +0100 Subject: TSAGE: R2R - Implement scene 1010 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 92 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 53 ++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 engines/tsage/ringworld2/ringworld2_scenes1.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_scenes1.h (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d39db9c2f8..d906debf82 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -27,6 +27,7 @@ #include "tsage/ringworld2/ringworld2_logic.h" #include "tsage/ringworld2/ringworld2_dialogs.h" #include "tsage/ringworld2/ringworld2_scenes0.h" +#include "tsage/ringworld2/ringworld2_scenes1.h" #include "tsage/ringworld2/ringworld2_scenes2.h" #include "tsage/ringworld2/ringworld2_scenes3.h" @@ -91,7 +92,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { /* Scene group #1 */ // case 1000: + error("Missing scene %d from group 1", sceneNumber); case 1010: + return new Scene1010(); case 1020: case 1100: case 1200: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp new file mode 100644 index 0000000000..e514155435 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -0,0 +1,92 @@ +/* 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. + * + */ + +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/staticres.h" +#include "tsage/ringworld2/ringworld2_scenes1.h" + +namespace TsAGE { + +namespace Ringworld2 { + +/*-------------------------------------------------------------------------- + * Scene 1010 - + * + *--------------------------------------------------------------------------*/ +void Scene1010::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(1010); + + R2_GLOBALS._v58CE2 = 0; + setZoomPercents(100, 1, 160, 100); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player.setPosition(Common::Point(30, 264)); + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player.disableControl(); + + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + + if (R2_GLOBALS.getFlag(57)) + _sceneMode = 1; + else { + R2_GLOBALS._sound1.play(89); + _sceneMode = 0; + } +} + +void Scene1010::signal() { + switch (_sceneMode) { + case 1: { + _sceneMode = 2; + R2_GLOBALS._player.setup(1010, 2, 1); + R2_GLOBALS._player.setPosition(Common::Point(297, 101)); + Common::Point pt(30, 264); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: + _sceneMode = 3; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + R2_GLOBALS._player.hide(); + break; + case 3: + if (R2_GLOBALS.getFlag(57)) + R2_GLOBALS._sceneManager.changeScene(1500); + else + R2_GLOBALS._sceneManager.changeScene(1000); + break; + default: { + _sceneMode = 2; + R2_GLOBALS._player.setup(1010, 1, 1); + Common::Point pt(297, 101); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + } +} + +} // End of namespace Ringworld2 +} // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h new file mode 100644 index 0000000000..4ddd064325 --- /dev/null +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -0,0 +1,53 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TSAGE_RINGWORLD2_SCENES1_H +#define TSAGE_RINGWORLD2_SCENES1_H + +#include "common/scummsys.h" +#include "tsage/converse.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" +#include "tsage/sound.h" +#include "tsage/ringworld2/ringworld2_logic.h" +#include "tsage/ringworld2/ringworld2_speakers.h" + +namespace TsAGE { + +namespace Ringworld2 { + +using namespace TsAGE; + +class Scene1010 : public SceneExt { +public: + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + +} // End of namespace Ringworld2 +} // End of namespace TsAGE + +#endif -- cgit v1.2.3 From f5c54bd9a36a106b05df0234c342d319f9307410 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 6 Jan 2012 00:19:28 +0100 Subject: TSAGE: R2R - Implement scene 1020 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 126 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 9 ++ 3 files changed, 136 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d906debf82..aa9e1dfe1e 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -94,8 +94,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1000: error("Missing scene %d from group 1", sceneNumber); case 1010: + // Cutscene - trip in space return new Scene1010(); case 1020: + return new Scene1020(); case 1100: case 1200: case 1330: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index e514155435..1949d19d80 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -30,7 +30,7 @@ namespace TsAGE { namespace Ringworld2 { /*-------------------------------------------------------------------------- - * Scene 1010 - + * Scene 1010 - Cutscene: A pixel lost in space! * *--------------------------------------------------------------------------*/ void Scene1010::postInit(SceneObjectList *OwnerList) { @@ -88,5 +88,129 @@ void Scene1010::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 1020 - + * + *--------------------------------------------------------------------------*/ +void Scene1020::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(1020); + + if (R2_GLOBALS._sceneManager._previousScene == 1010) + g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); + + R2_GLOBALS._v558B6.set(160, 0, 160, 161); + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._player.postInit(); + + if (R2_GLOBALS._sceneManager._previousScene == 1010) { + R2_GLOBALS._player.setPosition(Common::Point(500, 100)); + R2_GLOBALS._player.setup(1020, 1, 1); + } else { + R2_GLOBALS._player.setPosition(Common::Point(0, 100)); + R2_GLOBALS._player.setup(1020, 2, 1); + } + + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + + if (R2_GLOBALS._sceneManager._previousScene == 1010) + _sceneMode = 0; + else + _sceneMode = 10; +} + +void Scene1020::signal() { + switch (_sceneMode) { + case 0: { + _sceneMode = 1; + R2_GLOBALS._player.show(); + R2_GLOBALS._player.setPosition(Common::Point(347, 48)); + R2_GLOBALS._player._moveDiff = Common::Point(2, 1); + R2_GLOBALS._player.setZoom(0); + Common::Point pt(392, 41); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 1: + _sceneMode = 2; + R2_GLOBALS._player.setZoom(100); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 2: { + _sceneMode = 3; + R2_GLOBALS._player._moveDiff = Common::Point(30, 15); + Common::Point pt(-15, 149); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: + _sceneMode = 4; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 4: + R2_GLOBALS.setFlag(51); + R2_GLOBALS._sceneManager.changeScene(300); + break; + case 10: { + _sceneMode = 11; + R2_GLOBALS._player.setPosition(Common::Point(25, 133)); + R2_GLOBALS._player._moveDiff = Common::Point(30, 15); + R2_GLOBALS._player.setZoom(100); + Common::Point pt(355, 60); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 11: + R2_GLOBALS._player.setPosition(Common::Point(355, 57)); + _sceneMode = 12; + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 12: { + R2_GLOBALS._player.setPosition(Common::Point(355, 60)); + _sceneMode = 13; + R2_GLOBALS._player._moveDiff = Common::Point(3, 1); + Common::Point pt(347, 48); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 13: + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + if (R2_GLOBALS._player._percent < 1) + _sceneMode = 14; + break; + case 14: + R2_GLOBALS._sceneManager.changeScene(1010); + break; + default: + break; + } +} + +void Scene1020::dispatch() { + if (_sceneMode == 1) { + R2_GLOBALS._player.setZoom(R2_GLOBALS._player._percent + 1); + if (R2_GLOBALS._player._percent > 10) + R2_GLOBALS._player._moveDiff.x = 3; + if (R2_GLOBALS._player._percent > 20) + R2_GLOBALS._player._moveDiff.x = 4; + } + + if ((_sceneMode == 13) && (R2_GLOBALS._player._percent != 0)) { + R2_GLOBALS._player.setZoom(R2_GLOBALS._player._percent - 2); + if (R2_GLOBALS._player._percent < 80) + R2_GLOBALS._player._moveDiff.x = 2; + if (R2_GLOBALS._player._percent < 70) + R2_GLOBALS._player._moveDiff.x = 1; + } + + Scene::dispatch(); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 4ddd064325..f0444de70d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -47,6 +47,15 @@ public: virtual void signal(); }; +class Scene1020 : public SceneExt { +public: + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 4222a728e16e07e1d0fa29d8ade2dfca608ce400 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 7 Jan 2012 11:54:47 +1100 Subject: TSAGE: Implemented R2R Scene 325 - Bridge Console --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 855 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 52 ++ 3 files changed, 906 insertions(+), 4 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index aa9e1dfe1e..157f222012 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -69,7 +69,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Bridge return new Scene300(); case 325: - error("Missing scene %d from group 0", sceneNumber); + // Bridge Console + return new Scene325(); case 400: // Science Lab return new Scene400(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 0ef3a68549..597156fd03 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -521,15 +521,15 @@ void Scene125::Icon::setIcon(int id) { _object1.setPosition(_position); _sceneText1._fontNumber = scene->_iconFontNumber; - _sceneText1.setup(CONSOLE_MESSAGES[id]); + _sceneText1.setup(CONSOLE125_MESSAGES[id]); _sceneText1.fixPriority(20); _sceneText2._fontNumber = scene->_iconFontNumber; - _sceneText2.setup(CONSOLE_MESSAGES[id]); + _sceneText2.setup(CONSOLE125_MESSAGES[id]); _sceneText2.fixPriority(20); _sceneText2._fontNumber = scene->_iconFontNumber; - _sceneText2.setup(CONSOLE_MESSAGES[id]); + _sceneText2.setup(CONSOLE125_MESSAGES[id]); _sceneText2.fixPriority(10); switch (_lookLineNum) { @@ -2666,6 +2666,855 @@ void Scene300::signal309() { R2_GLOBALS._stripManager_lookupList[4] = 3; } +/*-------------------------------------------------------------------------- + * Scene 325 - Bridge Console + * + *--------------------------------------------------------------------------*/ + +const double ADJUST_FACTOR = 0.06419999999999999; + +/*--------------------------------------------------------------------------*/ + +Scene325::Icon::Icon(): SceneActor() { + _lookLineNum = 0; + _field98 = 0; + _pressed = false; +} + +void Scene325::Icon::postInit(SceneObjectList *OwnerList) { + SceneObject::postInit(); + + _object1.postInit(); + _object1.fixPriority(21); + _object1.hide(); + + _sceneText1._color1 = 92; + _sceneText1._color2 = 0; + _sceneText1._width = 200; + _sceneText2._color1 = 0; + _sceneText2._color2 = 0; + _sceneText2._width = 200; + fixPriority(20); +} + +void Scene325::Icon::synchronize(Serializer &s) { + SceneActor::synchronize(s); + s.syncAsSint16LE(_lookLineNum); + s.syncAsSint16LE(_field98); + s.syncAsSint16LE(_pressed); +} + +void Scene325::Icon::process(Event &event) { + Scene325 *scene = (Scene325 *)R2_GLOBALS._sceneManager._scene; + + if (!event.handled && !(_flags & OBJFLAG_HIDING) && R2_GLOBALS._player._uiEnabled) { + + if (event.eventType == EVENT_BUTTON_DOWN) { + int regionIndex = R2_GLOBALS._sceneRegions.indexOf(event.mousePos); + + switch (R2_GLOBALS._events.getCursor()) { + case CURSOR_LOOK: + if (regionIndex == _sceneRegionId) { + event.handled = true; + SceneItem::display2(326, _lookLineNum); + } + break; + + case CURSOR_USE: + if ((regionIndex == _sceneRegionId) && !_pressed) { + scene->_sound1.play(14); + setFrame(2); + + switch (_object1._strip) { + case 1: + _object1.setStrip(2); + break; + case 3: + _object1.setStrip(4); + break; + case 5: + _object1.setStrip(6); + break; + case 7: + _object1.setStrip(8); + break; + default: + break; + } + + _pressed = true; + event.handled = true; + } + break; + + default: + break; + } + } + + if ((event.eventType == EVENT_BUTTON_UP) && _pressed) { + setFrame(1); + + switch (_object1._strip) { + case 2: + _object1.setStrip(1); + break; + case 4: + _object1.setStrip(3); + break; + case 6: + _object1.setStrip(5); + break; + default: + break; + } + + _pressed = false; + event.handled = true; + scene->consoleAction(_lookLineNum); + } + } +} + +void Scene325::Icon::setIcon(int id) { + Scene325 *scene = (Scene325 *)R2_GLOBALS._sceneManager._scene; + + _lookLineNum = _field98 = id; + SceneActor::_lookLineNum = id; + + _sceneText1.remove(); + _sceneText2.remove(); + + if (_lookLineNum) { + showIcon(); + _object1.setup(325, ((id - 1) / 10) * 2 + 1, ((id - 1) % 10) + 1); + _object1.setPosition(_position); + + _sceneText1._fontNumber = scene->_iconFontNumber; + _sceneText1.setup(CONSOLE325_MESSAGES[id]); + _sceneText1.fixPriority(20); + + _sceneText2._fontNumber = scene->_iconFontNumber; + _sceneText2.setup(CONSOLE325_MESSAGES[id]); + _sceneText2.fixPriority(20); + + _sceneText2._fontNumber = scene->_iconFontNumber; + _sceneText2.setup(CONSOLE325_MESSAGES[id]); + _sceneText2.fixPriority(10); + + switch (_lookLineNum) { + case 7: + _sceneText1.setPosition(Common::Point(62, _position.y + 8)); + _sceneText2.setPosition(Common::Point(64, _position.y + 10)); + break; + case 8: + case 9: + _sceneText1.setPosition(Common::Point(65, _position.y + 8)); + _sceneText2.setPosition(Common::Point(67, _position.y + 10)); + break; + case 12: + _sceneText1.setPosition(Common::Point(83, _position.y + 8)); + _sceneText2.setPosition(Common::Point(85, _position.y + 10)); + break; + default: + _sceneText1.setPosition(Common::Point(121, _position.y + 8)); + _sceneText2.setPosition(Common::Point(123, _position.y + 10)); + break; + } + } else { + hideIcon(); + } +} + +void Scene325::Icon::showIcon() { + _sceneText1.show(); + _sceneText2.show(); + _object1.show(); + _object2.show(); + show(); +} + +void Scene325::Icon::hideIcon() { + _sceneText1.hide(); + _sceneText2.hide(); + _object1.hide(); + _object2.hide(); + hide(); +} + +/*--------------------------------------------------------------------------*/ + +Scene325::Scene325(): SceneExt() { + _field412 = 7; + _iconFontNumber = 50; + _field416 = _field418 = 0; + _field41A = _field41C = _field41E = _field420 = 0; + _soundCount = _soundIndex = 0; + + for (int idx = 0; idx < 10; ++idx) + _soundQueue[idx] = 0; +} + +void Scene325::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(325); + + R2_GLOBALS.clearFlag(50); + _stripManager.addSpeaker(&_quinnSpeaker); + _palette.loadPalette(0); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _item2.setDetails(1, 325, 3, 4, 5); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 325, 0, 1, 2, 1, (SceneItem *)NULL); + _sceneMode = 1; + signal(); +} + +void Scene325::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_iconFontNumber); + s.syncAsSint16LE(_field416); + s.syncAsSint16LE(_field418); + s.syncAsSint16LE(_field41A); + s.syncAsSint16LE(_field41C); + s.syncAsSint16LE(_field41E); + s.syncAsSint16LE(_field420); + s.syncAsSint16LE(_soundCount); + s.syncAsSint16LE(_soundIndex); + + for (int idx = 0; idx < 10; ++idx) + s.syncAsSint16LE(_soundQueue[idx]); +} + +void Scene325::remove() { + removeText(); + SceneExt::remove(); +} + +void Scene325::signal() { + switch (_sceneMode - 1) { + case 0: + _icon1.postInit(); + _icon1._sceneRegionId = 2; + _icon2.postInit(); + _icon2._sceneRegionId = 3; + _icon3.postInit(); + _icon3._sceneRegionId = 4; + _icon4.postInit(); + _icon4._sceneRegionId = 5; + + setAction(&_sequenceManager1, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, + &R2_GLOBALS._player, NULL); + _sceneMode = 2; + break; + case 1: + _icon1.setup(160, 1, 1); + _icon1.setPosition(Common::Point(65, 17)); + _icon1._object2.postInit(); + _icon1._object2.setup(160, 7, 1); + _icon1._object2.setPosition(Common::Point(106, 41)); + + _icon2.setup(160, 1, 1); + _icon2.setPosition(Common::Point(80, 32)); + _icon2._object2.postInit(); + _icon2._object2.setup(160, 7, 2); + _icon2._object2.setPosition(Common::Point(106, 56)); + + _icon3.setup(160, 1, 1); + _icon3.setPosition(Common::Point(65, 47)); + _icon3._object2.postInit(); + _icon3._object2.setup(160, 7, 1); + _icon3._object2.setPosition(Common::Point(106, 71)); + + _icon4.setup(160, 1, 1); + _icon4.setPosition(Common::Point(80, 62)); + _icon4._sceneRegionId = 5; + _icon4._object2.postInit(); + _icon4._object2.setup(160, 7, 2); + _icon4._object2.setPosition(Common::Point(106, 86)); + + _icon5.postInit(); + _icon5.setup(160, 1, 1); + _icon5._sceneRegionId = 7; + _icon5.setPosition(Common::Point(37, 92)); + _icon5.setIcon(8); + + _icon6.postInit(); + _icon6.setup(160, 1, 1); + _icon6.setPosition(Common::Point(106, 110)); + _icon6.setIcon(7); + _icon6._sceneRegionId = 8; + + consoleAction(7); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + case 9: + switch (_field412) { + case 3: + _sceneMode = 129; + _object1.postInit(); + _object2.postInit(); + _object3.postInit(); + if (R2_GLOBALS.getFlag(13)) { + _object4.postInit(); + setAction(&_sequenceManager1, this, 130, &R2_GLOBALS._player, &_object1, + &_object2, &_object3, &_object4, NULL); + } else { + setAction(&_sequenceManager1, this, 129, &R2_GLOBALS._player, &_object1, + &_object2, &_object3, NULL); + } + break; + case 17: + case 18: + case 19: + case 20: { + int v = 10 - ((21 - _field412) * 2); + if (R2_GLOBALS.getFlag(50)) + --v; + if (_field418 == 5) + v += 8; + if (R2_GLOBALS.getFlag(51) && (v == 2)) + R2_GLOBALS.setFlag(57); + + if (R2_GLOBALS.getFlag(44) && !R2_GLOBALS.getFlag(51)) { + if (v != 13) { + setMessage(328, 0); + } else { + _field420 = 864; + + _object12.postInit(); + _object2.setup(326, 4, 1); + _object12.setPosition(Common::Point(149, 128)); + _object12.fixPriority(20); + + _object13.postInit(); + _object13.setup(326, 4, 2); + _object13.setPosition(Common::Point(149, (int)(_field420 * ADJUST_FACTOR))); + _object13.fixPriority(21); + + _object10.postInit(); + _object10.setup(326, 1, 1); + _object10.setPosition(Common::Point(210, 20)); + _object10.fixPriority(10); + + _object1.postInit(); + _object1.setup(326, 1, 1); + _object1.setPosition(Common::Point(210, 32)); + _object10.fixPriority(10); + + _object2.postInit(); + _object2.setup(326, 1, 1); + _object2.setPosition(Common::Point(210, 44)); + _object2.fixPriority(10); + + _object3.postInit(); + _object3.setup(326, 1, 1); + _object3.setPosition(Common::Point(210, 56)); + _object3.fixPriority(10); + + _object4.postInit(); + _object4.setup(326, 1, 1); + _object4.setPosition(Common::Point(210, 68)); + _object4.fixPriority(10); + + _object5.postInit(); + _object5.setup(326, 1, 1); + _object5.setPosition(Common::Point(210, 80)); + _object5.fixPriority(10); + + _object6.postInit(); + _object6.setup(326, 1, 1); + _object6.setPosition(Common::Point(210, 92)); + _object6.fixPriority(10); + + _object7.postInit(); + _object7.setup(326, 1, 1); + _object7.setPosition(Common::Point(210, 104)); + _object7.fixPriority(10); + + _object8.postInit(); + _object8.setup(326, 1, 1); + _object8.setPosition(Common::Point(210, 116)); + _object8.fixPriority(10); + + _object9.postInit(); + _object9.setup(326, 1, 1); + _object9.setPosition(Common::Point(210, 128)); + _object9.fixPriority(10); + + _object11.postInit(); + _object11.setup(326, 1, 1); + _object11.setPosition(Common::Point(210, 150)); + _object11.fixPriority(10); + } + } else if (R2_GLOBALS.getFlag(51)) { + setMessage(329, (v == 12) ? 10 : v); + } else { + setMessage(327, (v < 15) ? 1 : v); + } + break; + } + case 21: + _sceneMode = 129; + + _object1.postInit(); + _object1.setup(327, 1, 1); + _object1.setPosition(Common::Point(170, 80)); + _object1.fixPriority(10); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 22: + _sceneMode = 129; + + _object1.postInit(); + _object1.setup(327, 2, 1); + _object1.setPosition(Common::Point(160, 80)); + _object1.fixPriority(10); + _object1.animate(ANIM_MODE_5, NULL); + break; + case 24: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field416 = 37; + setMessage(128, _field416); + break; + case 25: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field416 = 68; + setMessage(128, _field416); + break; + case 26: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field416 = 105; + setMessage(128, _field416); + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field416 = 105; + setMessage(128, _field416); + break; + } + break; + case 10: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + + if ((_field412 >= 17) && (_field412 <= 20)) { + _icon5.setIcon(8); + consoleAction(4); + } else { + consoleAction(7); + } + + _icon6.setIcon(7); + break; + case 11: + R2_GLOBALS.setFlag(45); + R2_GLOBALS._sceneManager.changeScene(300); + break; + case 12: + R2_GLOBALS.setFlag(57); + R2_GLOBALS._sceneManager.changeScene(300); + break; + case 14: + if (_soundCount) + --_soundCount; + + if (!_soundCount || (R2_GLOBALS._speechSubtitles == 2)) { + _soundIndex = 0; + R2_GLOBALS._playStream.stop(); + } else { + _sceneMode = 15; + R2_GLOBALS._playStream.play(_soundQueue[_soundIndex], this); + } + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + } +} + +void Scene325::removeText() { + _text1.remove(); + _soundCount = 0; + _soundIndex = 0; + R2_GLOBALS._playStream.stop(); +} + +void Scene325::consoleAction(int id) { + _icon1.setIcon(0); + _icon2.setIcon(0); + _icon3.setIcon(0); + _icon4.setIcon(0); + + if (id == 7) + _icon5.setIcon(9); + else if ((_field412 != 3) && ((_field412 < 17) || (_field412 > 26))) + _icon5.setIcon(8); + + switch (id - 1) { + case 0: + _icon1.setIcon(10); + _icon2.setIcon(11); + break; + case 1: + _icon1.setIcon(23); + _icon2.setIcon(24); + _icon3.setIcon(25); + _icon4.setIcon(26); + case 2: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + R2_GLOBALS._player.disableControl(); + consoleAction(7); + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + // TODO: Finish + break; + case 3: + _icon1.setIcon(5); + _icon2.setIcon(6); + _icon3.setIcon(R2_GLOBALS.getFlag(50) ? 16 : 15); + break; + case 4: + case 5: + _field418 = id; + _icon1.setIcon(17); + _icon2.setIcon(18); + _icon3.setIcon(19); + break; + case 7: + consoleAction(((_field412 == 5) || (_field412 == 6) || (_field412 == 15)) ? 4 : 7); + break; + case 8: + R2_GLOBALS._sceneManager.changeScene(300); + case 9: + case 10: + _iconFontNumber = (id - 1) == 9 ? 50 : 52; + _text1.remove(); + _icon6.setIcon(7); + break; + case 11: + if (R2_GLOBALS.getFlag(57) && (R2_GLOBALS._player._characterIndex == 1) && !R2_GLOBALS.getFlag(25)) { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + _sceneMode = 13; + _stripManager.start(403, this); + } else { + R2_GLOBALS._player.disableControl(); + _text1.remove(); + + _icon4.setPosition(Common::Point(80, 62)); + _icon4._sceneRegionId = 5; + _icon4.hideIcon(); + + _object12.remove(); + _object13.remove(); + _object10.remove(); + _object1.remove(); + _object2.remove(); + _object3.remove(); + _object4.remove(); + _object5.remove(); + _object6.remove(); + _object7.remove(); + _object8.remove(); + _object9.remove(); + _object11.remove(); + + _palette.loadPalette(160); + _sceneMode = 11; + + BF_GLOBALS._scenePalette.addFader(&_palette._palette[0], 256, 5, this); + } + break; + case 12: + _icon4.setIcon(14); + _icon4._object2.hide(); + + switch (_field412) { + case 17: + case 18: + case 19: + case 20: + if (_field420) { + R2_GLOBALS._player.disableControl(); + _field41A = 1296; + _field41E = 1; + } + break; + default: + setMessage(128, --_field416); + break; + } + return; + case 13: + _icon4.setIcon(14); + _icon4._object2.hide(); + + switch (_field412) { + case 17: + case 18: + case 19: + case 20: + if (_field420 < 1620) { + R2_GLOBALS._player.disableControl(); + _field41A = 1296; + _field41E = -1; + } + break; + } + return; + case 14: + if (R2_GLOBALS.getFlag(55)) { + SceneItem::display2(329, 17); + } else { + R2_GLOBALS.setFlag(50); + consoleAction(4); + } + id = 4; + break; + case 15: + R2_GLOBALS.clearFlag(50); + consoleAction(4); + id = 4; + break; + case 22: + case 23: + case 24: + case 25: + R2_GLOBALS._player.disableControl(); + consoleAction(2); + _field412 = id; + + _icon1.hideIcon(); + _icon2.hideIcon(); + _icon3.hideIcon(); + _icon4.hideIcon(); + + _icon5.setIcon(13); + _icon4.setPosition(Common::Point(52, 107)); + _icon4._sceneRegionId = 9; + _icon4.setIcon(14); + _icon4._object2.hide(); + + _icon6.setIcon(12); + _sceneMode = 10; + _palette.loadPalette(161); + + BF_GLOBALS._scenePalette.addFader(&_palette._palette[0], 256, 5, this); + break; + case 6: + default: + _icon1.setIcon(1); + _icon2.setIcon(2); + _icon3.setIcon(3); + int idList[3] = { 4, 22, 21 }; + _icon4.setIcon(idList[R2_GLOBALS._player._characterIndex - 1]); + break; + } + + if (id != 8) + _field412 = id; +} + +void Scene325::process(Event &event) { + SceneExt::process(event); + + if (R2_GLOBALS._player._uiEnabled) { + _icon1.process(event); + _icon2.process(event); + _icon3.process(event); + _icon4.process(event); + _icon5.process(event); + _icon6.process(event); + } +} + +void Scene325::dispatch() { + if (_field41A) { + switch (_field41A) { + case 13: + _field41C = 1; + break; + case 1296: + R2_GLOBALS._sound3.play(87); + _field41C = 1; + break; + case 33: + case 1283: + _field41C = 2; + break; + case 63: + case 1263: + _field41C = 3; + break; + case 103: + case 1233: + _field41C = 4; + break; + case 153: + case 1193: + _field41C = 5; + break; + case 213: + case 1143: + _field41C = 6; + break; + case 283: + case 1083: + _field41C = 7; + break; + case 1013: + _field41C = 8; + break; + default: + break; + } + + _field41A -= _field41C; + int yp = _field41E * _field41C + _object10._position.y; + bool flag = false; + + if (yp >= 30) { + yp -= 12; + --_field420; + flag = true; + } + if (yp <= 10) { + yp += 12; + ++_field420; + flag = true; + } + _object3.setPosition(Common::Point(149, (int)(_field420 * ADJUST_FACTOR) + 22)); + + for (int idx = 0; idx < 4; ++idx) + _objList[idx].remove(); + + if (flag) { + int v = _field420 - 758; + _object10.setFrame((v++ <= 0) ? 1 : v); + _object1.setFrame((v++ <= 0) ? 1 : v); + _object2.setFrame((v++ <= 0) ? 1 : v); + _object3.setFrame((v++ <= 0) ? 1 : v); + _object4.setFrame((v++ <= 0) ? 1 : v); + _object5.setFrame((v++ <= 0) ? 1 : v); + _object6.setFrame((v++ <= 0) ? 1 : v); + _object7.setFrame((v++ <= 0) ? 1 : v); + _object8.setFrame((v++ <= 0) ? 1 : v); + _object9.setFrame((v++ <= 0) ? 1 : v); + _object11.setFrame((v++ <= 0) ? 1 : v); + } + + _object10.setPosition(Common::Point(210, yp)); + yp += 12; + _object1.setPosition(Common::Point(210, yp)); + yp += 12; + _object2.setPosition(Common::Point(210, yp)); + yp += 12; + _object3.setPosition(Common::Point(210, yp)); + yp += 12; + _object4.setPosition(Common::Point(210, yp)); + yp += 12; + _object5.setPosition(Common::Point(210, yp)); + yp += 12; + _object6.setPosition(Common::Point(210, yp)); + yp += 12; + _object7.setPosition(Common::Point(210, yp)); + yp += 12; + _object8.setPosition(Common::Point(210, yp)); + yp += 12; + _object9.setPosition(Common::Point(210, yp)); + yp += 12; + _object11.setPosition(Common::Point(210, yp)); + + if (!_field41A) { + R2_GLOBALS._sound3.stop(); + _field41C = 0; + + if (_field420 == 756) { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_USE); + _sceneMode = 12; + _stripManager.start(212, this); + } else { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } + } + } + + SceneExt::dispatch(); +} + +void Scene325::setMessage(int resNum, int lineNum) { + Common::String msg = g_resourceManager->getMessage(resNum, lineNum); + + if (!msg.empty()) { + Common::String msgText = parseMessage(msg); + + _text1._fontNumber = _iconFontNumber; + _text1._color1 = 92; + _text1._color2 = 0; + _text1._width = 221; + _text1.fixPriority(20); + _text1.setup(msgText); + _text1.setPosition(Common::Point(49, 19)); + + R2_GLOBALS._sceneObjects->draw(); + + if ((_soundCount != 0) && (R2_GLOBALS._speechSubtitles != 2)) { + _sceneMode = 15; + R2_GLOBALS._playStream.play(_soundQueue[_soundIndex++], this); + } + } else { + _field412 = 13; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.hide(); + + _icon4.setPosition(Common::Point(80, 62)); + _icon4._sceneRegionId = 5; + _icon4.hideIcon(); + + _palette.loadPalette(160); + _sceneMode = 11; + BF_GLOBALS._scenePalette.addFader(&_palette._palette[0], 256, 5, this); + } +} + +/** + * Parses a message to be displayed on the console to see whether there are any sounds to be played. + */ +Common::String Scene325::parseMessage(const Common::String &msg) { + _soundIndex = 0; + _soundCount = 0; + + const char *msgP = msg.c_str(); + while (*msgP == '!') { + // Get the sound number + _soundQueue[_soundCount++] = atoi(++msgP); + + while (!((*msgP == '\0') || (*msgP < '0') || (*msgP > '9'))) + ++msgP; + } + + return Common::String(msgP); +} /*-------------------------------------------------------------------------- * Scene 400 - Science Lab * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 8ee8c09873..ff5d5d63a4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -324,6 +324,58 @@ public: virtual void signal(); }; +class Scene325: public SceneExt { + class Icon: public SceneActor { + public: + int _lookLineNum, _field98; + bool _pressed; + SceneObject _object1, _object2; + SceneText _sceneText1, _sceneText2; + + Icon(); + virtual Common::String getClassName() { return "Scene325_Icon"; } + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void process(Event &event); + + void setIcon(int id); + void showIcon(); + void hideIcon(); + }; + +private: + void removeText(); + void consoleAction(int id); + void setMessage(int resNum, int lineNum); + Common::String parseMessage(const Common::String &msg); +public: + int _field412, _iconFontNumber, _field416, _field418; + int _field41A, _field41C, _field41E, _field420; + int _soundCount, _soundIndex; + int _soundQueue[10]; + SpeakerQuinn _quinnSpeaker; + ScenePalette _palette; + SceneHotspot _background, _item2; + SceneObject _object1, _object2, _object3, _object4, _object5; + SceneObject _object6, _object7, _object8, _object9, _object10; + SceneObject _object11, _object12, _object13; + SceneObject _objList[4]; + Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6; + ASoundExt _sound1; + SequenceManager _sequenceManager1; + SceneText _text1; +public: + Scene325(); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + + class Scene400: public SceneExt { /* Items */ class Terminal: public NamedHotspot { -- cgit v1.2.3 From 8327189f8c24d47ca4e746ea0f6b230028b3ed4c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 Jan 2012 20:33:00 +0100 Subject: TSAGE: R2R - Implement scene 1100 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 644 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 61 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 166 ++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 22 + 5 files changed, 894 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 157f222012..260eb701f2 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -100,6 +100,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1020: return new Scene1020(); case 1100: + return new Scene1100(); case 1200: case 1330: case 1500: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 1949d19d80..5a6a70015c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -212,5 +212,649 @@ void Scene1020::dispatch() { Scene::dispatch(); } + +/*-------------------------------------------------------------------------- + * Scene 1100 - + * + *--------------------------------------------------------------------------*/ +Scene1100::Scene1100() { + _field412 = 0; + _field414 = 0; +} + +void Scene1100::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); +} + +bool Scene1100::Actor16::startAction(CursorType action, Event &event) { + Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS.getFlag(52)) { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_field412 = 327; + else + scene->_field412 = 328; + scene->_sceneMode = 53; + scene->setAction(&scene->_sequenceManager1, scene, 1122, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 55; + if (R2_GLOBALS._v565AE >= 3) { + if (R2_GLOBALS._player._characterIndex == 1) + scene->_stripManager.start3(329, scene, R2_GLOBALS._stripManager_lookupList); + else + scene->_stripManager.start3(330, scene, R2_GLOBALS._stripManager_lookupList); + } else { + ++R2_GLOBALS._v565AE; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_stripManager.start3(304, scene, R2_GLOBALS._stripManager_lookupList); + else + scene->_stripManager.start3(308, scene, R2_GLOBALS._stripManager_lookupList); + } + } + return true; +} + +bool Scene1100::Actor17::startAction(CursorType action, Event &event) { + Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case R2_NEGATOR_GUN: + if (_visage == 1105) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1114; + scene->setAction(&scene->_sequenceManager1, scene, 1114, &R2_GLOBALS._player, &scene->_actor17, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } + break; + case R2_7: + // No break on purpose + case R2_44: + if (_visage == 1105) { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == 1) { + scene->_sceneMode = 1112; + scene->setAction(&scene->_sequenceManager1, scene, 1112, &R2_GLOBALS._player, &scene->_actor17, NULL); + } else { + scene->_sceneMode = 1115; + scene->setAction(&scene->_sequenceManager1, scene, 1115, &R2_GLOBALS._player, &scene->_actor17, NULL); + } + return true; + } else if (_strip == 2) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1113; + if (R2_GLOBALS._player._characterIndex == 1) { + scene->setAction(&scene->_sequenceManager1, scene, 1113, &R2_GLOBALS._player, &scene->_actor17, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 1118, &R2_GLOBALS._player, &scene->_actor17, NULL); + } + return true; + } else { + return SceneActor::startAction(action, event); + } + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +bool Scene1100::Actor18::startAction(CursorType action, Event &event) { + Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_TALK) && (!R2_GLOBALS.getFlag(54)) && (R2_GLOBALS.getFlag(52))) { + scene->_field412 = 0; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 53; + scene->setAction(&scene->_sequenceManager1, scene, 1122, &R2_GLOBALS._player, NULL); + return true; + } + + return SceneActor::startAction(action, event); +} + +void Scene1100::postInit(SceneObjectList *OwnerList) { + if ((R2_GLOBALS._sceneManager._previousScene == 300) || (R2_GLOBALS._sceneManager._previousScene == 1100)) + loadScene(1150); + else + loadScene(1100); + + if ((R2_GLOBALS._sceneManager._previousScene == 1000) && (!R2_GLOBALS.getFlag(44))) { + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._v5589E.left = 0; + R2_GLOBALS._v5589E.right = 200; + } + + if (R2_GLOBALS._player._characterScene[1] == 1100) + R2_GLOBALS._sceneManager._previousScene = 1100; + + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._v5589E.left = 0; + R2_GLOBALS._v5589E.right = 200; + } + + SceneExt::postInit(); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._sceneManager._previousScene = 1000; + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_chiefSpeaker); + + warning("sub1B007(65, 65, 65);"); + + _actor2.postInit(); + _actor2.setup(1100, 1, 1); + _actor2.fixPriority(10); + + R2_GLOBALS._scrollFollower = NULL; + + _item3.setDetails(Rect(56, 47, 68, 83), 1100, 7, -1, -1, 1, NULL); + _item4.setDetails(Rect(167, 132, 183, 167), 1100, 7, -1, -1, 1, NULL); + _item5.setDetails(Rect(26, 112, 87, 145), 1100, 13, -1, -1, 1, NULL); + _item7.setDetails(Rect(4, 70, 79, 167), 1100, 16, -1, -1, 1, NULL); + + R2_GLOBALS._sound1.stop(); + + if (R2_GLOBALS._sceneManager._previousScene == 300) { + if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._player._characterScene[1] = 1100; + R2_GLOBALS._player._characterScene[2] = 1100; + _actor2.setPosition(Common::Point(150, 30)); + R2_GLOBALS._sound1.play(93); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor16.postInit(); + _actor16.hide(); + if (R2_GLOBALS._player._characterIndex == 1) + _actor16.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + else + _actor16.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + + _actor18.postInit(); + _actor18.setup(1113, 3, 1); + _actor18.setPosition(Common::Point(181, 125)); + _actor18.fixPriority(110); + + if (R2_GLOBALS.getFlag(54)) + _actor18.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); + else + _actor18.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL); + + _actor17.postInit(); + _actor17.setup(1105, 3, 1); + _actor17.setPosition(Common::Point(312, 165)); + _actor17._numFrames = 5; + _actor17.setDetails(1100, 22, 23, 24, 1, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1512, 1, 1); + _actor1.setPosition(Common::Point(187, -25)); + _actor1.fixPriority(48); + _actor1._moveDiff.y = 1; + _actor1.setDetails(1100, 37, -1, -1, 1, (SceneItem *) NULL); + + _sceneMode = 20; + + setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); + } else if (R2_GLOBALS._sceneManager._previousScene == 1000) { + _actor2.setPosition(Common::Point(50, 30)); + _field414 = 0; + _palette1.loadPalette(1101); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player._effect = 5; + R2_GLOBALS._player._field9C = _field312; + R2_GLOBALS._player.setup(1102, 3, 2); + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player.setPosition(Common::Point(111,-20)); + R2_GLOBALS._player.fixPriority(150); + R2_GLOBALS._player._moveRate = 30; + R2_GLOBALS._player._moveDiff = Common::Point(16, 2); + + _object1.setup2(1104, 2, 1, 175, 125, 102, 1); + _object2.setup2(1102, 5, 1, 216, 167, 1, 0); + + _actor12.postInit(); + _actor12.setup(1113, 2, 1); + _actor12.setPosition(Common::Point(67, 151)); + _actor12.fixPriority(255); + + _actor3.postInit(); + _actor3.setup(1102, 6, 1); + _actor3._moveRate = 30; + _actor3._moveDiff.x = 2; + + _actor4.postInit(); + _actor4.setup(1102, 6, 2); + _actor4._moveRate = 30; + _actor4._moveDiff.x = 2; + _actor4._effect = 5; + _actor4._field9C = _field312; + + R2_GLOBALS._sound1.play(86); + + _sceneMode = 0; + + setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); + } else { + _actor2.setPosition(Common::Point(180, 30)); + if (R2_GLOBALS.getFlag(52)) + R2_GLOBALS._sound1.play(98); + else + R2_GLOBALS._sound1.play(95); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + _actor16.postInit(); + + if (R2_GLOBALS.getFlag(52)) { + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(19, 7, 1); + _actor16.setup(29, 6, 1); + } else { + R2_GLOBALS._player.setup(29, 7, 1); + _actor16.setup(19, 6, 1); + } + R2_GLOBALS._player.setPosition(Common::Point(140, 124)); + _actor16.setPosition(Common::Point(237, 134)); + R2_GLOBALS._player.enableControl(); + } else { + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(1107, 2, 1); + _actor16.setup(1107, 4, 1); + R2_GLOBALS._player.setPosition(Common::Point(247, 169)); + _actor16.setPosition(Common::Point(213, 169)); + } else { + R2_GLOBALS._player.setup(1107, 4, 1); + _actor16.setup(1107, 2, 1); + R2_GLOBALS._player.setPosition(Common::Point(213, 169)); + _actor16.setPosition(Common::Point(247, 169)); + } + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } + + if (R2_GLOBALS._player._characterIndex == 1) + _actor16.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + else + _actor16.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + + _actor18.postInit(); + _actor18.setup(1113, 3, 1); + _actor18.setPosition(Common::Point(181, 125)); + _actor18.fixPriority(110); + + if (R2_GLOBALS.getFlag(54)) + _actor18.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); + else + _actor18.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL); + + if (!R2_GLOBALS.getFlag(52)) { + _actor17.postInit(); + if (R2_GLOBALS.getFlag(53)) + _actor17.setup(1106, 2, 4); + else + _actor17.setup(1105, 4, 4); + + _actor17.setPosition(Common::Point(17, 54)); + _actor17._numFrames = 5; + + if (R2_GLOBALS.getFlag(53)) + _actor17.setDetails(1100, 28, -1, -1, 1, (SceneItem *) NULL); + else + _actor17.setDetails(1100, 22, 23, 24, 1, (SceneItem *) NULL); + + _actor17.fixPriority(200); + } + _actor1.postInit(); + _actor1.setup(1512, 1, 1); + _actor1.setPosition(Common::Point(187, 45)); + _actor1.fixPriority(48); + _actor1._moveDiff.y = 1; + _actor1.setDetails(1100, 37, -1, -1, 1, (SceneItem *) NULL); + } + _item6.setDetails(Rect(123, 69, 222, 105), 1100, 13, -1, -1, 1, NULL); + _item2.setDetails(Rect(0, 0, 480, 46), 1100, 0, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 480, 200), 1100, 40, 41, 42, 1, NULL); +} + +void Scene1100::remove() { + R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; + if (_sceneMode > 20) + R2_GLOBALS._sound1.fadeOut2(NULL); + g_globals->gfxManager()._bounds.moveTo(Common::Point(0, 0)); + R2_GLOBALS._v58CE2 = 1; + SceneExt::remove(); +} + +void Scene1100::signal() { + switch (_sceneMode++) { + case 0: + _actor3.setPosition(Common::Point(350, 20)); + setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); + break; + case 1:{ + Common::Point pt(-150, 20); + NpcMover *mover = new NpcMover(); + _actor3.addMover(mover, &pt, this); + _actor4.setPosition(Common::Point(350, 55)); + + Common::Point pt2(-150, 55); + NpcMover *mover2 = new NpcMover(); + _actor4.addMover(mover2, &pt2, NULL); + } + break; + case 2: + _actor3.remove(); + _actor4.remove(); + _actor5.postInit(); + _actor6.postInit(); + _actor7.postInit(); + _actor8.postInit(); + _actor9.postInit(); + _actor10.postInit(); + setAction(&_sequenceManager1, this, 1102, &_actor5, &_actor6, &_actor7, &_actor8, &_actor9, &_actor10, NULL); + break; + case 3: { + R2_GLOBALS._sound2.play(84); + R2_GLOBALS._player.setPosition(Common::Point(-50, 126)); + Common::Point pt(350, 226); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 4: + _actor18.postInit(); + _actor18.show(); + setAction(&_sequenceManager1, this, 1101, &_actor18, &_actor10, NULL); + break; + case 5: + _actor13.postInit(); + _actor13._effect = 6; + _actor13.setup(1103, 3, 1); + _actor13._moveRate = 30; + + _actor14.postInit(); + _actor14._effect = 6; + _actor14.setup(1103, 4, 1); + _actor4._moveRate = 25; + + _actor13.setAction(&_sequenceManager2, this, 1109, &_actor13, &_actor14, NULL); + break; + case 6: { + _actor13.remove(); + _actor14.remove(); + R2_GLOBALS._player.setPosition(Common::Point(-50, 136)); + R2_GLOBALS._sound2.play(84); + Common::Point pt(350, 236); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 7: + setAction(&_sequenceManager1, this, 1103, &_actor18, &_actor10); + break; + case 8: + R2_GLOBALS._player._effect = 0; + _actor11.postInit(); + setAction(&_sequenceManager1, this, 1105, &R2_GLOBALS._player, &_actor10, &_actor11, &_actor18, NULL); + break; + case 9: + _object1.proc27(); + + _actor15.postInit(); + _actor15.setup(1103, 2, 1); + _actor15._moveRate = 30; + _actor15.setAction(&_sequenceManager3, this, 1107, &_actor15, NULL); + break; + case 10: + _actor13.postInit(); + _actor13.setup(1103, 1, 1); + _actor13._moveRate = 15; + _actor13.setAction(&_sequenceManager2, this, 1108, &_actor13, NULL); + break; + case 11: { + setAction(&_sequenceManager1, this, 1116, &_actor11, &_actor10, &_actor12, NULL); + R2_GLOBALS._player._effect = 5; + R2_GLOBALS._player.setup(1102, 3, 2); + R2_GLOBALS._player.setPosition(Common::Point(-50, 131)); + R2_GLOBALS._sound2.play(84); + Common::Point pt(350, 231); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 12: + // Really nothing + break; + case 13: + _actor17.postInit(); + R2_GLOBALS._scrollFollower = &_actor17; + + _actor11.setup(1100, 2, 1); + _actor11.setPosition(Common::Point(408, 121)); + + _actor10.setup(1100, 3, 5); + _actor10.setPosition(Common::Point(409, 121)); + + setAction(&_sequenceManager1, this, 1104, &_actor17, NULL); + break; + case 14: + setAction(&_sequenceManager1, this, 1100, &_actor11, &_actor10, NULL); + break; + case 15: + R2_GLOBALS._sceneManager.changeScene(1000); + break; + case 20: { + Common::Point pt(187, -13); + NpcMover *mover = new NpcMover(); + _actor1.addMover(mover, &pt, this); + } + break; + case 21: { + R2_GLOBALS._sound2.play(92); + _actor17.animate(ANIM_MODE_5, NULL); + Common::Point pt(187, 45); + NpcMover *mover = new NpcMover(); + _actor1.addMover(mover, &pt, this); + } + break; + case 22: + setAction(&_sequenceManager1, this, 1110, &_actor16, &R2_GLOBALS._player, NULL); + break; + case 23: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(312, this); + R2_GLOBALS._player.setAction(&_sequenceManager1, this, 1119, &R2_GLOBALS._player, NULL); + break; + case 24: + if (!_stripManager._endHandler) + R2_GLOBALS._player.disableControl(); + break; + case 25: + R2_GLOBALS._player.disableControl(); + _stripManager._lookupList[9] = 1; + _stripManager._lookupList[10] = 1; + _stripManager._lookupList[11] = 1; + R2_GLOBALS._sound1.play(95); + setAction(&_sequenceManager1, this, 1111, &_actor17, &R2_GLOBALS._player, &_actor16, NULL); + break; + case 26: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(302, this); + break; + case 27: + R2_GLOBALS._player.disableControl(); + setAction(&_sequenceManager1, this, 1120, &_actor16, &R2_GLOBALS._player, NULL); + break; + case 28: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(303, this); + break; + case 51: + R2_GLOBALS.setFlag(53); + _actor17.setDetails(1100, 28, -1, -1, 3, (SceneItem *) NULL); + // No break on purpose + case 50: + // No break on purpose + case 29: + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + case 52: + R2_GLOBALS._sound1.play(98); + R2_GLOBALS.setFlag(52); + R2_GLOBALS._player.disableControl(); + _sceneMode = 1116; + if (R2_GLOBALS._player._characterIndex == 1) { + setAction(&_sequenceManager1, this, 1116, &R2_GLOBALS._player, NULL); + _actor16.setAction(&_sequenceManager2, NULL, 1123, &_actor16, NULL); + } else { + setAction(&_sequenceManager1, this, 1124, &R2_GLOBALS._player, NULL); + _actor16.setAction(&_sequenceManager2, NULL, 1117, &_actor16, NULL); + } + break; + case 53: + _sceneMode = 54; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (_field412 == 0) { + R2_GLOBALS.setFlag(55); + if (R2_GLOBALS.getFlag(55)) { + if (R2_GLOBALS._player._characterIndex == 1) + _stripManager.start(318, this); + else + _stripManager.start(323, this); + } else { + // This part is totally useless as flag 55 has been set right before the check + if (R2_GLOBALS._player._characterIndex == 1) + _stripManager.start(317, this); + else + _stripManager.start(322, this); + } + } else { + _stripManager.start3(_field412, this, _stripManager._lookupList); + } + break; + case 54: + if (_stripManager._field2E8 == 1) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1125; + setAction(&_sequenceManager1, this, 1125, &R2_GLOBALS._player, &_actor16, NULL); + } else + R2_GLOBALS._player.enableControl(CURSOR_TALK); + break; + case 55: + R2_GLOBALS._player.enableControl(CURSOR_TALK); + R2_GLOBALS._player._canWalk = false; + break; + case 99: + R2_GLOBALS._player._characterScene[1] = 300; + R2_GLOBALS._player._characterScene[2] = 300; + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._sceneManager.changeScene(300); + break; + case 1112: + _sceneMode = 50; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start3(313, this, _stripManager._lookupList); + break; + case 1113: + _sceneMode = 52; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._sound1.play(96); + _stripManager.start3(316, this, _stripManager._lookupList); + break; + case 1114: + _sceneMode = 51; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start3(315, this, _stripManager._lookupList); + break; + case 1115: + _sceneMode = 50; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start3(314, this, _stripManager._lookupList); + break; + case 1116: + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + _stripManager._lookupList[9] = 1; + _stripManager._lookupList[10] = 1; + _stripManager._lookupList[11] = 1; + break; + case 1125: { + _sceneMode = 99; + R2_GLOBALS._sound2.play(100); + R2_GLOBALS._sound1.play(101); + Common::Point pt(187, -13); + NpcMover *mover = new NpcMover(); + _actor1.addMover(mover, &pt, this); + } + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + } +} + +void Scene1100::dispatch() { + if ((g_globals->_sceneObjects->contains(&_actor10)) && (_actor10._visage == 1102) && (_actor10._strip == 4) && (_actor10._frame == 1) && (_actor10._flags & OBJFLAG_HIDING)) { + if (_field414 == 1) { + _field414 = 2; + R2_GLOBALS._scenePalette.refresh(); + } + } else { + if (_field414 == 2) + R2_GLOBALS._scenePalette.refresh(); + _field414 = 1; + } + + Scene::dispatch(); + + if (R2_GLOBALS._player._bounds.contains(_actor13._position)) + _actor13._shade = 3; + else + _actor13._shade = 0; + + if (R2_GLOBALS._player._bounds.contains(_actor14._position)) + _actor14._shade = 3; + else + _actor14._shade = 0; + + if (R2_GLOBALS._player._bounds.contains(_actor15._position)) + _actor15._shade = 3; + else + _actor15._shade = 0; +} + +void Scene1100::saveCharacter(int characterIndex) { + if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::saveCharacter(characterIndex); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index f0444de70d..a21869b6ad 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -56,6 +56,67 @@ public: virtual void dispatch(); }; +class Scene1100 : public SceneExt { + class Actor16 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor17 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + class Actor18 : public SceneActor { + public: + bool startAction(CursorType action, Event &event); + }; + +public: + int _field412, _field414; + SpeakerSeeker1100 _seekerSpeaker; + SpeakerQuinn1100 _quinnSpeaker; + SpeakerChief1100 _chiefSpeaker; + ScenePalette _palette1; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + NamedHotspot _item6; + NamedHotspot _item7; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SceneActor _actor10; + SceneActor _actor11; + SceneActor _actor12; + SceneActor _actor13; + SceneActor _actor14; + SceneActor _actor15; + BackgroundSceneObject _object1; + BackgroundSceneObject _object2; + Actor16 _actor16; + Actor17 _actor17; + Actor18 _actor18; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + SequenceManager _sequenceManager3; + + Scene1100(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); + virtual void saveCharacter(int characterIndex); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 26ed818819..b5fd99b0b4 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -26,6 +26,7 @@ #include "tsage/graphics.h" #include "tsage/staticres.h" #include "tsage/ringworld2/ringworld2_scenes0.h" +#include "tsage/ringworld2/ringworld2_scenes1.h" #include "tsage/ringworld2/ringworld2_scenes2.h" #include "tsage/ringworld2/ringworld2_scenes3.h" @@ -246,6 +247,64 @@ SpeakerCaretaker2450::SpeakerCaretaker2450() { _numFrames = 0; } +//---------------------------------------------------------------------------- +// Classes related to CHIEF +//---------------------------------------------------------------------------- + +SpeakerChief1100::SpeakerChief1100() { + _speakerName = "CHIEF"; + _color1 = 8; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerChief1100::proc15() { + int v = _fieldF6; + Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; + + if (!_object2) { + _object2 = &scene->_actor18; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4080, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(4080, 3, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 100: + _numFrames = 0; + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setStrip(_object1._strip - 1); + _object1.setFrame(_object1.getFrameCount()); + _object1.animate(ANIM_MODE_6, this); + break; + default: + signal(); + break; + } +} + //---------------------------------------------------------------------------- // Classes related to GUARD //---------------------------------------------------------------------------- @@ -1046,6 +1105,54 @@ void SpeakerQuinn300::proc15() { } } +void SpeakerQuinn1100::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (v == 0) + return; + + if (R2_GLOBALS._player._characterIndex == 1) { + _object2 = &R2_GLOBALS._player; + } else { + Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor16; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1108, 7, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1109, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 3: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1109, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerQuinn2435::proc15() { int v = _fieldF6; @@ -1758,6 +1865,65 @@ void SpeakerSeeker300::proc15() { } } +void SpeakerSeeker1100::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (v == 0) + return; + + if (R2_GLOBALS._player._characterIndex == 2) { + _object2 = &R2_GLOBALS._player; + } else { + Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor16; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1108, 1, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 2: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1108, 3, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 3: + _object1.setPosition(Common::Point(197, 134)); + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1108, 5, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 4: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1109, 7, 1); + _object1.animate(ANIM_MODE_5, this); + break; + case 5: + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1109, 3, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + void SpeakerSeeker2435::proc15() { int v = _fieldF6; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index cbd440e1a9..13c770a4a3 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -82,6 +82,16 @@ public: virtual Common::String getClassName() { return "SpeakerCaretaker2450"; } }; +// Classes related to Chief + +class SpeakerChief1100 : public VisualSpeaker { +public: + SpeakerChief1100(); + + virtual Common::String getClassName() { return "SpeakerChief1100"; } + virtual void proc15(); +}; + // Classes related to Guard class SpeakerGuard : public VisualSpeaker { @@ -253,6 +263,12 @@ public: virtual void proc15(); }; +class SpeakerQuinn1100 : public SpeakerQuinn { +public: + virtual Common::String getClassName() { return "SpeakerQuinn1100"; } + virtual void proc15(); +}; + class SpeakerQuinn2435 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn2435"; } @@ -385,6 +401,12 @@ public: virtual void proc15(); }; +class SpeakerSeeker1100 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker1100"; } + virtual void proc15(); +}; + class SpeakerSeeker2435 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker2435"; } -- cgit v1.2.3 From 9ddabeca32c453d77d9407e8134ab499550d19d1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 Jan 2012 21:47:11 +0100 Subject: TSAGE: R2R - Fix sub1B00, rename it to scalePalette Thanks wjp for the namings --- engines/tsage/ringworld2/ringworld2_logic.cpp | 33 ++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_logic.h | 3 ++- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 36 +++---------------------- engines/tsage/ringworld2/ringworld2_scenes3.h | 1 - 5 files changed, 38 insertions(+), 37 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 260eb701f2..1a9a03b37c 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -270,7 +270,7 @@ SceneExt::SceneExt(): Scene() { _stripManager._onBegin = SceneExt::startStrip; _stripManager._onEnd = SceneExt::endStrip; - for (int i = 0; i < 44; i++) + for (int i = 0; i < 256; i++) _field312[i] = 0; _field372 = _field37A = 0; _savedPlayerEnabled = false; @@ -478,6 +478,37 @@ void SceneExt::saveCharacter(int characterIndex) { R2_GLOBALS._player._characterFrame[characterIndex] = R2_GLOBALS._player._frame; } +void SceneExt::scalePalette(int RFactor, int GFactor, int BFactor) { + byte *tmpPal = R2_GLOBALS._scenePalette._palette; + byte newR, newG, newB; + int tmp, varC, varD = 0; + + for (int i = 0; i < 256; i++) { + newR = (RFactor * tmpPal[(3 * i)]) / 100; + newG = (GFactor * tmpPal[(3 * i) + 1]) / 100; + newB = (BFactor * tmpPal[(3 * i) + 2]) / 100; + + varC = 769; + for (int j = 255; j >= 0; j--) { + tmp = abs(tmpPal[(3 * j)] - newR); + if (tmp >= varC) + continue; + + tmp += abs(tmpPal[(3 * j) + 1] - newG); + if (tmp >= varC) + continue; + + tmp += abs(tmpPal[(3 * j) + 2] - newB); + if (tmp >= varC) + continue; + + varC = tmp; + varD = j; + } + this->_field312[i] = varD; + } +} + /*--------------------------------------------------------------------------*/ void SceneHandlerExt::postInit(SceneObjectList *OwnerList) { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 4805de48bb..bb6aa25f85 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -79,7 +79,7 @@ private: static void startStrip(); static void endStrip(); public: - byte _field312[44]; + byte _field312[256]; int _field372; bool _savedPlayerEnabled; bool _savedUiEnabled; @@ -106,6 +106,7 @@ public: bool display(CursorType action, Event &event); void fadeOut(); void clearScreen(); + void scalePalette(int RFactor, int GFactor, int BFactor); }; class SceneHandlerExt: public SceneHandler { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 5a6a70015c..e773c52805 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -355,7 +355,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_chiefSpeaker); - warning("sub1B007(65, 65, 65);"); + scalePalette(65, 65, 65); _actor2.postInit(); _actor2.setup(1100, 1, 1); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 5ae15d9c08..266098a2ca 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -3929,37 +3929,6 @@ void Scene3800::sub110BBD() { } } -void Scene3800::sub1B007(int arg1, int arg2, int arg3) { - byte *tmpPal = R2_GLOBALS._scenePalette._palette; - byte newR, newG, newB; - int tmp, varC, varD = 0; - - for (int i = 0; i < 256; i++) { - newR = (arg1 * tmpPal[(3 * i)]) / 100; - newG = (arg2 * tmpPal[(3 * i) + 1]) / 100; - newB = (arg3 * tmpPal[(3 * i) + 2]) / 100; - - varC = 769; - for (int j = 255; j >= 0; j--) { - tmp = abs(tmpPal[(3 * j)] - newR); - if (tmp >= varC) - continue; - - tmp += abs(tmpPal[(3 * j) + 1] - newG); - if (tmp >= varC) - continue; - - tmp += abs(tmpPal[(3 * j) + 2] - newB); - if (tmp >= varC) - continue; - - varC = tmp; - varD = j; - } - this->_field312[i] = varD; - } -} - void Scene3800::postInit(SceneObjectList *OwnerList) { _field412 = 0; @@ -3968,7 +3937,7 @@ void Scene3800::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); R2_GLOBALS._sound1.play(231); - warning("sub1B007(65, 65, 65)"); + scalePalette(65, 65, 65); setZoomPercents(87, 40, 144, 100); @@ -4218,7 +4187,8 @@ void Scene3900::postInit(SceneObjectList *OwnerList) { _exit5._insideArea = false; _exit5._moving = false; - warning("sub1B007(65, 65, 65)"); + scalePalette(65, 65, 65); + _exit1.setDest(Common::Point(160, 126)); _exit1._enabled = true; _exit1._insideArea = false; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index c925871747..8a51aa5251 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -695,7 +695,6 @@ public: Scene3800(); void initScene3800(); void sub110BBD(); - void sub1B007(int arg1, int arg2, int arg3); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); -- cgit v1.2.3 From 5a9c189b22cb40fc669a42bd8a91fe2668818a79 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 8 Jan 2012 21:03:42 +1100 Subject: TSAGE: Fix R2R crashes saying 'unknown message' --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 1a9a03b37c..fa7895f407 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -342,6 +342,7 @@ void SceneExt::loadScene(int sceneNum) { bool SceneExt::display(CursorType action, Event &event) { switch (action) { case CURSOR_CROSSHAIRS: + case CURSOR_WALK: return false; case CURSOR_LOOK: SceneItem::display2(1, R2_GLOBALS._randomSource.getRandomNumber(4)); -- cgit v1.2.3 From a4a2878a3716dfbb3b04e6d10d68a99c55a4dd85 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 8 Jan 2012 20:41:18 +0100 Subject: TSAGE: R2R - Implement scene 1500 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 4 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 159 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 13 ++ 3 files changed, 176 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index fa7895f407..ee49c238ee 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -36,6 +36,8 @@ namespace TsAGE { namespace Ringworld2 { Scene *Ringworld2Game::createScene(int sceneNumber) { + warning("Switching to scene %d", sceneNumber); + switch (sceneNumber) { /* Scene group #0 */ case 50: @@ -103,7 +105,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { return new Scene1100(); case 1200: case 1330: + error("Missing scene %d from group 1", sceneNumber); case 1500: + return new Scene1500(); case 1525: case 1530: case 1550: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index e773c52805..17422019b0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -856,5 +856,164 @@ void Scene1100::saveCharacter(int characterIndex) { R2_GLOBALS._sound1.fadeOut2(NULL); SceneExt::saveCharacter(characterIndex); } + +/*-------------------------------------------------------------------------- + * Scene 1500 - + * + *--------------------------------------------------------------------------*/ +void Scene1500::postInit(SceneObjectList *OwnerList) { + loadScene(1500); + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._v5589E.top = 0; + R2_GLOBALS._v5589E.bottom = 200; + setZoomPercents(170, 13, 240, 100); + SceneExt::postInit(); + scalePalette(65, 65, 65); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor2.postInit(); + _actor2.setup(1401, 1, 1); + _actor2._effect = 5; + _actor2.fixPriority(10); + _actor2._field9C = _field312; + + _actor1.postInit(); + _actor1.setup(1400, 1, 1); + _actor1._moveDiff = Common::Point(1, 1); + _actor1._linkedActor = &_actor2; + + if (R2_GLOBALS._sceneManager._previousScene != 1010) { + _actor4.postInit(); + _actor4.setup(1401, 2, 1); + _actor4._effect = 5; + _actor4.fixPriority(10); + _actor4._field9C = _field312; + + _actor3.postInit(); + _actor3._moveRate = 30; + _actor3._moveDiff = Common::Point(1, 1); + _actor3._linkedActor = &_actor4; + } + + if (R2_GLOBALS._sceneManager._previousScene == 300) { + _actor1.setPosition(Common::Point(189, 139), 5); + + _actor3.setup(1400, 1, 2); + _actor3.setPosition(Common::Point(148, 108), 0); + + _sceneMode = 20; + R2_GLOBALS._sound1.play(110); + } else if (R2_GLOBALS._sceneManager._previousScene == 1550) { + _actor1.setPosition(Common::Point(189, 139), 5); + + _actor3.setup(1400, 2, 1); + _actor3.changeZoom(-1); + _actor3.setPosition(Common::Point(298, 258), 5); + + _sceneMode = 10; + R2_GLOBALS._sound1.play(106); + } else { + _actor1.setPosition(Common::Point(289, 239), -30); + _sceneMode = 0; + R2_GLOBALS._sound1.play(102); + } + signal(); +} + +void Scene1500::remove() { + R2_GLOBALS._v5589E.top = 3; + R2_GLOBALS._v5589E.bottom = 168; + R2_GLOBALS._v58CE2 = 1; + + SceneExt::remove(); +} + +void Scene1500::signal() { + switch(_sceneMode++) { + case 0: + R2_GLOBALS.setFlag(25); + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + // No break on purpose + case 1: + if (_actor1._yDiff < 50) { + _actor1.setPosition(Common::Point(289, 239), _actor1._yDiff + 1); + _sceneMode = 1; + } + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 2: { + Common::Point pt(189, 139); + NpcMover *mover = new NpcMover(); + _actor1.addMover(mover, &pt, this); + } + break; + case 3: + if (_actor1._yDiff > 5) { + _actor1.setPosition(Common::Point(189, 139), _actor1._yDiff - 1); + _sceneMode = 3; + } + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 13: + R2_GLOBALS._player._characterIndex = R2_MIRANDA; + // No break on purpose + case 4: + R2_GLOBALS._sceneManager.changeScene(300); + break; + case 10: + // No break on purpose + case 20: + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 11: { + Common::Point pt(148, 108); + NpcMover *mover = new NpcMover(); + _actor3.addMover(mover, &pt, this); + } + break; + case 12: + setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL); + break; + case 21: { + Common::Point pt(-2, -42); + NpcMover *mover = new NpcMover(); + _actor3.addMover(mover, &pt, NULL); + signal(); + } + break; + case 22: + if (_actor1._yDiff < 50) { + _actor1.setPosition(Common::Point(189, 139), _actor1._yDiff + 1); + _sceneMode = 22; + } + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 23: { + Common::Point pt(-13, -61); + NpcMover *mover = new NpcMover(); + _actor1.addMover(mover, &pt, this); + } + break; + case 24: + R2_GLOBALS._sceneManager.changeScene(300); + break; + default: + break; + } +} + +void Scene1500::dispatch() { + if (_sceneMode > 10) { + float yDiff = sqrt((float) (_actor3._position.x * _actor3._position.x) + (_actor3._position.y * _actor3._position.y)); + if (yDiff > 6) + _actor3.setPosition(_actor3._position, yDiff); + } + + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index a21869b6ad..a88451e406 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -117,6 +117,19 @@ public: virtual void saveCharacter(int characterIndex); }; +class Scene1500 : public SceneExt { +public: + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 2dc3111bbefbd1233db08e1d05d5eab90e1e264d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 8 Jan 2012 21:50:32 +0100 Subject: TSAGE: R2R - Implement scene 1525 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 ++ engines/tsage/ringworld2/ringworld2_scenes1.cpp | 44 ++++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 8 +++++ 3 files changed, 54 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ee49c238ee..5eccafefdf 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -107,8 +107,11 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1330: error("Missing scene %d from group 1", sceneNumber); case 1500: + // Cutscene: Ship landing return new Scene1500(); case 1525: + // Cutscene - Ship + return new Scene1525(); case 1530: case 1550: case 1575: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 17422019b0..1afb1b6509 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -858,7 +858,7 @@ void Scene1100::saveCharacter(int characterIndex) { } /*-------------------------------------------------------------------------- - * Scene 1500 - + * Scene 1500 - Cutscene: Ship landing * *--------------------------------------------------------------------------*/ void Scene1500::postInit(SceneObjectList *OwnerList) { @@ -1015,5 +1015,47 @@ void Scene1500::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 1525 - Cutscene - Ship + * + *--------------------------------------------------------------------------*/ +void Scene1525::postInit(SceneObjectList *OwnerList) { + loadScene(1525); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + R2_GLOBALS._player.postInit(); + if (R2_GLOBALS._sceneManager._previousScene == 525) + R2_GLOBALS._player.setup(1525, 1, 1); + else + R2_GLOBALS._player.setup(1525, 1, 16); + R2_GLOBALS._player.setPosition(Common::Point(244, 148)); + R2_GLOBALS._player.disableControl(); + + _sceneMode = 0; + setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL); +} + +void Scene1525::signal() { + switch (_sceneMode++) { + case 0: + if (R2_GLOBALS._sceneManager._previousScene == 525) + setAction(&_sequenceManager, this, 1525, &R2_GLOBALS._player, NULL); + else + setAction(&_sequenceManager, this, 1526, &R2_GLOBALS._player, NULL); + break; + case 1: + setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL); + break; + case 2: + if (R2_GLOBALS._sceneManager._previousScene == 1530) + R2_GLOBALS._sceneManager.changeScene(1550); + else + R2_GLOBALS._sceneManager.changeScene(1530); + default: + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index a88451e406..4c6d3ba6dc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -130,6 +130,14 @@ public: virtual void signal(); virtual void dispatch(); }; + +class Scene1525 : public SceneExt { +public: + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From d1e9d382143e94f2b1129a7993933825a731bfd3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 8 Jan 2012 23:56:27 +0100 Subject: TSAGE: R2R - Implement scene 1530 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 101 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 15 ++++ engines/tsage/ringworld2/ringworld2_speakers.h | 10 +++ 4 files changed, 127 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 5eccafefdf..8b4d86532d 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -113,6 +113,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Ship return new Scene1525(); case 1530: + return new Scene1530(); case 1550: case 1575: case 1580: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 1afb1b6509..997331f94c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1057,5 +1057,106 @@ void Scene1525::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 1530 - + * + *--------------------------------------------------------------------------*/ +void Scene1530::postInit(SceneObjectList *OwnerList) { + if (R2_GLOBALS._sceneManager._previousScene == 1000) + loadScene(1650); + else if (R2_GLOBALS._sceneManager._previousScene == 1580) + loadScene(1550); + else + loadScene(1530); + + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == 1000) { + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(538, this); + R2_GLOBALS._sound1.play(114); + + _sceneMode = 3; + } else if (R2_GLOBALS._sceneManager._previousScene == 1580) { + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player.setup(1516, 6, 1); + R2_GLOBALS._player.setPosition(Common::Point(160, 125)); + R2_GLOBALS._player._moveRate = 30; + R2_GLOBALS._player._moveDiff = Common::Point(4, 1); + + _actor2.postInit(); + _actor2.setup(1516, 7, 1); + _actor2.setPosition(Common::Point(121, 41)); + _actor2.animate(ANIM_MODE_2, NULL); + + _actor3.postInit(); + _actor3.setup(1516, 8, 1); + _actor3.setPosition(Common::Point(107, 116)); + _actor3.animate(ANIM_MODE_2, NULL); + + R2_GLOBALS._player.disableControl(); + Common::Point pt(480, 75); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + R2_GLOBALS._sound1.play(111); + + _sceneMode = 1; + } else { + _actor1.postInit(); + _actor1._effect = 1; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + setAction(&_sequenceManager, this, 1530, &R2_GLOBALS._player, &_actor1, NULL); + + _sceneMode = 2; + } + +} + +void Scene1530::signal() { + switch (_sceneMode - 1) { + case 0: + R2_GLOBALS._sceneManager.changeScene(1000); + break; + case 1: + R2_GLOBALS._sceneManager.changeScene(1525); + break; + case 2: + R2_GLOBALS._player.disableControl(); + _sceneMode = 4; + R2_GLOBALS._player.show(); + setAction(&_sequenceManager, this, 1650, &R2_GLOBALS._player, NULL); + break; + case 3: + R2_GLOBALS._sceneManager.changeScene(1700); + break; + default: + break; + } +} + +void Scene1530::dispatch() { + int16 x = R2_GLOBALS._player._position.x; + int16 y = R2_GLOBALS._player._position.y; + + _actor2.setPosition(Common::Point(x - 39, y - 85)); + _actor3.setPosition(Common::Point(x - 53, y - 9)); + + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 4c6d3ba6dc..4631c4f0ce 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -138,6 +138,21 @@ public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); }; + +class Scene1530 : public SceneExt { +public: + SpeakerQuinn1530 _quinnSpeaker; + SpeakerSeeker1530 _seekerSpeaker; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void dispatch(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 13c770a4a3..49ac9f555f 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -269,6 +269,11 @@ public: virtual void proc15(); }; +class SpeakerQuinn1530 : public SpeakerQuinn { +public: + virtual Common::String getClassName() { return "SpeakerQuinn1530"; } +}; + class SpeakerQuinn2435 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn2435"; } @@ -407,6 +412,11 @@ public: virtual void proc15(); }; +class SpeakerSeeker1530 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker1530"; } +}; + class SpeakerSeeker2435 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker2435"; } -- cgit v1.2.3 From 879cb00c8a15f618b7e22e96877381370e448d64 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 10 Jan 2012 20:11:47 +0100 Subject: TSAGE: R2R - Partial implementation of scene 1200 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 758 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 59 ++ 3 files changed, 818 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 8b4d86532d..d7d21154f3 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -104,6 +104,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1100: return new Scene1100(); case 1200: + return new Scene1200(); case 1330: error("Missing scene %d from group 1", sceneNumber); case 1500: @@ -113,6 +114,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Ship return new Scene1525(); case 1530: + // Cutscene - Elevator return new Scene1530(); case 1550: case 1575: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 997331f94c..3d8cd0e6dd 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -857,6 +857,761 @@ void Scene1100::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } +/*-------------------------------------------------------------------------- + * Scene 1200 - + * + *--------------------------------------------------------------------------*/ +Scene1200::Scene1200() { + _field412 = 0; + _field414 = 0; + _field416 = 0; + _field418 = 0; + _field41A = 0; + _field41C = 1; //CHECKME: Only if fixup_flag == 6?? +} + +void Scene1200::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); + s.syncAsSint16LE(_field418); + s.syncAsSint16LE(_field41A); + s.syncAsSint16LE(_field41C); +} + +Scene1200::Area1::Area1() { + _field20 = 0; +} + +void Scene1200::Area1::synchronize(Serializer &s) { + SceneArea::synchronize(s); + + s.syncAsByte(_field20); +} + +void Scene1200::Area1::Actor3::init(int state) { + _state = state; + + SceneActor::postInit(); + setup(1003, 1, 1); + fixPriority(255); + + switch (_state) { + case 1: + switch (R2_GLOBALS._v56AA6) { + case 1: + setFrame2(2); + setPosition(Common::Point(129, 101)); + break; + case 2: + setFrame2(3); + setPosition(Common::Point(135, 95)); + break; + default: + break; + } + case 2: + switch (R2_GLOBALS._v56AA7) { + case 1: + setFrame2(2); + setPosition(Common::Point(152, 101)); + break; + case 2: + setFrame2(3); + setPosition(Common::Point(158, 122)); + break; + case 3: + setFrame2(3); + setPosition(Common::Point(135, 122)); + break; + default: + break; + } + case 3: + switch (R2_GLOBALS._v56AA8) { + case 1: + setFrame2(3); + setPosition(Common::Point(158, 95)); + break; + case 2: + setFrame2(2); + setPosition(Common::Point(175, 101)); + break; + default: + break; + } + default: + break; + } + + setDetails(1200, 12, -1, -1, 2, (SceneItem *) NULL); +} + +bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._sound2.play(260); + switch (_state) { + case 1: + if (R2_GLOBALS._v56AA6 == 1) { + R2_GLOBALS._v56AA6 = 2; + setFrame2(3); + setPosition(Common::Point(135, 95)); + } else { + R2_GLOBALS._v56AA6 = 1; + setFrame2(2); + setPosition(Common::Point(129, 101)); + } + break; + case 2: + ++R2_GLOBALS._v56AA7; + if (R2_GLOBALS._v56AA7 == 4) + R2_GLOBALS._v56AA7 = 1; + + switch (R2_GLOBALS._v56AA7) { + case 1: + setFrame2(1); + setPosition(Common::Point(152, 101)); + break; + case 2: + setFrame2(3); + setPosition(Common::Point(158, 122)); + break; + case 3: + setFrame2(3); + setPosition(Common::Point(135, 122)); + break; + default: + break; + } + break; + case 3: + if (R2_GLOBALS._v56AA8 == 1) { + R2_GLOBALS._v56AA8 = 2; + setFrame2(2); + setPosition(Common::Point(175, 101)); + } else { + R2_GLOBALS._v56AA8 = 1; + setFrame2(3); + setPosition(Common::Point(158, 95)); + } + break; + default: + break; + } + + Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; + scene->_field418 = 0; + + if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) + scene->_field418 = 1; + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) + scene->_field418 = 2; + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 2)) + scene->_field418 = 3; + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 3) && (R2_GLOBALS._v56AA8 == 1)) + scene->_field418 = 4; + + return true; +} + +void Scene1200::Area1::postInit() { + Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; + + scene->_field41A = 1; + R2_GLOBALS._events.setCursor(CURSOR_USE); + proc12(1003, 1, 1, 100, 40); + proc13(1200, 11, -1, -1); + R2_GLOBALS._sound2.play(259); + _actor3.init(1); + _actor4.init(2); + _actor5.init(3); + + R2_GLOBALS._player._canWalk = false; +} + +void Scene1200::Area1::remove() { + Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; + + scene->_field41A = 0; + warning("Unexpected _sceneAreas.remove() call"); +// scene->_sceneAreas.remove(&_actor3); +// scene->_sceneAreas.remove(&_actor4); +// scene->_sceneAreas.remove(&_actor5); + _actor3.remove(); + _actor4.remove(); + _actor5.remove(); + + // sub201EA + R2_GLOBALS._sceneItems.remove((SceneItem *)this); + _actor2.remove(); + SceneArea::remove(); + R2_GLOBALS._insetUp--; + // + + R2_GLOBALS._player._canWalk = true; +} + +void Scene1200::Area1::process(Event &event) { + if (_field20 != R2_GLOBALS._insetUp) + return; + + CursorType cursor = R2_GLOBALS._events.getCursor(); + + if (_actor2._bounds.contains(event.mousePos.x + g_globals->gfxManager()._bounds.left , event.mousePos.y)) { + if (cursor == _cursorNum) + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState); + } else if (event.mousePos.y < 168) { + if (cursor != _cursorNum) { + _savedCursorNum = cursor; + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(CURSOR_INVALID); + } + if (event.eventType == EVENT_BUTTON_DOWN) { + event.handled = true; + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState); + remove(); + } + } +} + +void Scene1200::Area1::proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY) { + Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; + + _actor2.postInit(); + _actor2.setup(visage, stripFrameNum, frameNum); + _actor2.setPosition(Common::Point(posX, posY)); + _actor2.fixPriority(250); + _cursorNum = CURSOR_INVALID; + scene->_sceneAreas.push_front(this); + ++R2_GLOBALS._insetUp; + _field20 = R2_GLOBALS._insetUp; +} + +void Scene1200::Area1::proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { + _actor2.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); +} + +int Scene1200::Object1::sub51AF8(Common::Point pt) { + warning("STUB: sub1AF8()"); + return 0; +} + + +void Scene1200::postInit(SceneObjectList *OwnerList) { + Rect tmpRect; + + loadScene(1200); + SceneExt::postInit(); + + if (R2_GLOBALS._sceneManager._previousScene < 3200) + R2_GLOBALS._sound1.play(257); + + _field412 = 1; + _field414 = 0; + _field416 = 0; + _field418 = 0; + _field41A = 0; + _field41C = 0; + + if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA8 == 1) && (R2_GLOBALS._v56AA8 == 1)) + _field418 = 1; + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA8 == 1) && (R2_GLOBALS._v56AA8 == 1)) + _field418 = 2; + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA8 == 1) && (R2_GLOBALS._v56AA8 == 2)) + _field418 = 3; + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA8 == 3) && (R2_GLOBALS._v56AA8 == 1)) + _field418 = 4; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.setup(3156, 1, 6); + R2_GLOBALS._player.setPosition(Common::Point(160, 70)); + R2_GLOBALS._player._numFrames = 10; + R2_GLOBALS._player._oldCharacterScene[3] = 1200; + + _actor1.postInit(); + _actor1.hide(); + + tmpRect.set(110, 20, 210, 120); + warning("_object1.sub9EDE8(tmpRect);"); + warning("_object1.sub51AE9(1);"); + warning("_object1.sub51AFD(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + warning("int unk = set_pane_p(_paneNumber);"); + warning("_object1.sub51B02();"); + warning("set_pane_p(unk);"); + + R2_GLOBALS._player.enableControl(); + _item1.setDetails(Rect(0, 0, 320, 200), 1200, 0, 1, 2, 1, NULL); +} + +void Scene1200::signal() { + switch (_sceneMode++) { + case 1: + // No break on purpose + case 1200: + // No break on purpose + case 1201: + // No break on purpose + case 1202: + // No break on purpose + case 1203: + R2_GLOBALS._player.enableControl(); + warning("_eventManager.waitEvent()"); + _sceneMode = 2; + break; + case 10: + _field416 = 1; + _field414 = 6; + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.setStrip(1); + R2_GLOBALS._player.setFrame(5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 11: + // No break on purpose + case 21: + // No break on purpose + case 31: + // No break on purpose + case 41: + _field416 = 0; + break; + case 12: + _field414 = 14; + R2_GLOBALS._player._numFrames = 10; + R2_GLOBALS._player.setup(3155, 1, 4); + R2_GLOBALS._player.setPosition(Common::Point(160, 70)); + R2_GLOBALS._player.animate(ANIM_MODE_2, NULL); + break; + case 13: + // No break on purpose + case 16: + // No break on purpose + case 23: + // No break on purpose + case 26: + // No break on purpose + case 33: + // No break on purpose + case 36: + // No break on purpose + case 43: + // No break on purpose + case 46: + R2_GLOBALS._player.setFrame(4); + _sceneMode = 1; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 15: + // No break on purpose + case 25: + // No break on purpose + case 35: + // No break on purpose + case 45: + _field414 = 20; + R2_GLOBALS._player.animate(ANIM_MODE_2, NULL); + break; + case 20: + _field416 = 1; + _field414 = 6; + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.setStrip(2); + R2_GLOBALS._player.setFrame(5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 22: + _field414 = 14; + R2_GLOBALS._player._numFrames = 10; + R2_GLOBALS._player.setup(3155, 2, 4); + R2_GLOBALS._player.setPosition(Common::Point(160, 70)); + R2_GLOBALS._player.animate(ANIM_MODE_2, NULL); + break; + case 30: + _field416 = 1; + _field414 = 6; + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setFrame(5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 32: + _field414 = 14; + R2_GLOBALS._player._numFrames = 10; + R2_GLOBALS._player.setup(3155, 3, 4); + R2_GLOBALS._player.setPosition(Common::Point(160, 70)); + R2_GLOBALS._player.animate(ANIM_MODE_2, NULL); + break; + case 40: + _field416 = 1; + _field414 = 6; + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.setStrip(4); + R2_GLOBALS._player.setFrame(5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 42: + _field414 = 14; + R2_GLOBALS._player._numFrames = 10; + R2_GLOBALS._player.setup(3155, 4, 4); + R2_GLOBALS._player.setPosition(Common::Point(160, 70)); + R2_GLOBALS._player.animate(ANIM_MODE_2, NULL); + break; + case 50: + // No break on purpose + case 55: + // No break on purpose + case 60: + R2_GLOBALS._player.setup(3156, 5, 1); + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 51: + // No break on purpose + case 56: + // No break on purpose + case 117: + R2_GLOBALS._player.setup(3157, 1, 1); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 52: + // No break on purpose + case 82: + // No break on purpose + case 118: + R2_GLOBALS._player.setup(3156, 3, 6); + _sceneMode = 1; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 57: + // No break on purpose + case 91: + // No break on purpose + case 96: + R2_GLOBALS._player.setup(3157, 2, 1); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 58: + // No break on purpose + case 92: + // No break on purpose + case 122: + R2_GLOBALS._player.setup(3156, 2, 6); + _sceneMode = 1; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 61: + R2_GLOBALS._player.setup(3157, 4, 5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 62: + // No break on purpose + case 72: + // No break on purpose + case 98: + R2_GLOBALS._player.setup(3156, 4, 6); + _sceneMode = 1; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 70: + // No break on purpose + case 75: + // No break on purpose + case 80: + R2_GLOBALS._player.setup(3156, 6, 1); + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 71: + // No break on purpose + case 76: + // No break on purpose + case 97: + R2_GLOBALS._player.setup(3157, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 77: + // No break on purpose + case 111: + // No break on purpose + case 116: + R2_GLOBALS._player.setup(3157, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 78: + // No break on purpose + case 102: + // No break on purpose + case 112: + R2_GLOBALS._player.setup(3156, 1, 6); + _sceneMode = 1; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + case 81: + R2_GLOBALS._player.setup(3157, 2, 5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 90: + // No break on purpose + case 95: + // No break on purpose + case 100: + R2_GLOBALS._player.setup(3156, 7, 1); + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 101: + R2_GLOBALS._player.setup(3157, 1, 5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 110: + // No break on purpose + case 115: + // No break on purpose + case 120: + R2_GLOBALS._player.setup(3156, 8, 1); + R2_GLOBALS._player._numFrames = 5; + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 121: + R2_GLOBALS._player.setup(3157, 3, 5); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + default: + warning("_eventManager.waitEvent()"); + _sceneMode = 2; + break; + } +} + +void Scene1200::process(Event &event) { + if (_field414 != 0) + return; + + Scene::process(event); + + if (!R2_GLOBALS._player._canWalk) + return; + + if (event.eventType == EVENT_BUTTON_DOWN) { + warning("_object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + int unk = _object1.sub51AF8(event.mousePos); + switch (R2_GLOBALS._events.getCursor()) { + case CURSOR_ARROW: + event.handled = true; + if ((event.mousePos.x > 179) && (event.mousePos.x < 210) && (event.mousePos.y > 50) && (event.mousePos.y < 89)) + warning("sub9DAD6(1);"); + + if ((event.mousePos.x > 109) && (event.mousePos.x < 140) && (event.mousePos.y > 50) && (event.mousePos.y < 89)) + warning("sub9DAD6(2);"); + + if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 89) && (event.mousePos.y < 120)) + warning("sub9DAD6(3);"); + + if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 19) && (event.mousePos.y < 50)) + warning("sub9DAD6(4);"); + break; + case CURSOR_USE: + if (unk > 36) { + if ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33)) + || ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 41)) + || ((R2_GLOBALS._v56AA2 == 5) && (R2_GLOBALS._v56AA4 == 5)) + || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9)) + || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17)) + || ((R2_GLOBALS._v56AA2 == 35) && (R2_GLOBALS._v56AA4 == 17)) + || ((R2_GLOBALS._v56AA2 == 41) && (R2_GLOBALS._v56AA4 == 21)) ) { + _area1.postInit(); + event.handled = true; + } + } + + if ((unk == 1) || (unk == 4) || (unk == 11) || (unk == 14)) { + if ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 9)) + || ((R2_GLOBALS._v56AA2 == 11) && (R2_GLOBALS._v56AA4 == 27)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 7)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 27)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 33)) + || (R2_GLOBALS._v56AA2 == 33) ) { + switch (R2_GLOBALS._v56AA2) { + case 3: + R2_GLOBALS._sceneManager.changeScene(3150); + break; + case 33: + if (R2_GLOBALS._v56AA1 >= 4) + R2_GLOBALS._sceneManager.changeScene(3250); + else + SceneItem::display(1200, 6, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + default: + SceneItem::display(1200, 5, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); + break; + } + event.handled = true; + } + } + break; + case CURSOR_LOOK: + if ((unk == 1) || (unk == 4) || (unk == 11) || (unk == 14)) { + event.handled = true; + switch (R2_GLOBALS._v56AA2) { + case 3: + SceneItem::display(1200, 8, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case 9: + R2_GLOBALS._sceneManager.changeScene(3240); + break; + case 11: + if (R2_GLOBALS._v56AA4 == 27) + R2_GLOBALS._sceneManager.changeScene(3210); + else + SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case 17: + switch (R2_GLOBALS._v56AA4) { + case 5: + R2_GLOBALS._sceneManager.changeScene(3230); + break; + case 21: + R2_GLOBALS._sceneManager.changeScene(3220); + break; + case 33: + R2_GLOBALS._sceneManager.changeScene(3200); + break; + default: + SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + } + case 33: + R2_GLOBALS._sceneManager.changeScene(3245); + break; + default: + SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + } + } + if (unk > 36) { + event.handled = true; + SceneItem::display(1200, 9, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } + break; + case CURSOR_TALK: + event.handled = true; + break; + default: + return; + } + } else if (event.eventType == EVENT_KEYPRESS) { + if (_field414 == 0) { + event.handled = false; + return; + } + + switch (event.kbd.keycode) { + case Common::KEYCODE_1: + warning("FIXME: keycode = 0x4800"); + warning("sub9DAD6(4);"); + break; + case Common::KEYCODE_2: + warning("FIXME: keycode = 0x4B00"); + warning("sub9DAD6(2);"); + break; + case Common::KEYCODE_3: + warning("FIXME: keycode = 0x4D00"); + warning("sub9DAD6(1);"); + break; + case Common::KEYCODE_4: + warning("FIXME: keycode = 0x5000"); + warning("sub9DAD6(3);"); + break; + default: + event.handled = false; + return; + break; + } + } else { + return; + } +} + +void Scene1200::dispatch() { + Rect tmpRect; + Scene::dispatch(); + if (_field41C != 0) { + warning("_object1.sub51AFD(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + warning("int unk = set_pane_p(_paneNumber);"); + warning("_object1.sub51B02();"); + warning("_gfxManager.sub294AC(unk);"); + warning("tmpRect.sub14DF3();"); + _field41C = 0; + } + + if (_field414 != 0) { + tmpRect.set(110, 20, 210, 120); + _field414--; + switch (_field412 - 1) { + case 0: + R2_GLOBALS._v56AA2 += 2; + break; + case 1: + R2_GLOBALS._v56AA2 -= 2; + break; + case 2: + R2_GLOBALS._v56AA4 += 2; + break; + case 3: + R2_GLOBALS._v56AA4 -= 2; + break; + default: + break; + } + warning("_object1.sub51AFD(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + warning("int unk = set_pane_p(_paneNumber);"); + warning("_object1.sub51B02();"); + warning("_gfxManager.sub294AC(unk);"); + warning("tmpRect.sub14DF3();"); + + if (_field416 != 0) { + switch(_field412 - 1) { + case 0: + R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x - 2, R2_GLOBALS._player._position.y)); + break; + case 1: + R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x + 2, R2_GLOBALS._player._position.y)); + break; + case 2: + R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 2)); + break; + case 3: + R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 2)); + break; + default: + break; + } + } + if (_field414 == 0) { + if (_field416 == 0) + R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); + signal(); + } + } +} + +void Scene1200::saveCharacter(int characterIndex) { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::saveCharacter(characterIndex); +} + /*-------------------------------------------------------------------------- * Scene 1500 - Cutscene: Ship landing * @@ -1058,7 +1813,7 @@ void Scene1525::signal() { } /*-------------------------------------------------------------------------- - * Scene 1530 - + * Scene 1530 - Cutscene - Elevator * *--------------------------------------------------------------------------*/ void Scene1530::postInit(SceneObjectList *OwnerList) { @@ -1158,5 +1913,6 @@ void Scene1530::dispatch() { Scene::dispatch(); } + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 4631c4f0ce..57e62e352c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -117,6 +117,65 @@ public: virtual void saveCharacter(int characterIndex); }; +class Scene1200 : public SceneExt { + class Area1: public SceneArea { + public: + class Actor3 : public SceneActorExt { + public: + void init(int state); + bool startAction(CursorType action, Event &event); + }; + + SceneActor _actor2; + Actor3 _actor3; + Actor3 _actor4; + Actor3 _actor5; + + byte _field20; + + Area1(); + void synchronize(Serializer &s); + + virtual void postInit(); + virtual void remove(); + virtual void process(Event &event); + virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); + virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); + }; + + class Object1 : public SavedObject { + public: + Rect rect1; + Rect rect2; + + int sub51AF8(Common::Point pt); + virtual Common::String getClassName() { return "UnkObject1200"; } + }; + +public: + NamedHotspot _item1; + SceneActor _actor1; + Area1 _area1; + Object1 _object1; + SequenceManager _sequenceManager; + + int _field412; + int _field414; + int _field416; + int _field418; + int _field41A; + int _field41C; + + Scene1200(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void saveCharacter(int characterIndex); +}; + class Scene1500 : public SceneExt { public: SceneActor _actor1; -- cgit v1.2.3 From 603dc3734c05876730a6ad9a21aa26a55f76f8fb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 10 Jan 2012 22:08:00 +0100 Subject: TSAGE: R2R - Fix some warnings, implement sub51AF8 Thanks LordHoto for pointing those --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 38 ++++++++++++++++++++----- engines/tsage/ringworld2/ringworld2_scenes1.h | 15 ++++++++-- 2 files changed, 44 insertions(+), 9 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 3d8cd0e6dd..84da3f23f8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1097,9 +1097,33 @@ void Scene1200::Area1::proc13(int resNum, int lookLineNum, int talkLineNum, int _actor2.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); } +Scene1200::Object1::Object1() { + _field16 = _field26 = _field28 = _field2A = _field2C = _field2E = _field30 = 0; +} + +void Scene1200::Object1::synchronize(Serializer &s) { + SavedObject::synchronize(s); + + s.syncAsSint16LE(_field16); + s.syncAsSint16LE(_field26); + s.syncAsSint16LE(_field28); + s.syncAsSint16LE(_field2A); + s.syncAsSint16LE(_field2C); + s.syncAsSint16LE(_field2E); + s.syncAsSint16LE(_field30); +} + int Scene1200::Object1::sub51AF8(Common::Point pt) { - warning("STUB: sub1AF8()"); - return 0; + if (!_rect1.contains(pt)) + return -1; + + int tmp1 = (pt.x - _rect1.left + _field2E) / _field2A; + int tmp2 = (pt.y - _rect1.top + _field30) / _field2C; + + if ((tmp1 >= 0) && (tmp2 >= 0) && (_field26 > tmp1) && (_field28 > tmp2)) + return _field16 + (((_field26 * tmp2) + tmp1)* 2); + + return -1; } @@ -1119,13 +1143,13 @@ void Scene1200::postInit(SceneObjectList *OwnerList) { _field41A = 0; _field41C = 0; - if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA8 == 1) && (R2_GLOBALS._v56AA8 == 1)) + if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) _field418 = 1; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA8 == 1) && (R2_GLOBALS._v56AA8 == 1)) + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) _field418 = 2; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA8 == 1) && (R2_GLOBALS._v56AA8 == 2)) + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 2)) _field418 = 3; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA8 == 3) && (R2_GLOBALS._v56AA8 == 1)) + else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 3) && (R2_GLOBALS._v56AA8 == 1)) _field418 = 4; R2_GLOBALS._player.postInit(); @@ -1764,7 +1788,7 @@ void Scene1500::dispatch() { if (_sceneMode > 10) { float yDiff = sqrt((float) (_actor3._position.x * _actor3._position.x) + (_actor3._position.y * _actor3._position.y)); if (yDiff > 6) - _actor3.setPosition(_actor3._position, yDiff); + _actor3.setPosition(_actor3._position, (int) yDiff); } Scene::dispatch(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 57e62e352c..ec05a83fff 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -145,8 +145,19 @@ class Scene1200 : public SceneExt { class Object1 : public SavedObject { public: - Rect rect1; - Rect rect2; + Rect _rect1; + Rect _rect2; + + int _field16; + int _field26; + int _field28; + int _field2A; + int _field2C; + int _field2E; + int _field30; + + Object1(); + void synchronize(Serializer &s); int sub51AF8(Common::Point pt); virtual Common::String getClassName() { return "UnkObject1200"; } -- cgit v1.2.3 From 9e2f1b6a42622756d1027e3522c5223329ad66ad Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 13 Jan 2012 16:04:09 +0100 Subject: TSAGE: R2R - Preliminar implementation of scene 1550 Also implement a couple of functions used by scene 1200 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_logic.h | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 1118 ++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 159 +++- engines/tsage/ringworld2/ringworld2_speakers.h | 10 - 5 files changed, 1269 insertions(+), 20 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d7d21154f3..2f537c4ebe 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -117,6 +117,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Elevator return new Scene1530(); case 1550: + return new Scene1550(); case 1575: case 1580: case 1625: diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index bb6aa25f85..9b64063803 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -265,6 +265,7 @@ public: int _state; SceneActorExt() { _state = 0; } + virtual Common::String getClassName() { return "SceneActorExt"; } virtual void synchronize(Serializer &s) { SceneActor::synchronize(s); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 84da3f23f8..34a4d6da0d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1126,6 +1126,40 @@ int Scene1200::Object1::sub51AF8(Common::Point pt) { return -1; } +bool Scene1200::Object1::sub51AFD(Common::Point pt) { + int retval = false; + + _field2E = pt.x; + _field30 = pt.y; + + if (_field2E < _rect2.top) { + _field2E = _rect2.top; + retval = true; + } + + if (_field30 < _rect2.left) { + _field30 = _rect2.left; + retval = true; + } + + if (_field2E + _rect1.width() > _rect2.right) { + _field2E = _rect2.right - _rect1.width(); + retval = true; + } + + if (_field30 + _rect1.height() > _rect2.bottom) { + _field30 = _rect2.bottom - _rect1.height(); + retval = true; + } + + return retval; +} + +void Scene1200::Object1::sub9EDE8(Rect rect) { + _rect1 = rect; + warning("FIXME: Scene1200::Object1::sub9EDE8()"); +// _rect1.clip(g_globals->gfxManager()._bounds); +} void Scene1200::postInit(SceneObjectList *OwnerList) { Rect tmpRect; @@ -1163,9 +1197,10 @@ void Scene1200::postInit(SceneObjectList *OwnerList) { _actor1.hide(); tmpRect.set(110, 20, 210, 120); - warning("_object1.sub9EDE8(tmpRect);"); + _object1.sub9EDE8(tmpRect); + warning("_object1.sub51AE9(1);"); - warning("_object1.sub51AFD(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + _object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4)); warning("int unk = set_pane_p(_paneNumber);"); warning("_object1.sub51B02();"); warning("set_pane_p(unk);"); @@ -1572,7 +1607,7 @@ void Scene1200::dispatch() { Rect tmpRect; Scene::dispatch(); if (_field41C != 0) { - warning("_object1.sub51AFD(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + _object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4)); warning("int unk = set_pane_p(_paneNumber);"); warning("_object1.sub51B02();"); warning("_gfxManager.sub294AC(unk);"); @@ -1599,7 +1634,7 @@ void Scene1200::dispatch() { default: break; } - warning("_object1.sub51AFD(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + _object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4)); warning("int unk = set_pane_p(_paneNumber);"); warning("_object1.sub51B02();"); warning("_gfxManager.sub294AC(unk);"); @@ -1937,6 +1972,1081 @@ void Scene1530::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 1550 - + * + *--------------------------------------------------------------------------*/ +Scene1550::UnkObj15501::UnkObj15501() { + _fieldA4 = _fieldA6 = 0; +} + +void Scene1550::UnkObj15501::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_fieldA6); +} + +bool Scene1550::UnkObj15501::startAction(CursorType action, Event &event) { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (_visage == 1561) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 40; + Common::Point pt(_position.x + 5, _position.y + 20); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + return true; + } + return SceneActor::startAction(action, event); + break; + case CURSOR_LOOK: + if (_visage == 1561) { + switch (_frame) { + case 2: + SceneItem::display(1550, 23, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case 3: + SceneItem::display(1550, 26, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case 4: + SceneItem::display(1550, 35, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + default: + break; + } + } else { + switch ((((_strip - 1) * 5) + _frame) % 3) { + case 0: + SceneItem::display(1550, 62, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case 1: + SceneItem::display(1550, 53, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + case 2: + SceneItem::display(1550, 76, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + break; + default: + break; + } + } + return true; + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +Scene1550::UnkObj15502::UnkObj15502() { + _fieldA4 = 0; +} + +void Scene1550::UnkObj15502::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); +} + +bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (_fieldA4 == 8) { + scene->_field412 = 1; + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1576; + else + scene->_sceneMode = 1584; + // strcpy(scene->_arrUnkObj15502[7]._actorName, 'hatch'); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[7], NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case CURSOR_LOOK: + if (_fieldA4 == 8) + SceneItem::display(1550, 75, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + else if (_frame == 1) + SceneItem::display(1550, 70, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + else + SceneItem::display(1550, 71, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + break; + case R2_17: + scene->_field412 = 1; + if (_fieldA4 == 6) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1574; + else + scene->_sceneMode = 1582; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[5], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case R2_18: + scene->_field412 = 1; + if (_fieldA4 == 3) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1571; + else + scene->_sceneMode = 1581; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[2], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case R2_22: + scene->_field412 = 1; + if (_fieldA4 == 1) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1569; + else + scene->_sceneMode = 1579; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[0], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case R2_23: + scene->_field412 = 1; + if (_fieldA4 == 4) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1572; + scene->_actor1.postInit(); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[3], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case R2_25: + scene->_field412 = 1; + if (_fieldA4 == 2) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1570; + else + scene->_sceneMode = 1580; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[1], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case R2_27: + scene->_field412 = 1; + if (_fieldA4 == 5) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1573; + scene->_actor1.postInit(); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[4], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + case R2_45: + scene->_field412 = 1; + if (_fieldA4 == 7) { + R2_GLOBALS._player.disableControl(); + scene->_actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1575; + else + scene->_sceneMode = 1583; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[6], &scene->_actor1, NULL); + return true; + } + return SceneActor::startAction(action, event); + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +Scene1550::UnkObj15503::UnkObj15503() { + _fieldA4 = 0; +} + +void Scene1550::UnkObj15503::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); +} + +bool Scene1550::UnkObj15503::startAction(CursorType action, Event &event) { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + switch (_fieldA4) { + case 1: + if (scene->_actor13._frame == 5) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 25; + if (scene->_actor4._frame == 1) { + scene->setAction(&scene->_sequenceManager1, scene, 1560, &scene->_actor4, NULL); + R2_GLOBALS.setFlag(20); + setFrame(2); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 1561, &scene->_actor4, NULL); + R2_GLOBALS.clearFlag(20); + setFrame(1); + } + scene->_unkArea1.remove(); + } + break; + case 2: + R2_GLOBALS._player.disableControl(); + if (scene->_actor13._frame == 1) { + scene->_sceneMode = 23; + scene->setAction(&scene->_sequenceManager1, scene, 1560, this, NULL); + } else { + if (scene->_actor4._frame == 1) + scene->_sceneMode = 24; + else + scene->_sceneMode = 22; + scene->setAction(&scene->_sequenceManager1, scene, 1561, this, NULL); + } + break; + default: + break; + } + return true; +} + +void Scene1550::UnkArea1550::remove() { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + _unkObj155031.remove(); + _unkObj155032.remove(); + // sub201EA is a common part with UnkArea1200 + R2_GLOBALS._sceneItems.remove((SceneItem *)this); + _areaActor.remove(); + SceneArea::remove(); + R2_GLOBALS._insetUp--; + // + if ((scene->_sceneMode >= 20) and (scene->_sceneMode <= 29)) + return; + + R2_GLOBALS._player.disableControl(); + if (scene->_actor4._frame == 1) { + scene->_sceneMode = 1559; + scene->setAction(&scene->_sequenceManager1, scene, 1559, &R2_GLOBALS._player, NULL); + } else { + scene->_sceneMode = 1562; + scene->setAction(&scene->_sequenceManager1, scene, 1562, &R2_GLOBALS._player, NULL); + } +} +void Scene1550::UnkArea1550::proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY) { + warning("Scene1550::UnkArea1550::proc12() should be based on Scene1550::UnkArea1200::proc12()"); +} + +bool Scene1550::Hotspot1::startAction(CursorType action, Event &event) { + return SceneHotspot::startAction(action, event); +} + +bool Scene1550::Hotspot3::startAction(CursorType action, Event &event) { + // Arrays related to this scene are all hacky in the origina: they are based on the impossibility to use Miranda + assert ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS._player._characterIndex == 2)); + // The original contains a debug message when CURSOR_TALK is used. + if (action == CURSOR_TALK) + warning("Location: %d/%d - %d", R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex], R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2], _v5A4D6[(R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] * 30)] + R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]); + + return SceneHotspot::startAction(action, event); +} + +bool Scene1550::Actor6::startAction(CursorType action, Event &event) { + return SceneActor::startAction(action, event); +} + +bool Scene1550::Actor7::startAction(CursorType action, Event &event) { + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + scene->_sceneMode = 80; + scene->signal(); + + return true; +} + +bool Scene1550::Actor8::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + scene->_field412 = 1; + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1552; + else + scene->_sceneMode = 1588; + + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor8, NULL); + return true; +} + +bool Scene1550::Actor9::startAction(CursorType action, Event &event) { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + scene->_sceneMode = 50; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_stripManager.start(518, scene); + else + scene->_stripManager.start(520, scene); + return true; + break; + case CURSOR_LOOK: + SceneItem::display(1550, 41, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + break; + default: + return SceneActor::startAction(action, event); + } +} + +bool Scene1550::Actor10::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1555; + else + scene->_sceneMode = 1589; + + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor10, NULL); + return true; +} + +bool Scene1550::Actor11::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + scene->_field412 = 1; + if (R2_GLOBALS._player._characterIndex == 1) + scene->_sceneMode = 1586; + else + scene->_sceneMode = 1587; + + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor11, NULL); + return true; +} + +bool Scene1550::Actor12::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS._player._characterIndex == 2) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1585; + scene->setAction(&scene->_sequenceManager1, scene, 1585, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player.disableControl(); + switch(scene->_field415) { + case 0: + scene->_actor13.fixPriority(168); + scene->_actor4.fixPriority(125); + scene->_sceneMode = 1558; + scene->setAction(&scene->_sequenceManager1, scene, 1558, &R2_GLOBALS._player, NULL); + break; + case 1: + return SceneActor::startAction(action, event); + break; + case 2: + scene->_field415 = 1; + scene->_sceneMode = 1563; + scene->setAction(&scene->_sequenceManager1, scene, 1563, &R2_GLOBALS._player, &scene->_actor4, NULL); + break; + default: + break; + } + } + return true; + +} + +bool Scene1550::Actor13::startAction(CursorType action, Event &event) { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (scene->_field415 != 2) + return SceneActor::startAction(action, event); + + if (R2_INVENTORY.getObjectScene(R2_45) == 1550) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1564; + scene->setAction(&scene->_sequenceManager1, scene, 1564, &R2_GLOBALS._player, NULL); + } else + SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + break; + case CURSOR_LOOK: + if (scene->_field415 != 2) + return SceneActor::startAction(action, event); + + if (R2_INVENTORY.getObjectScene(R2_45) == 1550) { + SceneItem::display(1550, 74, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + } else + SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +Scene1550::Scene1550() { + _field412 = 0; + _field414 = 0; + _field415 = 0; + _field417 = 0; + _field419 = 0; +} + +void Scene1550::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsByte(_field414); + s.syncAsSint16LE(_field415); + s.syncAsSint16LE(_field417); + s.syncAsSint16LE(_field419); +} + +void Scene1550::postInit(SceneObjectList *OwnerList) { + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11)) + loadScene(1234); + else + loadScene(1550); + + scalePalette(65, 65, 65); + setZoomPercents(30, 75, 170, 100); + _field417 = 1550; + _field419 = 0; + SceneExt::postInit(); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS.setFlag(R2_16); + + if ((R2_GLOBALS._player._characterScene[1] != 1550) && (R2_GLOBALS._player._characterScene[1] != 1580)) { + R2_GLOBALS._player._characterScene[1] = 1550; + R2_GLOBALS._player._characterScene[2] = 1550; + } + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player._effect = 6; + + if (R2_GLOBALS._player._characterIndex == 1) + R2_GLOBALS._player.setup(1500, 3, 1); + else + R2_GLOBALS._player.setup(1505, 3, 1); + + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11)) + R2_GLOBALS._player.setPosition(Common::Point(157, 135)); + else + R2_GLOBALS._player.setPosition(Common::Point(160, 100)); + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _field414 = 0; + _actor7.changeZoom(-1); + R2_GLOBALS._player.changeZoom(-1); + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 1530: + R2_GLOBALS._v565AE = 0; + // No break on purpose + case 300: + // No break on purpose + case 1500: + // No break on purpose + case 3150: + R2_GLOBALS._sound1.play(105); + break; + case 1580: + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1580) { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); + + _field412 = 1; + + _actor1.postInit(); + warning("_arrUnkObj15502[7].subA5CDF()"); + _arrUnkObj15502[7].hide(); + if (R2_GLOBALS._player._characterIndex == 1) + _sceneMode = 1577; + else + _sceneMode = 1578; + + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_arrUnkObj15502[7], NULL); + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550; + } else { + R2_GLOBALS._player.enableControl(); + } + break; + default: + break; + } + warning("subA2B2F();"); + _item1.setDetails(16, 1550, 10, -1, -1); + _item2.setDetails(24, 1550, 10, -1, -1); + _item3.setDetails(Rect(0, 0, 320, 200), 1550, 0, 1, -1, 1, NULL); + + if ((R2_GLOBALS._sceneManager._previousScene == 1500) && (R2_GLOBALS.getFlag(16))) { + _sceneMode = 70; + if (!R2_GLOBALS._sceneObjects->contains(&_actor7)) + _actor7.postInit(); + + if (R2_GLOBALS._player._characterIndex == 1) + _actor7.setVisage(1505); + else + _actor7.setVisage(1500); + + _actor7.changeZoom(77); + _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + + warning("R2_GLOBALS._walkRegions.enableRegion(R2_GLOBALS._v14A72[_field419]);"); + setAction(&_sequenceManager1, this, 1590, &_actor7, NULL); + } else if ((_sceneMode != 1577) && (_sceneMode != 1578)) + R2_GLOBALS._player.enableControl(); +} + +void Scene1550::signal() { + switch (_sceneMode) { + case 1: + // No break on purpose + case 3: + // No break on purpose + case 5: + // No break on purpose + case 7: + _field412 = 0; + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + case 20: + // No break on purpose + case 21: + // No break on purpose + case 25: + // No break on purpose + case 1563: + R2_GLOBALS.clearFlag(20); + _unkArea1.proc12(1559, 1, 1, 160, 125); + R2_GLOBALS._player.enableControl(); + _sceneMode = 0; + break; + case 22: + _unkArea1.remove(); + _sceneMode = 24; + setAction(&_sequenceManager1, this, 1561, &_actor4, NULL); + R2_GLOBALS.clearFlag(20); + break; + case 23: + _unkArea1.remove(); + _sceneMode = 20; + setAction(&_sequenceManager1, this, 1566, &_actor13, &_actor5, NULL); + R2_GLOBALS.setFlag(21); + break; + case 24: + _unkArea1.remove(); + _sceneMode = 21; + setAction(&_sequenceManager1, this, 1567, &_actor13, &_actor5, NULL); + R2_GLOBALS.clearFlag(19); + break; + case 30: + // No break on purpose + case 1556: + // No break on purpose + case 1557: + // Nothing on purpose + break; + case 40: { + _sceneMode = 41; + Common::Point pt(_arrUnkObj15501[0]._position.x, _arrUnkObj15501[0]._position.y + 20); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 41: + _sceneMode = 42; + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._player.setup(1502, 8, 1); + } else { + R2_GLOBALS._player.changeZoom(R2_GLOBALS._player._percent + 14); + R2_GLOBALS._player.setup(1516, 4, 1); + } + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 42: + _sceneMode = 43; + warning("TODO: unknown use of arrUnkObj15501[0]._fieldA6"); + switch (_arrUnkObj15501[0]._frame - 1) { + case 0: + R2_INVENTORY.setObjectScene(26, R2_GLOBALS._player._characterIndex); + break; + case 1: + R2_INVENTORY.setObjectScene(17, R2_GLOBALS._player._characterIndex); + break; + case 2: + R2_INVENTORY.setObjectScene(22, R2_GLOBALS._player._characterIndex); + break; + case 3: + R2_INVENTORY.setObjectScene(25, R2_GLOBALS._player._characterIndex); + break; + case 4: + R2_INVENTORY.setObjectScene(45, R2_GLOBALS._player._characterIndex); + break; + case 5: + R2_INVENTORY.setObjectScene(28, R2_GLOBALS._player._characterIndex); + break; + default: + break; + } + _arrUnkObj15501[0].remove(); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 43: + warning("TODO: unknown use of arrUnkObj15501[0]._fieldA6"); + if (R2_GLOBALS._player._characterIndex == 1) + R2_GLOBALS._player.setVisage(1500); + else { + R2_GLOBALS._player.changeZoom(-1); + R2_GLOBALS._player.setVisage(1505); + } + R2_GLOBALS._player.animate(ANIM_MODE_1, this); + R2_GLOBALS._player.setStrip(8); + R2_GLOBALS._player.enableControl(); + break; + case 50: + warning("STUB: sub_1D227()"); + ++_sceneMode; + setAction(&_sequenceManager1, this, 1591, &R2_GLOBALS._player, NULL); + if (g_globals->_sceneObjects->contains(&_actor7)) + signal(); + else { + _actor7.postInit(); + if (R2_GLOBALS._player._characterIndex == 1) + _actor7.setVisage(1505); + else + _actor7.setVisage(1500); + _actor7.changeZoom(77); + _actor7.setAction(&_sequenceManager2, this, 1590, &_actor7, NULL); + _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + } + break; + case 51: + ++_sceneMode; + break; + case 52: + _actor7.changeZoom(-1); + _sceneMode = 1592; + if (R2_GLOBALS._player._characterIndex == 1) + setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_actor7, &_arrUnkObj15501[0], &_actor9, NULL); + else + setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_actor7, &_arrUnkObj15501[0], &_actor9, NULL); + break; + case 61: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + _field415 = 2; + break; + case 62: + R2_GLOBALS._player.enableControl(CURSOR_TALK); + if (_field415 == 2) { + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + } + break; + case 70: + R2_GLOBALS._v565EC[2] = R2_GLOBALS._v565EC[1]; + R2_GLOBALS._v565EC[4] = R2_GLOBALS._v565EC[3]; + R2_GLOBALS._v565EC[0] = 1; + _sceneMode = 60; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(500, this); + break; + case 80: + if (R2_GLOBALS.getFlag(16)) { + _sceneMode = 60; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._v565AE >= 3) { + if (R2_GLOBALS._player._characterIndex == 1) + _stripManager.start(572, this); + else + _stripManager.start(573, this); + } else { + ++R2_GLOBALS._v565AE; + if (R2_GLOBALS._player._characterIndex == 1) + _stripManager.start(499 + R2_GLOBALS._v565AE, this); + else + _stripManager.start(502 + R2_GLOBALS._v565AE, this); + } + } else { + _sceneMode = 60; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._v565AE >= 4) { + if (R2_GLOBALS._player._characterIndex == 1) + _stripManager.start(572, this); + else + _stripManager.start(573, this); + } else { + ++R2_GLOBALS._v565AE; + if (R2_GLOBALS._player._characterIndex == 1) + _stripManager.start(563 + R2_GLOBALS._v565AE, this); + else + _stripManager.start(567 + R2_GLOBALS._v565AE, this); + } + } + break; + case 1550: + R2_GLOBALS._sceneManager.changeScene(1525); + break; + case 1552: + // No break on purpose + case 1588: + R2_INVENTORY.setObjectScene(R2_19, R2_GLOBALS._player._characterIndex); + _actor8.remove(); + _field412 = 0; + R2_GLOBALS._player.enableControl(); + break; + case 1553: + R2_GLOBALS._sceneManager.changeScene(1575); + break; + case 1554: + R2_GLOBALS._player.enableControl(); + _field412 = 0; + break; + case 1555: + // No break on purpose + case 1589: + R2_INVENTORY.setObjectScene(R2_18, R2_GLOBALS._player._characterIndex); + _actor10.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 1558: + _actor13.fixPriority(124); + _field415 = 1; + _unkArea1.proc12(1559, 1, 1, 160, 125); + R2_GLOBALS._player.enableControl(); + break; + case 1559: + _actor13.fixPriority(168); + _actor4.fixPriority(169); + R2_GLOBALS._player.fixPriority(-1); + R2_GLOBALS._player.changeZoom(-1); + _field415 = 0; + R2_GLOBALS._player.enableControl(); + break; + case 1562: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + _field415 = 2; + break; + case 1564: + R2_INVENTORY.setObjectScene(R2_45, 1); + _sceneMode = 1565; + setAction(&_sequenceManager1, this, 1565, &R2_GLOBALS._player, NULL); + break; + case 1565: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + case 1569: + // No break on purpose + case 1579: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_22, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1570: + // No break on purpose + case 1580: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_25, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1571: + // No break on purpose + case 1581: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_18, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1572: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_23, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1573: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_27, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1574: + // No break on purpose + case 1582: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_17, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1575: + // No break on purpose + case 1583: + _field412 = 0; + _actor1.remove(); + R2_INVENTORY.setObjectScene(R2_45, 0); + R2_GLOBALS._player.enableControl(); + break; + case 1576: + // No break on purpose + case 1584: + R2_GLOBALS._sceneManager.changeScene(1580); + R2_GLOBALS._player.enableControl(); + break; + case 1577: + // No break on purpose + case 1578: + _sceneMode = 0; + _actor1.remove(); + _field412 = 0; + R2_GLOBALS._player.fixPriority(-1); + R2_GLOBALS._player.enableControl(); + break; + case 1585: + SceneItem::display(1550, 66, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + R2_GLOBALS._player.enableControl(); + break; + case 1586: + // No break on purpose + case 1587: + R2_INVENTORY.setObjectScene(R2_28, R2_GLOBALS._player._characterIndex); + _actor1.remove(); + _field412 = 0; + R2_GLOBALS._player.enableControl(); + break; + case 1592: + _actor9.remove(); + R2_INVENTORY.setObjectScene(R2_26, 1); + if (R2_GLOBALS._player._characterIndex == 1) { + R2_GLOBALS._v565EC[2] = R2_GLOBALS._v565EC[1]; + R2_GLOBALS._v565EC[4] = R2_GLOBALS._v565EC[3]; + } else { + R2_GLOBALS._v565EC[1] = R2_GLOBALS._v565EC[2]; + R2_GLOBALS._v565EC[3] = R2_GLOBALS._v565EC[4]; + } + R2_GLOBALS._player.enableControl(); + break; + default: + _sceneMode = 62; + setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); + break; + } +} + +void Scene1550::process(Event &event) { + if ((!R2_GLOBALS._player._canWalk) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) && (event.eventType == EVENT_BUTTON_DOWN) && (this->_screenNumber == 1234)) { + int curReg = 0; + if (curReg = R2_GLOBALS._sceneRegions.indexOf(event.mousePos) == 0) + _field412 = 1; + else if (((R2_GLOBALS._player._position.y < 90) && (event.mousePos.y > 90)) || ((R2_GLOBALS._player._position.y > 90) && (event.mousePos.y < 90))) + _field412 = 1; + else + _field412 = 0; + + if ((curReg == 13) || (curReg == 14)) + _field412 = 0; + } + + Scene::process(event); +} + +void Scene1550::dispatch() { + Scene::dispatch(); + + // Arrays related to this scene are all hacky in the origina: they are based on the impossibility to use Miranda + assert ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS._player._characterIndex == 2)); + + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 15) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 16)) { + R2_GLOBALS._player._shade = 0; + // Original game contains a switch based on an uninitialised variable. + // Until we understand what should really happen there, this code is unused on purpose + int missingVariable = 0; + switch (missingVariable) { + case 144: + // No break on purpose + case 146: + _actor13._frame = 5; + R2_GLOBALS._player._shade = 3; + break; + case 148: + // No break on purpose + case 149: + _actor13._frame = 1; + // No break on purpose + case 147: + // No break on purpose + case 150: + R2_GLOBALS._player._shade = 3; + break; + default: + break; + } + } + + if (_field412 != 0) + return; + + switch (R2_GLOBALS._player.getRegionIndex() - 11) { + case 0: + // No break on purpose + case 5: + R2_GLOBALS._player.disableControl(); + _sceneMode = 1; + _field412 = 1; + --R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; + warning("subA2B2F();"); + R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 108) * 172) / 100), 145)); + if (R2_GLOBALS._player._position.x < 160) { + Common::Point pt(R2_GLOBALS._player._position.x + 5, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (R2_GLOBALS._player._position.x <= 160) { // the check is really in the original... + Common::Point pt(R2_GLOBALS._player._position.x, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + Common::Point pt(R2_GLOBALS._player._position.x - 5, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 1: + R2_GLOBALS._player.disableControl(); + _sceneMode = 3; + _field412 = 1; + ++R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; + warning("subA2B2F();"); + R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 172) * 108) / 100), 19)); + if (R2_GLOBALS._player._position.x < 160) { + Common::Point pt(R2_GLOBALS._player._position.x + 5, 29); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (R2_GLOBALS._player._position.x <= 160) { // the check is really in the original... + Common::Point pt(R2_GLOBALS._player._position.x, 29); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + Common::Point pt(R2_GLOBALS._player._position.x - 5, 29); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: + R2_GLOBALS._player.disableControl(); + _sceneMode = 5; + _field412 = 1; + ++R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]; + warning("subA2B2F();"); + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11) && (R2_GLOBALS._player._position.y > 50) && (R2_GLOBALS._player._position.y < 135)) { + if (R2_GLOBALS._player._position.y >= 85) { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 10)); + Common::Point pt(R2_GLOBALS._player._position.x + 30, R2_GLOBALS._player._position.y + 20); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 10)); + Common::Point pt(R2_GLOBALS._player._position.x + 30, R2_GLOBALS._player._position.y - 20); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + } else { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)); + Common::Point pt(R2_GLOBALS._player._position.x + 10, R2_GLOBALS._player._position.y); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: + R2_GLOBALS._player.disableControl(); + _sceneMode = 7; + _field412 = 1; + --R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]; + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 24) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11)) { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y / 2)); + Common::Point pt(265, 29); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11) && (R2_GLOBALS._player._position.y > 50) && (R2_GLOBALS._player._position.y < 135)) { + if (R2_GLOBALS._player._position.y >= 85) { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 10)); + Common::Point pt(R2_GLOBALS._player._position.x - 30, R2_GLOBALS._player._position.y + 20); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 10)); + Common::Point pt(R2_GLOBALS._player._position.x - 30, R2_GLOBALS._player._position.y - 20); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + } else { + R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y)); + Common::Point pt(R2_GLOBALS._player._position.x - 10, R2_GLOBALS._player._position.y); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + default: + break; + } +} + +void Scene1550::saveCharacter(int characterIndex) { + if (R2_GLOBALS._player._characterIndex == 3) + R2_GLOBALS._sound1.fadeOut2(NULL); + + SceneExt::saveCharacter(characterIndex); +} } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index ec05a83fff..6d2bd3b084 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -59,15 +59,15 @@ public: class Scene1100 : public SceneExt { class Actor16 : public SceneActor { public: - bool startAction(CursorType action, Event &event); + virtual bool startAction(CursorType action, Event &event); }; class Actor17 : public SceneActor { public: - bool startAction(CursorType action, Event &event); + virtual bool startAction(CursorType action, Event &event); }; class Actor18 : public SceneActor { public: - bool startAction(CursorType action, Event &event); + virtual bool startAction(CursorType action, Event &event); }; public: @@ -123,7 +123,7 @@ class Scene1200 : public SceneExt { class Actor3 : public SceneActorExt { public: void init(int state); - bool startAction(CursorType action, Event &event); + virtual bool startAction(CursorType action, Event &event); }; SceneActor _actor2; @@ -160,6 +160,8 @@ class Scene1200 : public SceneExt { void synchronize(Serializer &s); int sub51AF8(Common::Point pt); + bool sub51AFD(Common::Point pt); + void sub9EDE8(Rect rect); virtual Common::String getClassName() { return "UnkObject1200"; } }; @@ -211,8 +213,8 @@ public: class Scene1530 : public SceneExt { public: - SpeakerQuinn1530 _quinnSpeaker; - SpeakerSeeker1530 _seekerSpeaker; + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; SceneActor _actor1; SceneActor _actor2; SceneActor _actor3; @@ -223,6 +225,151 @@ public: virtual void signal(); virtual void dispatch(); }; + +class Scene1550 : public SceneExt { + class UnkObj15501 : public SceneActor { + public: + int _fieldA4; + int _fieldA6; + + UnkObj15501(); + void synchronize(Serializer &s); + + virtual bool startAction(CursorType action, Event &event); + }; + + class UnkObj15502 : public SceneActor { + public: + int _fieldA4; + + UnkObj15502(); + void synchronize(Serializer &s); + + virtual bool startAction(CursorType action, Event &event); + }; + + class UnkObj15503 : public SceneActor { + public: + int _fieldA4; + + UnkObj15503(); + void synchronize(Serializer &s); + + virtual bool startAction(CursorType action, Event &event); + }; + + class UnkArea1550 : public SceneArea { + public: + byte _field20; + SceneActor _areaActor; + UnkObj15503 _unkObj155031; + UnkObj15503 _unkObj155032; + + virtual void remove(); + virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); + }; + + class Hotspot1 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Hotspot3 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor6 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor7 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor8 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor9 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor10 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor11 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor12 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor13 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor14 : public SceneActor { + // Nothing specific found in the original + // TODO: check if it's an useless class + }; + +public: + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + Hotspot1 _item1; + Hotspot1 _item2; + Hotspot3 _item3; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + Actor6 _actor6; + Actor7 _actor7; + Actor8 _actor8; + Actor9 _actor9; + Actor10 _actor10; + Actor11 _actor11; + Actor12 _actor12; + Actor13 _actor13; + UnkObj15501 _arrUnkObj15501[8]; + Actor14 _actor14; + Actor14 _actor15; + Actor14 _actor16; + Actor14 _actor17; + Actor14 _actor18; + Actor14 _actor19; + UnkObj15502 _arrUnkObj15502[8]; + UnkArea1550 _unkArea1; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + + int _field412; + byte _field414; + int _field415; + int _field417; + int _field419; + + Scene1550(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void saveCharacter(int characterIndex); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 49ac9f555f..13c770a4a3 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -269,11 +269,6 @@ public: virtual void proc15(); }; -class SpeakerQuinn1530 : public SpeakerQuinn { -public: - virtual Common::String getClassName() { return "SpeakerQuinn1530"; } -}; - class SpeakerQuinn2435 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn2435"; } @@ -412,11 +407,6 @@ public: virtual void proc15(); }; -class SpeakerSeeker1530 : public SpeakerSeeker { -public: - virtual Common::String getClassName() { return "SpeakerSeeker1530"; } -}; - class SpeakerSeeker2435 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker2435"; } -- cgit v1.2.3 From 1a12d24981678ede9e708cb441d44d9fe0964808 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 13 Jan 2012 22:18:42 +0100 Subject: TSAGE: R2R - Silent warning --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 34a4d6da0d..45aec17fbf 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2886,8 +2886,8 @@ void Scene1550::signal() { void Scene1550::process(Event &event) { if ((!R2_GLOBALS._player._canWalk) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) && (event.eventType == EVENT_BUTTON_DOWN) && (this->_screenNumber == 1234)) { - int curReg = 0; - if (curReg = R2_GLOBALS._sceneRegions.indexOf(event.mousePos) == 0) + int curReg = R2_GLOBALS._sceneRegions.indexOf(event.mousePos); + if (curReg == 0) _field412 = 1; else if (((R2_GLOBALS._player._position.y < 90) && (event.mousePos.y > 90)) || ((R2_GLOBALS._player._position.y > 90) && (event.mousePos.y < 90))) _field412 = 1; -- cgit v1.2.3 From cdb6cf687fbeb9365dc75dc5fc92ad17fea8f2e3 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sun, 15 Jan 2012 14:12:45 +0100 Subject: TSAGE: Don't use "&&" synonym "and". --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 45aec17fbf..aa2a0d9c44 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2237,7 +2237,7 @@ void Scene1550::UnkArea1550::remove() { SceneArea::remove(); R2_GLOBALS._insetUp--; // - if ((scene->_sceneMode >= 20) and (scene->_sceneMode <= 29)) + if ((scene->_sceneMode >= 20) && (scene->_sceneMode <= 29)) return; R2_GLOBALS._player.disableControl(); -- cgit v1.2.3 From 3d4f4ce799ecd71a8bc67cd25d50a1cd4d8805ad Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 15 Jan 2012 23:04:09 +0100 Subject: TSAGE: R2R - Scene 1550: Implement subA2B2F() --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 698 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 8 +- 2 files changed, 700 insertions(+), 6 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index aa2a0d9c44..04c4c056ca 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2262,7 +2262,7 @@ bool Scene1550::Hotspot3::startAction(CursorType action, Event &event) { assert ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS._player._characterIndex == 2)); // The original contains a debug message when CURSOR_TALK is used. if (action == CURSOR_TALK) - warning("Location: %d/%d - %d", R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex], R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2], _v5A4D6[(R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] * 30)] + R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]); + warning("Location: %d/%d - %d", R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex], R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2], k5A4D6[(R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] * 30)] + R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]); return SceneHotspot::startAction(action, event); } @@ -2519,7 +2519,9 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { default: break; } - warning("subA2B2F();"); + + subA2B2F(); + _item1.setDetails(16, 1550, 10, -1, -1); _item2.setDetails(24, 1550, 10, -1, -1); _item3.setDetails(Rect(0, 0, 320, 200), 1550, 0, 1, -1, 1, NULL); @@ -2945,7 +2947,9 @@ void Scene1550::dispatch() { _sceneMode = 1; _field412 = 1; --R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; - warning("subA2B2F();"); + + subA2B2F(); + R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 108) * 172) / 100), 145)); if (R2_GLOBALS._player._position.x < 160) { Common::Point pt(R2_GLOBALS._player._position.x + 5, 135); @@ -2966,7 +2970,9 @@ void Scene1550::dispatch() { _sceneMode = 3; _field412 = 1; ++R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; - warning("subA2B2F();"); + + subA2B2F(); + R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 172) * 108) / 100), 19)); if (R2_GLOBALS._player._position.x < 160) { Common::Point pt(R2_GLOBALS._player._position.x + 5, 29); @@ -2987,7 +2993,9 @@ void Scene1550::dispatch() { _sceneMode = 5; _field412 = 1; ++R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]; - warning("subA2B2F();"); + + subA2B2F(); + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11) && (R2_GLOBALS._player._position.y > 50) && (R2_GLOBALS._player._position.y < 135)) { if (R2_GLOBALS._player._position.y >= 85) { R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 10)); @@ -3048,5 +3056,685 @@ void Scene1550::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } +void Scene1550::SceneActor1550::subA4D14(int arg1, int arg2) { + warning("Scene1550::subA4D14(%d, %d);", arg1, arg2); +} + +void Scene1550::subA2B2F() { + Rect tmpRect; + _field419 = 0; + _field415 = 0; + + tmpRect = R2_GLOBALS._v5589E; + + _actor14.remove(); + _actor17.remove(); + _actor15.remove(); + _actor19.remove(); + _actor16.remove(); + _actor18.remove(); + + for (int i = 0; i < 8; ++i) + _arrUnkObj15501[i].remove(); + + _actor6.remove(); + + for (int i = 0; i < 8; ++i) + _arrUnkObj15502[i].remove(); + + _actor8.remove(); + _actor9.remove(); + _actor10.remove(); + _actor3.remove(); + _actor11.remove(); + + if ((_sceneMode != 1577) && (_sceneMode != 1578)) + _actor1.remove(); + + _actor2.remove(); + _actor7.remove(); + _actor13.remove(); + _actor5.remove(); + _actor12.remove(); + _actor4.remove(); + + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2]) { + case 0: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + case 3: + R2_GLOBALS._walkRegions.load(1554); + _field419 = 1554; + break; + case 4: + R2_GLOBALS._walkRegions.load(1553); + _field419 = 1553; + break; + default: + break; + } + break; + case 3: + // No break on purpose + case 4: + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 23) || (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex])) { + if (!R2_GLOBALS.getFlag(16)) { + R2_GLOBALS._walkRegions.load(1559); + _field419 = 1559; + } + } + break; + case 7: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + case 10: + R2_GLOBALS._walkRegions.load(1555); + _field419 = 1555; + break; + case 11: + R2_GLOBALS._walkRegions.load(1556); + _field419 = 1556; + break; + default: + break; + } + break; + case 11: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + case 24: + R2_GLOBALS._walkRegions.load(1558); + _field419 = 1558; + break; + case 25: + R2_GLOBALS._walkRegions.load(1557); + _field419 = 1557; + break; + default: + break; + } + break; + case 16: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + case 2: + R2_GLOBALS._walkRegions.load(1552); + _field419 = 1552; + break; + case 3: + R2_GLOBALS._walkRegions.load(1551); + _field419 = 1551; + break; + case 15: + R2_GLOBALS._walkRegions.load(1575); + _field419 = 1575; + default: + break; + } + break; + default: + break; + } + + int varA = 0; + + if (!R2_GLOBALS.getFlag(16)) { + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] - 2) { + case 0: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] - 22) { + case 0: + varA = 1553; + _actor15.subA4D14(6, 0); + break; + case 1: + // No break on purpose + case 2: + // No break on purpose + case 3: + // No break on purpose + case 4: + varA = 1553; + break; + case 5: + varA = 1553; + _actor15.subA4D14(6, 0); + break; + default: + break; + } + break; + case 1: + // No break on purpose + case 2: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] - 21) { + case 0: + varA = 1550; + _actor15.subA4D14(9, 0); + break; + case 1: + varA = 1552; + _actor15.subA4D14(10, 0); + break; + case 2: + // No break on purpose + case 3: + // No break on purpose + case 4: + // No break on purpose + case 5: + varA = 1552; + break; + case 6: + varA = 1552; + _actor15.subA4D14(7, 0); + break; + case 7: + varA = 1550; + _actor15.subA4D14(8, 0); + break; + default: + break; + } + break; + case 3: + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] - 21) { + case 0: + varA = 1550; + _actor15.subA4D14(4, 0); + break; + case 1: + varA = 1550; + _actor15.subA4D14(3, 0); + break; + case 2: + // No break on purpose + case 3: + // No break on purpose + case 4: + // No break on purpose + case 5: + varA = 1551; + break; + case 6: + varA = 1550; + _actor15.subA4D14(2, 0); + break; + case 7: + varA = 1550; + _actor15.subA4D14(1, 0); + break; + default: + break; + } + break; + default: + break; + } + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] > 0) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] <= 29) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] >= 20) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] > 7)) { + R2_GLOBALS.setFlag(16); + R2_GLOBALS._sceneManager.changeScene(1500); + } + } + + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11)) { + if (R2_GLOBALS._sceneManager._sceneNumber != 1234) { + R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; + loadScene(1234); + R2_GLOBALS._sceneManager._hasPalette = false; + _field414 = 0; + } + } else { + if (R2_GLOBALS._sceneManager._sceneNumber == 1234) { + R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; + loadScene(1550); + R2_GLOBALS._sceneManager._hasPalette = false; + } + } + + if (R2_GLOBALS._sceneManager._sceneNumber == 1234) + _field419 = 1576; + + if (_field414 == 0) { + _field414 = 1; + } else { + if (_field414 == 2) { + _field414 = 3; + } else { + _field414 = 2; + } + + if (R2_GLOBALS._sceneManager._sceneNumber == 1550){ + warning("Mouse_hideIfNeeded()"); + warning("gfx_set_pane_p"); + for (int i = 3; i != 168; ++i) { + warning("sub294D2(4, i, 312, var14C)"); + warning("missing for loop, to be implemented"); + warning("gfx_draw_slice"); + } + warning("Missing sub2957D()"); + warning("gfx_set_pane_p()"); + R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; + + if (varA == 0) { + if (_field417 != 1550) + g_globals->_scenePalette.loadPalette(1550); + R2_GLOBALS._sceneManager._hasPalette = true; + } else { + g_globals->_scenePalette.loadPalette(varA); + R2_GLOBALS._sceneManager._hasPalette = true; + } + + if (R2_GLOBALS._sceneManager._hasPalette) + _field417 = varA; + + warning("sub_2C429()"); + } + } + + switch (k5A4D6[(R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] * 30)] + R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + case 0: + if (_field419 == 0) { + R2_GLOBALS._walkRegions.load(1550); + _field419 = 1550; + } + break; + case 1: + if (_field419 == 0) { + R2_GLOBALS._walkRegions.load(1560); + _field419 = 1560; + } + _actor14.subA4D14(2, 1); + _actor15.subA4D14(1, 3); + _actor16.subA4D14(2, 5); + break; + case 2: + R2_GLOBALS._walkRegions.load(1561); + _field419 = 1561; + _actor14.subA4D14(2, 1); + _actor17.subA4D14(2, 2); + _actor15.subA4D14(1, 3); + _actor16.subA4D14(2, 5); + break; + case 3: + R2_GLOBALS._walkRegions.load(1562); + _field419 = 1562; + _actor14.subA4D14(2, 1); + _actor15.subA4D14(1, 3); + _actor16.subA4D14(2, 5); + _actor18.subA4D14(2, 6); + break; + case 4: + R2_GLOBALS._walkRegions.load(1563); + _field419 = 1563; + _actor15.subA4D14(2, 3); + break; + case 5: + R2_GLOBALS._walkRegions.load(1564); + _field419 = 1564; + _actor19.subA4D14(2, 4); + break; + case 6: + R2_GLOBALS._walkRegions.load(1565); + _field419 = 1565; + _actor14.subA4D14(1, 1); + _actor17.subA4D14(1, 2); + _actor15.subA4D14(3, 3); + break; + case 7: + R2_GLOBALS._walkRegions.load(1566); + _field419 = 1566; + _actor14.subA4D14(1, 1); + _actor17.subA4D14(1, 2); + _actor15.subA4D14(2, 4); + break; + case 8: + R2_GLOBALS._walkRegions.load(1567); + _field419 = 1567; + _actor17.subA4D14(5, 2); + break; + case 9: + R2_GLOBALS._walkRegions.load(1568); + _field419 = 1568; + _actor17.subA4D14(4, 2); + break; + case 10: + R2_GLOBALS._walkRegions.load(1569); + _field419 = 1569; + _actor14.subA4D14(3, 1); + break; + case 11: + R2_GLOBALS._walkRegions.load(1570); + _field419 = 1570; + _actor14.subA4D14(1, 1); + _actor17.subA4D14(1, 2); + break; + case 12: + R2_GLOBALS._walkRegions.load(1571); + _field419 = 1571; + _actor16.subA4D14(1, 5); + _actor18.subA4D14(1, 6); + break; + case 13: + R2_GLOBALS._walkRegions.load(1572); + _field419 = 1572; + _actor14.subA4D14(1, 1); + _actor17.subA4D14(1, 2); + _actor19.subA4D14(1, 4); + break; + case 14: + R2_GLOBALS._walkRegions.load(1573); + _field419 = 1573; + _actor19.subA4D14(1, 4); + _actor16.subA4D14(1, 5); + _actor18.subA4D14(1, 6); + break; + case 15: + R2_GLOBALS._walkRegions.load(1574); + _field419 = 1574; + _actor19.subA4D14(1, 4); + break; + case 16: + R2_GLOBALS._walkRegions.load(1570); + _field419 = 1570; + _actor14.subA4D14(2, 1); + _actor17.subA4D14(2, 2); + break; + case 17: + R2_GLOBALS._walkRegions.load(1570); + _field419 = 1570; + _actor14.subA4D14(2, 1); + _actor17.subA4D14(3, 2); + break; + case 18: + R2_GLOBALS._walkRegions.load(1571); + _field419 = 1571; + _actor16.subA4D14(2, 5); + _actor18.subA4D14(2, 6); + break; + case 19: + R2_GLOBALS._walkRegions.load(1571); + _field419 = 1571; + _actor16.subA4D14(2, 5); + _actor18.subA4D14(3, 6); + break; + default: + break; + } + + int di = 0; + int tmpIdx = 0; + for (int i = 0; i < 129 * 4; i += 4) { + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == k562CC[i]) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == k562CC[i + 1]) && (k562CC[i + 2] != 0)) { + tmpIdx = k562CC[i + 3]; + _arrUnkObj15501[di].postInit(); + _arrUnkObj15501[di]._effect = 6; + _arrUnkObj15501[di]._shade = 0; + _arrUnkObj15501[di]._fieldA4 = tmpIdx; + _arrUnkObj15501[di]._fieldA6 = i; + _arrUnkObj15501[di].setDetails(1550, 62, -1, 63, 2, (SceneItem *) NULL); + if (k562CC[i + 2] == 41) { + _arrUnkObj15501[di].changeZoom(-1); + _arrUnkObj15501[di].setPosition(Common::Point(150, 70)); + _arrUnkObj15501[di].setup(1562, 1, 1); + R2_GLOBALS._walkRegions.enableRegion(k5A78C); + R2_GLOBALS._walkRegions.enableRegion(k5A78D); + R2_GLOBALS._walkRegions.enableRegion(k5A790); + R2_GLOBALS._walkRegions.enableRegion(k5A791); + if (R2_INVENTORY.getObjectScene(R2_26) == 1550) { + _actor9.postInit(); + _actor9.setup(1562, 3, 1); + _actor9.setPosition(Common::Point(150, 70)); + _actor9.fixPriority(10); + _actor9.setDetails(1550, 41, -1, 42, 2, (SceneItem *) NULL); + } + } else { + if (k562CC[i + 2] > 40) { + _arrUnkObj15501[di].changeZoom(100); + _arrUnkObj15501[di].setup(1561, 1, k562CC[i + 2] - 40); + } else { + _arrUnkObj15501[di].changeZoom(-1); + _arrUnkObj15501[di].setup(1552, ((k562CC[i + 2] - 1) / 5) + 1, ((k562CC[i + 2] - 1) % 5) + 1); + } + _arrUnkObj15501[di].setPosition(Common::Point(k5A72E[tmpIdx], k5A73F[tmpIdx])); + if (k5A78A[tmpIdx] != 0) + R2_GLOBALS._walkRegions.enableRegion(k5A78A[tmpIdx]); + di++; + } + } + } + + for (int i = 0; i < 15 * 3; i++) { + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == k5A79B[i]) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == k5A79B[i + 1])) { + tmpIdx = k5A79B[i + 2]; + switch (tmpIdx - 1) { + case 0: + if (!R2_GLOBALS.getFlag(16)) { + _actor1.postInit(); + if (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 3) + _actor1.setup(1555, 2, 1); + else + _actor1.setup(1555, 1, 1); + _actor1.setPosition(Common::Point(150, 100)); + _actor1.fixPriority(92); + _actor1.setDetails(1550, 73, -1, -1, 2, (SceneItem *) NULL); + } + break; + case 1: + _actor13.postInit(); + warning("_actor13._actorName = \"dish\";"); + if (R2_GLOBALS.getFlag(19)) + _actor13.setup(1556, 3, 5); + else + _actor13.setup(1556, 3, 1); + _actor13.changeZoom(95); + _actor13.setPosition(Common::Point(165, 83)); + _actor13.fixPriority(168); + _actor13.setDetails(1550, 17, -1, 19, 2, (SceneItem *) NULL); + + _actor12.postInit(); + _actor12.setup(1556, 4, 1); + _actor12.setPosition(Common::Point(191, 123)); + _actor12.changeZoom(95); + _actor12.setDetails(1550, 65, -1, 66, 2, (SceneItem *) NULL); + + _actor5.postInit(); + _actor5._numFrames = 5; + if (R2_GLOBALS.getFlag(19)) + _actor5.setup(1556, 8, 5); + else + _actor5.setup(1556, 8, 1); + + _actor5.setPosition(Common::Point(156, 151)); + _actor5.fixPriority(10); + + _actor4.postInit(); + if (R2_GLOBALS.getFlag(20)) + _actor4.setup(1558, 3, 10); + else + _actor4.setup(1558, 3, 1); + + _actor4.setPosition(Common::Point(172, 48)); + _actor4.fixPriority(169); + R2_GLOBALS._walkRegions.enableRegion(k5A78A[15]); + break; + case 2: + _actor6.postInit(); + _actor6.setup(1550, 1, 1); + _actor6.setPosition(Common::Point(259, 55)); + _actor6.fixPriority(133); + _actor6.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1550, 1, 2); + _actor1.setPosition(Common::Point(259, 133)); + _actor1.fixPriority(105); + _actor1.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + if (R2_INVENTORY.getObjectScene(R2_18) == 1550) { + _actor10.postInit(); + _actor10.setup(1550, 7, 2); + _actor10.setPosition(Common::Point(227, 30)); + _actor10.fixPriority(130); + _actor10.setDetails(1550, 29, -1, 63, 2, (SceneItem *) NULL); + } + break; + case 3: + _actor6.postInit(); + _actor6.setup(1550, 1, 4); + _actor6.setPosition(Common::Point(76, 131)); + _actor6.fixPriority(10); + _actor6.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1550, 1, 3); + _actor1.setPosition(Common::Point(76, 64)); + _actor1.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + if (R2_INVENTORY.getObjectScene(R2_28) == 1550) { + _actor11.postInit(); + _actor11.setup(1504, 4, 1); + _actor11.setPosition(Common::Point(49, 35)); + _actor11.animate(ANIM_MODE_2, NULL); + _actor11._numFrames = 4; + _actor11.fixPriority(65); + _actor11.setDetails(1550, 14, 15, 63, 2, (SceneItem *) NULL); + } + if (R2_INVENTORY.getObjectScene(R2_19) == 1550) { + _actor8.postInit(); + _actor8.setup(1550, 7, 1); + _actor8.setPosition(Common::Point(45, 44)); + _actor8.fixPriority(150); + _actor8.setDetails(1550, 44, -1, 63, 2, (SceneItem *) NULL); + } + break; + case 4: + _actor6.postInit(); + _actor6.setup(1550, 2, 4); + _actor6.setPosition(Common::Point(243, 131)); + _actor6.fixPriority(10); + _actor6.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1550, 2, 3); + _actor1.setPosition(Common::Point(243, 64)); + _actor1.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + break; + case 5: + _actor6.postInit(); + _actor6.setup(1550, 2, 1); + _actor6.setPosition(Common::Point(60, 55)); + _actor6.fixPriority(133); + _actor6.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1550, 2, 2); + _actor1.setPosition(Common::Point(60, 133)); + _actor1.fixPriority(106); + _actor1.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + break; + case 6: + _actor6.postInit(); + _actor6.setup(1550, 3, 1); + _actor6.setPosition(Common::Point(281, 132)); + _actor6.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + break; + case 7: + _actor6.postInit(); + _actor6.setup(1550, 3, 2); + _actor6.setPosition(Common::Point(57, 96)); + _actor6.fixPriority(70); + _actor6.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1550, 3, 3); + _actor1.setPosition(Common::Point(145, 88)); + _actor1.fixPriority(55); + _actor1.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _actor2.postInit(); + _actor2.setup(1550, 3, 4); + _actor2.setPosition(Common::Point(64, 137)); + _actor2.fixPriority(115); + _actor2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _actor3.postInit(); + _actor3.setup(1550, 5, 1); + _actor3.setPosition(Common::Point(60, 90)); + _actor3.fixPriority(45); + break; + case 8: + _actor6.postInit(); + _actor6.setup(1550, 4, 2); + _actor6.setPosition(Common::Point(262, 96)); + _actor6.fixPriority(70); + _actor6.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1550, 4, 3); + _actor1.setPosition(Common::Point(174, 88)); + _actor1.fixPriority(55); + _actor1.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _actor2.postInit(); + _actor2.setup(1550, 4, 4); + _actor2.setPosition(Common::Point(255, 137)); + _actor2.fixPriority(115); + _actor2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _actor3.postInit(); + _actor3.setup(1550, 6, 1); + _actor3.setPosition(Common::Point(259, 90)); + _actor3.fixPriority(45); + break; + case 9: + _actor6.postInit(); + _actor6.setup(1550, 4, 1); + _actor6.setPosition(Common::Point(38, 132)); + _actor6.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + break; + case 11: + warning("_arrUnkObj15502[7].sub_A5CDF(8);"); + warning("_arrUnkObj15502[0].sub_A5CDF(1);"); + warning("_arrUnkObj15502[1].sub_A5CDF(2);"); + warning("_arrUnkObj15502[2].sub_A5CDF(3);"); + warning("_arrUnkObj15502[3].sub_A5CDF(4);"); + warning("_arrUnkObj15502[4].sub_A5CDF(5);"); + warning("_arrUnkObj15502[5].sub_A5CDF(6);"); + warning("_arrUnkObj15502[6].sub_A5CDF(7);"); + default: + break; + } + } + } + + if ((R2_GLOBALS._v565EC[1] == R2_GLOBALS._v565EC[2]) && (R2_GLOBALS._v565EC[3] == R2_GLOBALS._v565EC[4])) { + _actor7.postInit(); + _actor7._effect = 7; + _actor7.changeZoom(-1); + + assert((_field419 >= 1550) && (_field419 <= 2008)); + R2_GLOBALS._walkRegions.enableRegion(k5A750[_field419 - 1550]); + _actor7.setPosition(Common::Point(k5A72E[k5A76D[_field419 - 1550]], k5A73F[k5A76D[_field419 - 1550]] + 8)); + if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterScene[2] == 1580) { + _actor7.setup(1516, 3, 17); + _actor7.setPosition(Common::Point(272, 94)); + _actor7.fixPriority(91); + _actor7.changeZoom(100); + warning("_actor7.setDetails(1550, -1, -1, -1, 5, _arrUnkObj15502[7]);"); + } else { + _actor7.setup(1505, 6, 1); + _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + } + } else { + if (R2_GLOBALS._player._characterScene[1] == 1580) { + _actor7.setup(1516, 2, 14); + _actor7.setPosition(Common::Point(276, 97)); + _actor7.fixPriority(91); + _actor7.changeZoom(100); + warning("_actor7.setDetails(1550, -1, -1, -1, 5, _arrUnkObj15502[7]);"); + } else { + _actor7.setup(1500, 6, 1); + _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + } + } + } + R2_GLOBALS._uiElements.updateInventory(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 6d2bd3b084..0ec42b1d04 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -227,6 +227,11 @@ public: }; class Scene1550 : public SceneExt { + class SceneActor1550 : public SceneActor { + public: + void subA4D14(int arg1, int arg2); + }; + class UnkObj15501 : public SceneActor { public: int _fieldA4; @@ -319,7 +324,7 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor14 : public SceneActor { + class Actor14 : public SceneActor1550 { // Nothing specific found in the original // TODO: check if it's an useless class }; @@ -363,6 +368,7 @@ public: Scene1550(); void synchronize(Serializer &s); + void subA2B2F(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); -- cgit v1.2.3 From e0ac42f6c7796347cdc2ca3eb33aeed093327034 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 15 Jan 2012 23:11:10 +0100 Subject: TSAGE: R2R - Fix a GCC warning Thanks LordHoto for pointing it --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 04c4c056ca..7e39957460 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1018,7 +1018,7 @@ bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) { return true; } -void Scene1200::Area1::postInit() { +void Scene1200::Area1::postInit(SceneObjectList *OwnerList) { Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; scene->_field41A = 1; diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 0ec42b1d04..5ec6c7f60e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -136,7 +136,7 @@ class Scene1200 : public SceneExt { Area1(); void synchronize(Serializer &s); - virtual void postInit(); + virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); virtual void process(Event &event); virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); -- cgit v1.2.3 From 175e8e00fa79f0580efc33d54f02a70a856dce4e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 Jan 2012 00:24:02 +0100 Subject: TSAGE: R2R - Scene 1550: Implement subA4D14() --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 184 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 2 files changed, 183 insertions(+), 3 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 7e39957460..3510920057 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -3056,8 +3056,188 @@ void Scene1550::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } -void Scene1550::SceneActor1550::subA4D14(int arg1, int arg2) { - warning("Scene1550::subA4D14(%d, %d);", arg1, arg2); +void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + postInit(); + if (scene->_field414 == 2) + setup(1551, strip, frameNumber); + else + setup(1554, strip, frameNumber); + + switch (strip) { + case 0: + switch (frameNumber - 1) { + case 0: + setup(1551, 1, 1); + setPosition(Common::Point(30, 67)); + break; + case 1: + setup(1560, 1, 5); + setPosition(Common::Point(141, 54)); + break; + case 2: + setup(1560, 2, 5); + setPosition(Common::Point(178, 54)); + break; + case 3: + setup(1560, 2, 1); + setPosition(Common::Point(289, 67)); + break; + case 4: + setup(1560, 2, 2); + setPosition(Common::Point(298, 132)); + break; + case 5: + setup(1560, 1, 2); + setPosition(Common::Point(21, 132)); + break; + case 6: + setup(1560, 2, 4); + setPosition(Common::Point(285, 123)); + break; + case 7: + setup(1560, 1, 3); + setPosition(Common::Point(30, 111)); + break; + case 8: + setup(1560, 2, 3); + setPosition(Common::Point(289, 111)); + break; + case 9: + setup(1560, 1, 4); + setPosition(Common::Point(34, 123)); + break; + default: + break; + } + fixPriority(1); + break; + case 1: + if (frameNumber == 3) { + setup(1553, 3, 1); + setPosition(Common::Point(48, 44)); + fixPriority(2); + } else { + fixPriority(1); + setPosition(Common::Point(32, 17)); + } + + switch (frameNumber) { + case 2: + setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL); + break; + case 3: + setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); + break; + default: + setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL); + break; + } + break; + case 2: + fixPriority(1); + switch (frameNumber) { + case 4: + setup(1553, 4, 1); + setPosition(Common::Point(48, 168)); + break; + case 5: + setup(1553, 3, 2); + setPosition(Common::Point(20, 168)); + fixPriority(250); + break; + default: + setPosition(Common::Point(28, 116)); + break; + } + + switch (frameNumber) { + case 2: + setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL); + break; + case 4: + setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); + break; + case 5: + setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); + break; + default: + setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL); + break; + } + break; + case 3: + switch (frameNumber) { + case 2: + fixPriority(2); + if (scene->_field414 == 2) + setup(1553, 2, 1); + else + setup(1556, 2, 1); + setPosition(Common::Point(160, 44)); + break; + case 3: + fixPriority(2); + setup(1553, 5, 1); + setPosition(Common::Point(178, 44)); + break; + default: + fixPriority(1); + setPosition(Common::Point(160, 17)); + break; + } + + if (frameNumber == 1) + setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL); + else + setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); + break; + case 4: + if (frameNumber == 2) { + fixPriority(250); + if (scene->_field414 == 2) + setup(1553, 1, 1); + else + setup(1556, 1, 1); + } else { + fixPriority(2); + } + + if (frameNumber != 1) + setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); + + setPosition(Common::Point(160, 168)); + break; + case 5: + fixPriority(1); + setPosition(Common::Point(287, 17)); + + switch (frameNumber) { + case 2: + setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL); + break; + case 3: + setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); + break; + default: + setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL); + break; + } + break; + case 6: + fixPriority(1); + setPosition(Common::Point(291, 116)); + + if (frameNumber == 2) + setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL); + else + setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL); + break; + default: + break; + } + } void Scene1550::subA2B2F() { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 5ec6c7f60e..aa39545288 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -229,7 +229,7 @@ public: class Scene1550 : public SceneExt { class SceneActor1550 : public SceneActor { public: - void subA4D14(int arg1, int arg2); + void subA4D14(int frameNumber, int strip); }; class UnkObj15501 : public SceneActor { -- cgit v1.2.3 From 1ae18a2e2bff95cfde7cd93983b0ca3fd5f824b1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 Jan 2012 19:23:52 +0100 Subject: TSAGE: R2R - Scene 1550: Implement UnkObj15502::subA5CDF() --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 57 ++++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 1 + 2 files changed, 57 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 3510920057..8bbf9adf85 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2175,6 +2175,61 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } } +void Scene1550::UnkObj15502::subA5CDF(int strip) { + _fieldA4 = strip; + postInit(); + setup(1517, _fieldA4, 1); + switch (_fieldA4 - 1) { + case 0: + if (R2_INVENTORY.getObjectScene(R2_22) == 0) + setFrame(5); + setPosition(Common::Point(287, 85)); + break; + case 1: + if (R2_INVENTORY.getObjectScene(R2_25) == 0) + setFrame(5); + setPosition(Common::Point(248, 100)); + break; + case 2: + if (R2_INVENTORY.getObjectScene(R2_28) == 0) + setFrame(5); + setPosition(Common::Point(217, 85)); + break; + case 3: + if (R2_INVENTORY.getObjectScene(R2_23)) + setFrame(5); + setPosition(Common::Point(161, 121)); + break; + case 4: + if (R2_INVENTORY.getObjectScene(R2_27)) + setFrame(5); + setPosition(Common::Point(117, 121)); + break; + case 5: + if (R2_INVENTORY.getObjectScene(R2_17)) + setFrame(5); + setPosition(Common::Point(111, 85)); + break; + case 6: + if (R2_INVENTORY.getObjectScene(R2_45)) + setFrame(5); + setPosition(Common::Point(95, 84)); + break; + case 7: { + setup(1516, 1, 1); + setPosition(Common::Point(201, 45)); + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + if ((scene->_sceneMode == 1577) || (scene->_sceneMode == 1578)) + hide(); + fixPriority(92); + setDetails(1550, 70, -1, -1, 2, (SceneItem *) NULL); + } + break; + default: + break; + } +} + Scene1550::UnkObj15503::UnkObj15503() { _fieldA4 = 0; } @@ -2503,7 +2558,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { _field412 = 1; _actor1.postInit(); - warning("_arrUnkObj15502[7].subA5CDF()"); + _arrUnkObj15502[7].subA5CDF(8); _arrUnkObj15502[7].hide(); if (R2_GLOBALS._player._characterIndex == 1) _sceneMode = 1577; diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index aa39545288..ba146ab5a9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -251,6 +251,7 @@ class Scene1550 : public SceneExt { void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); + void subA5CDF(int strip); }; class UnkObj15503 : public SceneActor { -- cgit v1.2.3 From 4a1da069f425ac0d65d2d5d5476c1efdab8b06c2 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 Jan 2012 19:53:55 +0100 Subject: TSAGE: R2R - Scene 1200: Implement sub9EE22() and sub9DAD6() Also fix a couple of things in scene 1550 --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 233 ++++++++++++++++++++++-- engines/tsage/ringworld2/ringworld2_scenes1.h | 3 + 2 files changed, 218 insertions(+), 18 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 8bbf9adf85..e1796a40c8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1161,6 +1161,199 @@ void Scene1200::Object1::sub9EDE8(Rect rect) { // _rect1.clip(g_globals->gfxManager()._bounds); } +int Scene1200::Object1::sub9EE22(int &arg1, int &arg2) { + arg1 /= _field2A; + arg2 /= _field2C; + + if ((arg1 >= 0) && (arg2 >= 0) && (_field26 > arg1) && (_field28 > arg2)) { + return (((_field26 * arg2) + arg1) * 2) + _field16; + } + + return -1; +} + +void Scene1200::sub9DAD6(int indx) { + _object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4); + + switch (indx) { + case 0: + if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) + || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) + || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 41)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1200; + setAction(&_sequenceManager, this, 1200, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(200, 69)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 15; + else + _sceneMode = 10; + break; + case 1: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 76; + else + _sceneMode = 75; + break; + case 2: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 101; + else + _sceneMode = 100; + break; + case 3: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 111; + else + _sceneMode = 110; + break; + default: + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 1; + signal(); + } + break; + case 1: + if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) + || ((R2_GLOBALS._v56AA2 == 5) && (R2_GLOBALS._v56AA4 == 5)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1201; + setAction(&_sequenceManager, this, 1201, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(120, 69)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 56; + else + _sceneMode = 55; + break; + case 1: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 25; + else + _sceneMode = 20; + break; + case 2: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 91; + else + _sceneMode = 90; + break; + case 3: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 121; + else + _sceneMode = 120; + break; + default: + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 2; + signal(); + } + break; + case 2: + if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3)) + || ((R2_GLOBALS._v56AA2 == 41) && (R2_GLOBALS._v56AA4 == 21)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1203; + setAction(&_sequenceManager, this, 1203, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(160, 110)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 51; + else + _sceneMode = 50; + break; + case 1: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 81; + else + _sceneMode = 80; + break; + case 2: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 35; + else + _sceneMode = 30; + break; + case 3: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 116; + else + _sceneMode = 115; + break; + default: + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 3; + signal(); + } + break; + case 3: + if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3)) + || ((R2_GLOBALS._v56AA2 == 35) && (R2_GLOBALS._v56AA4 == 17)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1202; + setAction(&_sequenceManager, this, 1202, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(160, 30)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 61; + else + _sceneMode = 60; + break; + case 1: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 71; + else + _sceneMode = 70; + break; + case 2: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 96; + else + _sceneMode = 95; + break; + case 3: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 45; + else + _sceneMode = 40; + break; + default: + _sceneMode = 1; + R2_GLOBALS._player.setup(3156, 4, 6); + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 4; + signal(); + } + break; + default: + break; + } +} void Scene1200::postInit(SceneObjectList *OwnerList) { Rect tmpRect; @@ -1459,22 +1652,22 @@ void Scene1200::process(Event &event) { return; if (event.eventType == EVENT_BUTTON_DOWN) { - warning("_object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);"); + _object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4); int unk = _object1.sub51AF8(event.mousePos); switch (R2_GLOBALS._events.getCursor()) { case CURSOR_ARROW: event.handled = true; if ((event.mousePos.x > 179) && (event.mousePos.x < 210) && (event.mousePos.y > 50) && (event.mousePos.y < 89)) - warning("sub9DAD6(1);"); + sub9DAD6(1); if ((event.mousePos.x > 109) && (event.mousePos.x < 140) && (event.mousePos.y > 50) && (event.mousePos.y < 89)) - warning("sub9DAD6(2);"); + sub9DAD6(2); if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 89) && (event.mousePos.y < 120)) - warning("sub9DAD6(3);"); + sub9DAD6(3); if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 19) && (event.mousePos.y < 50)) - warning("sub9DAD6(4);"); + sub9DAD6(4); break; case CURSOR_USE: if (unk > 36) { @@ -1579,19 +1772,19 @@ void Scene1200::process(Event &event) { switch (event.kbd.keycode) { case Common::KEYCODE_1: warning("FIXME: keycode = 0x4800"); - warning("sub9DAD6(4);"); + sub9DAD6(4); break; case Common::KEYCODE_2: warning("FIXME: keycode = 0x4B00"); - warning("sub9DAD6(2);"); + sub9DAD6(2); break; case Common::KEYCODE_3: warning("FIXME: keycode = 0x4D00"); - warning("sub9DAD6(1);"); + sub9DAD6(1); break; case Common::KEYCODE_4: warning("FIXME: keycode = 0x5000"); - warning("sub9DAD6(3);"); + sub9DAD6(3); break; default: event.handled = false; @@ -2316,6 +2509,7 @@ bool Scene1550::Hotspot3::startAction(CursorType action, Event &event) { // Arrays related to this scene are all hacky in the origina: they are based on the impossibility to use Miranda assert ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS._player._characterIndex == 2)); // The original contains a debug message when CURSOR_TALK is used. + // This part is totally useless, we could remove it (and the entire function as well) if (action == CURSOR_TALK) warning("Location: %d/%d - %d", R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex], R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2], k5A4D6[(R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] * 30)] + R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]); @@ -2594,7 +2788,9 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { _actor7.changeZoom(77); _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); - warning("R2_GLOBALS._walkRegions.enableRegion(R2_GLOBALS._v14A72[_field419]);"); + assert(_field419 >= 1550); + R2_GLOBALS._walkRegions.enableRegion(k5A750[_field419 - 1550]); + setAction(&_sequenceManager1, this, 1590, &_actor7, NULL); } else if ((_sceneMode != 1577) && (_sceneMode != 1578)) R2_GLOBALS._player.enableControl(); @@ -3694,6 +3890,7 @@ void Scene1550::subA2B2F() { int di = 0; int tmpIdx = 0; + // Original game was checking "i < 129" but it was clearly a bug as it's out of bounds for (int i = 0; i < 129 * 4; i += 4) { if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == k562CC[i]) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == k562CC[i + 1]) && (k562CC[i + 2] != 0)) { tmpIdx = k562CC[i + 3]; @@ -3922,14 +4119,14 @@ void Scene1550::subA2B2F() { _actor6.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); break; case 11: - warning("_arrUnkObj15502[7].sub_A5CDF(8);"); - warning("_arrUnkObj15502[0].sub_A5CDF(1);"); - warning("_arrUnkObj15502[1].sub_A5CDF(2);"); - warning("_arrUnkObj15502[2].sub_A5CDF(3);"); - warning("_arrUnkObj15502[3].sub_A5CDF(4);"); - warning("_arrUnkObj15502[4].sub_A5CDF(5);"); - warning("_arrUnkObj15502[5].sub_A5CDF(6);"); - warning("_arrUnkObj15502[6].sub_A5CDF(7);"); + _arrUnkObj15502[7].subA5CDF(8); + _arrUnkObj15502[0].subA5CDF(1); + _arrUnkObj15502[1].subA5CDF(2); + _arrUnkObj15502[2].subA5CDF(3); + _arrUnkObj15502[3].subA5CDF(4); + _arrUnkObj15502[4].subA5CDF(5); + _arrUnkObj15502[5].subA5CDF(6); + _arrUnkObj15502[6].subA5CDF(7); default: break; } diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index ba146ab5a9..d62700c686 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -162,6 +162,7 @@ class Scene1200 : public SceneExt { int sub51AF8(Common::Point pt); bool sub51AFD(Common::Point pt); void sub9EDE8(Rect rect); + int sub9EE22(int &arg1, int &arg2); virtual Common::String getClassName() { return "UnkObject1200"; } }; @@ -182,6 +183,8 @@ public: Scene1200(); void synchronize(Serializer &s); + void sub9DAD6(int indx); + virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); virtual void process(Event &event); -- cgit v1.2.3 From 63c13f91c15dd5fc5bdbf11390ce7c6f0a7cd619 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 17 Jan 2012 00:46:13 +0100 Subject: TSAGE: R2R - Partial implementation of scene 1575 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 380 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 53 ++++ 3 files changed, 434 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 2f537c4ebe..1a03cffc5c 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -119,6 +119,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1550: return new Scene1550(); case 1575: + return new Scene1575(); case 1580: case 1625: case 1700: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index e1796a40c8..576d4e5beb 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4168,5 +4168,385 @@ void Scene1550::subA2B2F() { R2_GLOBALS._uiElements.updateInventory(); } +/*-------------------------------------------------------------------------- + * Scene 1575 - + * + *--------------------------------------------------------------------------*/ +Scene1575::Scene1575() { + _field412 = 0; + _field414 = 0; + _field416 = 0; + _field418 = 0; + _field41A = 0; +} + +void Scene1575::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); + s.syncAsSint16LE(_field418); + s.syncAsSint16LE(_field41A); +} + +Scene1575::Hotspot1::Hotspot1() { + _field34 = 0; + _field36 = 0; +} + +void Scene1575::Hotspot1::synchronize(Serializer &s) { + NamedHotspot::synchronize(s); + + s.syncAsSint16LE(_field34); + s.syncAsSint16LE(_field36); +} + +void Scene1575::Hotspot1::process(Event &event) { + if ((event.eventType != EVENT_BUTTON_DOWN) || (R2_GLOBALS._events.getCursor() != R2_STEPPING_DISKS) || (!_bounds.contains(event.mousePos))) { + if (_field36 == 0) + return; + if ((_field34 == 1) || (event.eventType == EVENT_BUTTON_UP) || (!_bounds.contains(event.mousePos))) { + _field36 = 0; + return; + } + } + _field36 = 1; + Scene1575 *scene = (Scene1575 *)R2_GLOBALS._sceneManager._scene; + + event.handled = true; + if (R2_GLOBALS.getFlag(18) && (_field34 > 1) && (_field34 < 6)) { + warning("sub1A03B(\"Better not move the laser while it\'s firing!\", 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);"); + return; + } + int di = scene->_actor1._position.x; + + switch (_field34 - 1) { + case 0: + if (R2_GLOBALS.getFlag(18)) { + scene->_actor14.hide(); + scene->_actor15.hide(); + R2_GLOBALS.clearFlag(18); + } else if ((scene->_actor12._position.x == 85) && (scene->_actor12._position.y == 123)) { + scene->_actor14.show(); + scene->_actor15.show(); + R2_GLOBALS.setFlag(18); + } else { + warning("sub1A03B(\"That\'s probably not a good thing, ya know!\", 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);"); + } + break; + case 1: + if (scene->_field41A < 780) { + if (di > 54) + di -= 65; + di += 2; + scene->_field41A += 2; + + for (int i = 0; i < 17; i++) + scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y)); + + scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y)); + scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y)); + scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y)); + scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y)); + scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y)); + } + break; + case 2: + if (scene->_field41A > 0) { + if (di < -8) + di += 65; + + di -= 2; + scene->_field41A -= 2; + for (int i = 0; i < 178; i++) + scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y)); + + scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y)); + scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y)); + scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y)); + scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y)); + scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y)); + } + break; + case 3: { + int tmpPosY = scene->_actor1._position.y; + if (tmpPosY < 176) { + ++tmpPosY; + for (int i = 0; i < 17; ++i) + scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y + 1)); + + scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y + 1)); + scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y + 1)); + scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y)); + scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y)); + scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y)); + } + } + break; + case 4: { + int tmpPosY = scene->_actor1._position.y; + if (tmpPosY > 145) { + tmpPosY--; + for (int i = 0; i < 17; ++i) + scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y - 1)); + + scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y - 1)); + scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y - 1)); + scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y)); + scene->_actor2.setPosition(Common::Point(di + 65, scene->_actor1._position.y)); + scene->_actor3.setPosition(Common::Point(di + 130, scene->_actor1._position.y)); + } + } + break; + case 5: + R2_GLOBALS._sceneManager.changeScene(1550); + break; + default: + break; + } + + int j = 0; + for (int i = 0; i < 17; i++) { + if (scene->_arrActor[i]._bounds.contains(85, 116)) + j = i; + } + + if (scene->_actor13._bounds.contains(85, 116)) + j = 18; + + if (scene->_actor12._bounds.contains(85, 116)) + j = 19; + + if (j) + scene->_actor11.show(); + else + scene->_actor11.hide(); +} + +bool Scene1575::Hotspot1::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) + return false; + return SceneHotspot::startAction(action, event); +} + +void Scene1575::Hotspot1::subA910D(int indx) { + warning("STUB: Scene1575:Hotspot1::subA910D(%d)", indx); +} + +void Scene1575::postInit(SceneObjectList *OwnerList) { + loadScene(1575); + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._v5589E = Rect(0, 0, 320, 200); + SceneExt::postInit(); + _field414 = 390; + + _actor1.postInit(); + _actor1.setup(1575, 1, 1); + _actor1.setPosition(Common::Point(54, 161)); + _actor1.fixPriority(5); + + _actor2.postInit(); + _actor2.setup(1575, 1, 1); + _actor2.setPosition(Common::Point(119, 161)); + _actor2.fixPriority(5); + + _actor3.postInit(); + _actor3.setup(1575, 1, 1); + _actor3.setPosition(Common::Point(184, 161)); + _actor3.fixPriority(5); + + for (int i = 0; i < 17; i++) { + _arrActor[i].postInit(); + _arrActor[i].setup(1575, 2, k5A7F6[(3 * i) + 2]); + warning("TODO: immense pile of floating operations"); + _arrActor[i].fixPriority(6); + } + + _actor4.postInit(); + _actor4.setup(1575, 3, 1); + _actor4.setPosition(Common::Point(48, 81)); + + _actor5.postInit(); + _actor5.setup(1575, 3,1); + _actor5.setPosition(Common::Point(121, 81)); + + _actor6.postInit(); + _actor6.setup(1575, 3, 2); + _actor6.setPosition(Common::Point(203, 80)); + + _actor7.postInit(); + _actor7.setup(1575, 3, 2); + _actor7.setPosition(Common::Point(217, 80)); + + _actor8.postInit(); + _actor8.setup(1575, 3, 2); + _actor8.setPosition(Common::Point(231, 80)); + + _actor9.postInit(); + _actor9.setup(1575, 3, 2); + _actor9.setPosition(Common::Point(273, 91)); + + _actor10.postInit(); + _actor10.setup(1575, 3, 2); + _actor10.setPosition(Common::Point(287, 91)); + + _item1.subA910D(1); + _item1.subA910D(2); + _item1.subA910D(3); + _item1.subA910D(4); + _item1.subA910D(5); + _item1.subA910D(6); + + _actor11.postInit(); + _actor11.setup(1575, 4, 2); + _actor11.setPosition(Common::Point(84, 116)); + _actor11.hide(); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.enableControl(); + + do { + _field412 = R2_GLOBALS._randomSource.getRandomNumber(20) - 10; + _field414 = R2_GLOBALS._randomSource.getRandomNumber(20) - 10; + } while ((_field412) && (_field414)); + + if (_field412 < 0) + _actor4.hide(); + + if (_field414 < 0) + _actor5.hide(); + + _field416 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1; + _field418 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1; + + _actor13.postInit(); + _actor13.setup(1575, 2, 4); + + warning("TODO: another immense pile of floating operations"); + + _actor12.postInit(); + _actor12.fixPriority(12); + + if (R2_GLOBALS.getFlag(17)) { + _actor13.setPosition(Common::Point(_actor13._position.x + 5, _actor13._position.y)); + _actor12.setPosition(Common::Point(_actor12._position.x + 5, _actor12._position.y)); + } + + _actor14.postInit(); + _actor14.setup(1575, 5, 1); + _actor14.setPosition(Common::Point(85, 176)); + _actor14.fixPriority(7); + _actor14.hide(); + + _actor15.postInit(); + _actor15.setup(1575, 5, 2); + _actor15.setPosition(Common::Point(85, 147)); + _actor15.fixPriority(7); + _actor15.hide(); +} + +void Scene1575::remove() { + SceneExt::remove(); + R2_GLOBALS._v5589E.top = 3; + R2_GLOBALS._v5589E.bottom = 168; + R2_GLOBALS._v58CE2 = 1; +} + +void Scene1575::signal() { + R2_GLOBALS._player.enableControl(); +} + +void Scene1575::process(Event &event) { + Scene::process(event); + + g_globals->_sceneObjects->recurse(SceneHandler::dispatchObject); + warning("TODO: check Scene1575::process"); +} + +void Scene1575::dispatch() { + if (_field412 <= 0) { + ++_field412; + if (_field412 == 0) { + _actor4.show(); + _field412 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1; + } + } else { + _field412--; + if (_field412 ==0) { + _actor4.hide(); + _field412 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1; + } + } + + if (_field414 <= 0) { + ++_field414; + if (_field414 == 0) { + _actor5.show(); + _field414 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1; + } + } else { + _field414--; + if (_field414 == 0) { + _actor5.hide(); + _field414 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1; + } + } + + if (_field416 == 0) { + switch(R2_GLOBALS._randomSource.getRandomNumber(3)) { + case 0: + _actor6.hide(); + _actor7.hide(); + _actor8.hide(); + break; + case 1: + _actor6.show(); + _actor7.hide(); + _actor8.hide(); + break; + case 2: + _actor6.show(); + _actor7.show(); + _actor8.hide(); + break; + case 3: + _actor6.show(); + _actor7.show(); + _actor8.show(); + break; + default: + break; + } + _field416 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1; + } else { + --_field416; + } + + if (_field418 == 0) { + switch(R2_GLOBALS._randomSource.getRandomNumber(2)) { + case 0: + _actor9.hide(); + _actor10.hide(); + break; + case 1: + _actor9.show(); + _actor10.hide(); + break; + case 2: + _actor9.show(); + _actor10.show(); + break; + default: + break; + } + _field418 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1; + } else { + _field418--; + } + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index d62700c686..07813f16d7 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -380,6 +380,59 @@ public: virtual void dispatch(); virtual void saveCharacter(int characterIndex); }; + +class Scene1575 : public SceneExt { + class Hotspot1 : public NamedHotspot { + public: + int _field34; + int _field36; + + Hotspot1(); + void synchronize(Serializer &s); + void subA910D(int indx); + + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _field412; + int _field414; + int _field416; + int _field418; + int _field41A; + Hotspot1 _item1; + Hotspot1 _item2; + Hotspot1 _item3; + Hotspot1 _item4; + Hotspot1 _item5; + Hotspot1 _item6; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SceneActor _actor10; + SceneActor _actor11; + SceneActor _actor12; + SceneActor _actor13; + SceneActor _actor14; + SceneActor _actor15; + SceneActor _arrActor[17]; + SequenceManager _sequenceManager1; + + Scene1575(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From a410584928a7d65655ed4e4195cb39b27ee699c2 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 17 Jan 2012 17:56:29 +0100 Subject: TSAGE: R2R - Implement scene 1580 Also fix a couple of setdetails calls in scene 1550 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 361 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 59 ++++ 3 files changed, 420 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 1a03cffc5c..5bd8aa8315 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -121,6 +121,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1575: return new Scene1575(); case 1580: + // Inside wreck + return new Scene1580(); case 1625: case 1700: case 1750: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 576d4e5beb..a8976f667c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4147,7 +4147,7 @@ void Scene1550::subA2B2F() { _actor7.setPosition(Common::Point(272, 94)); _actor7.fixPriority(91); _actor7.changeZoom(100); - warning("_actor7.setDetails(1550, -1, -1, -1, 5, _arrUnkObj15502[7]);"); + _actor7.setDetails(1550, -1, -1, -1, 5, &_arrUnkObj15502[7]); } else { _actor7.setup(1505, 6, 1); _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); @@ -4158,7 +4158,7 @@ void Scene1550::subA2B2F() { _actor7.setPosition(Common::Point(276, 97)); _actor7.fixPriority(91); _actor7.changeZoom(100); - warning("_actor7.setDetails(1550, -1, -1, -1, 5, _arrUnkObj15502[7]);"); + _actor7.setDetails(1550, -1, -1, -1, 5, &_arrUnkObj15502[7]); } else { _actor7.setup(1500, 6, 1); _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); @@ -4548,5 +4548,362 @@ void Scene1575::dispatch() { Scene::dispatch(); } +/*-------------------------------------------------------------------------- + * Scene 1580 - Inside wreck + * + *--------------------------------------------------------------------------*/ +Scene1580::Scene1580() { + _field412 = 0; +} + +void Scene1580::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + + +bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) { + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + if (action == R2_26) { + R2_INVENTORY.setObjectScene(26, 1580); + R2_GLOBALS._sceneItems.remove(&scene->_item1); + scene->_actor2.postInit(); + scene->_actor2.setup(1580, 1, 4); + scene->_actor2.setPosition(Common::Point(159, 163)); + scene->_actor2.setDetails(1550, 78, -1, -1, 2, (SceneItem *) NULL); + + scene->_arrActor[5].remove(); + + return true; + } + + return SceneHotspot::startAction(action, event); +} + +bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) { + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + if (action == R2_28) { + R2_INVENTORY.setObjectScene(28, 1580); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._sceneItems.remove(&scene->_item2); + + scene->_actor3.postInit(); + scene->_actor3.setup(1580, 1, 1); + scene->_actor3.setPosition(Common::Point(124, 108)); + scene->_actor3.fixPriority(10); + + if (R2_INVENTORY.getObjectScene(26) == 1580) + scene->_actor3.setDetails(1550, 14, -1, -1, 5, &scene->_actor2); + else + scene->_actor3.setDetails(1550, 14, -1, -1, 2, (SceneItem *)NULL); + + scene->_actor1.postInit(); + scene->_actor1.setup(1580, 3, 1); + scene->_actor1.setPosition(Common::Point(124, 109)); + scene->_actor1.fixPriority(20); + scene->_field412 = 1; + scene->_sceneMode = 10; + scene->setAction(&scene->_sequenceManager, scene, 1, R2_GLOBALS._player, NULL); + + return true; + } + + return SceneHotspot::startAction(action, event); +} + +bool Scene1580::Actor2::startAction(CursorType action, Event &event) { + if ( (action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(28) == 1580) + && (R2_INVENTORY.getObjectScene(17) == 0) && (R2_INVENTORY.getObjectScene(22) == 0) + && (R2_INVENTORY.getObjectScene(25) == 0) && (R2_INVENTORY.getObjectScene(18) == 0) + && (R2_INVENTORY.getObjectScene(23) == 0) && (R2_INVENTORY.getObjectScene(27) == 0)) { + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + scene->_sceneMode = 31; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._player._characterIndex == 1) + scene->_stripManager.start(536, scene); + else + scene->_stripManager.start(537, scene); + + return true; + } + + return SceneActor::startAction(action, event); +} + +bool Scene1580::Actor3::startAction(CursorType action, Event &event) { + if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(51) == 1580)) { + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + R2_INVENTORY.setObjectScene(51, R2_GLOBALS._player._characterIndex); + scene->_item2.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 2, NULL); + scene->_actor1.remove(); + remove(); + return true; + } + + return SceneActor::startAction(action, event); +} + +bool Scene1580::Actor4::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._sceneItems.remove(&scene->_actor4); + scene->_sceneMode = 0; + animate(ANIM_MODE_5, scene); + + return true; +} + +bool Scene1580::Actor5::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + setFrame(2); + scene->_sceneMode = 20; + scene->setAction(&scene->_sequenceManager, scene, 2, &R2_GLOBALS._player, NULL); + + return true; +} + +bool Scene1580::Actor6::startAction(CursorType action, Event &event) { + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex == 1) { + R2_INVENTORY.setObjectScene(23, 1); + remove(); + return true; + } + break; + case R2_9: + scene->_sceneMode = 30; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(529, scene); + return true; + break; + case R2_39: + scene->_sceneMode = 30; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(527, scene); + return true; + break; + default: + break; + } + + return SceneActor::startAction(action, event); +} + +bool Scene1580::Actor7::startAction(CursorType action, Event &event) { + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex == 1) { + R2_INVENTORY.setObjectScene(27, 1); + remove(); + return true; + } + break; + case R2_9: + scene->_sceneMode = 30; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(529, scene); + return true; + break; + case R2_39: + scene->_sceneMode = 30; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(527, scene); + return true; + break; + default: + break; + } + + return SceneActor::startAction(action, event); +} + +void Scene1580::postInit(SceneObjectList *OwnerList) { + loadScene(1580); + R2_GLOBALS._sceneManager._fadeMode = FADEMODE_GRADUAL; + SceneExt::postInit(); + _field412 = 0; + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + _sceneMode = 0; + + R2_GLOBALS._player.disableControl(); + if (R2_INVENTORY.getObjectScene(26) == 1580) { + _actor2.postInit(); + _actor2.setup(1580, 1, 4); + _actor2.setPosition(Common::Point(159, 163)); + _actor2.setDetails(1550, 78, -1, -1, 1, (SceneItem *) NULL); + } else { + _item1.setDetails(Rect(141, 148, 179, 167), 1550, 79, -1, -1, 1, NULL); + } + + if (R2_INVENTORY.getObjectScene(51) == 1580) { + _actor3.postInit(); + _actor3.setup(1580, 1, 1); + _actor3.setPosition(Common::Point(124, 108)); + _actor3.fixPriority(10); + _actor3.setDetails(1550, 13, -1, -1, 1, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1580, 1, 3); + _actor1.setPosition(Common::Point(124, 96)); + _actor1.fixPriority(20); + } else if (R2_INVENTORY.getObjectScene(28) == 1580) { + _actor3.postInit(); + _actor3.setup(1580, 1, 1); + _actor3.setPosition(Common::Point(124, 108)); + _actor3.fixPriority(10); + _actor3.setDetails(1550, 14, -1, -1, 1, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1580, 3, 1); + _actor1.setPosition(Common::Point(124, 109)); + _actor1.fixPriority(20); + + _sceneMode = 10; + } else { + _item2.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 1, NULL); + } + + _actor4.postInit(); + if (R2_INVENTORY.getObjectScene(58) == 0) { + _actor4.setup(1580, 5, 1); + _actor4.setDetails(1550, 80, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor4.setup(1580, 5, 6); + } + + _actor4.setPosition(Common::Point(216, 108)); + _actor4.fixPriority(100); + + _actor5.postInit(); + _actor5.setup(1580, 4, 1); + _actor5.setPosition(Common::Point(291, 147)); + _actor5.fixPriority(100); + _actor5.setDetails(1550, 81, -1, -1, 1, (SceneItem *) NULL); + + if (R2_INVENTORY.getObjectScene(23) == 1580) { + _actor6.postInit(); + _actor6.setup(1580, 6, 2); + _actor6.setPosition(Common::Point(222, 108)); + _actor6.fixPriority(50); + _actor6.setDetails(1550, 32, -1, 34, 1, (SceneItem *) NULL); + } + + if (R2_INVENTORY.getObjectScene(27) == 1580) { + _actor7.postInit(); + _actor7.setup(1580, 6, 1); + _actor7.setPosition(Common::Point(195, 108)); + _actor7.fixPriority(50); + _actor7.setDetails(1550, 38, -1, 34, 1, (SceneItem *) NULL); + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1580; + R2_GLOBALS._player.hide(); + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + _item3.setDetails(Rect(0, 0, 320, 200), 1550, 50, -1, -1, 1, NULL); + +} + +void Scene1580::signal() { + switch (_sceneMode++) { + case 10: + _actor1.animate(ANIM_MODE_5, this); + break; + case 11: + _actor1.setup(1580, 1, 2); + _actor1.setPosition(Common::Point(124, 94)); + + if (R2_INVENTORY.getObjectScene(18) != 0) { + _arrActor[0].postInit(); + _arrActor[0].setup(1580, 2, 1); + _arrActor[0].setPosition(Common::Point(138, 56)); + } + + if (R2_INVENTORY.getObjectScene(25) != 0) { + _arrActor[1].postInit(); + _arrActor[1].setup(1580, 2, 2); + _arrActor[1].setPosition(Common::Point(140, 66)); + } + + if (R2_INVENTORY.getObjectScene(27) != 0) { + _arrActor[2].postInit(); + _arrActor[2].setup(1580, 2, 3); + _arrActor[2].setPosition(Common::Point(142, 85)); + } + + if (R2_INVENTORY.getObjectScene(23) != 0) { + _arrActor[3].postInit(); + _arrActor[3].setup(1580, 2, 4); + _arrActor[3].setPosition(Common::Point(142, 92)); + } + + if (R2_INVENTORY.getObjectScene(22) != 0) { + _arrActor[4].postInit(); + _arrActor[4].setup(1580, 2, 5); + _arrActor[4].setPosition(Common::Point(108, 54)); + } + + if (R2_INVENTORY.getObjectScene(26) != 0) { + _arrActor[5].postInit(); + _arrActor[5].setup(1580, 2, 6); + _arrActor[5].setPosition(Common::Point(110, 64)); + } + + if (R2_INVENTORY.getObjectScene(45) != 0) { + _arrActor[6].postInit(); + _arrActor[6].setup(1580, 2, 7); + _arrActor[6].setPosition(Common::Point(108, 80)); + } + + if (R2_INVENTORY.getObjectScene(17) != 0) { + _arrActor[7].postInit(); + _arrActor[7].setup(1580, 2, 8); + _arrActor[7].setPosition(Common::Point(111, 92)); + } + + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + case 20: + R2_GLOBALS._sceneManager.changeScene(1550); + break; + case 31: + R2_GLOBALS._sceneManager.changeScene(1530); + break; + default: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 07813f16d7..4a862e91f1 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -433,6 +433,65 @@ public: virtual void process(Event &event); virtual void dispatch(); }; + +class Scene1580 : public SceneExt { + class Hotspot1 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Hotspot2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor2 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor5 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor6 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor7 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _field412; + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + Hotspot1 _item1; + Hotspot2 _item2; + NamedHotspot _item3; + SceneActor _actor1; + SceneActor _arrActor[8]; + Actor2 _actor2; + Actor3 _actor3; + Actor4 _actor4; + Actor5 _actor5; + Actor6 _actor6; + Actor7 _actor7; + SequenceManager _sequenceManager; + + Scene1580(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 8f03fef3a43441e761d9169bf44ca8308e2c0097 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 17 Jan 2012 18:11:38 +0100 Subject: TSAGE: R2R - Fix bug in scene 1580 (not detected by MSVC) Thanks eriktorbjorn for pointing it --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index a8976f667c..414ae6b644 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4606,7 +4606,7 @@ bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) { scene->_actor1.fixPriority(20); scene->_field412 = 1; scene->_sceneMode = 10; - scene->setAction(&scene->_sequenceManager, scene, 1, R2_GLOBALS._player, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1, &R2_GLOBALS._player, NULL); return true; } -- cgit v1.2.3 From 29a063cb12e5400079bbe14a2610c093c35d7e5e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 17 Jan 2012 22:20:19 +0100 Subject: TSAGE: R2R - Implement scene 1625 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 270 ++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 29 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 51 ++++- engines/tsage/ringworld2/ringworld2_speakers.h | 27 ++- 5 files changed, 374 insertions(+), 5 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 5bd8aa8315..82f52ab558 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -124,6 +124,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Inside wreck return new Scene1580(); case 1625: + // Miranda being questioned + return new Scene1625(); case 1700: case 1750: case 1800: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 414ae6b644..6f748362df 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4562,7 +4562,6 @@ void Scene1580::synchronize(Serializer &s) { s.syncAsSint16LE(_field412); } - bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) { Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; @@ -4905,5 +4904,274 @@ void Scene1580::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 1625 - Miranda being questioned + * + *--------------------------------------------------------------------------*/ +Scene1625::Scene1625() { + _field412 = 0; +} + +void Scene1625::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + +bool Scene1625::Actor7::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + + scene->_sceneMode = 1631; + scene->_actor3.postInit(); + scene->setAction(&scene->_sequenceManager, scene, 1631, &scene->_actor3, &scene->_actor7, NULL); + return true; +} + +void Scene1625::postInit(SceneObjectList *OwnerList) { + loadScene(1625); + R2_GLOBALS._player._characterIndex = R2_MIRANDA; + SceneExt::postInit(); + + _stripManager.addSpeaker(&_mirandaSpeaker); + _stripManager.addSpeaker(&_tealSpeaker); + _stripManager.addSpeaker(&_soldierSpeaker); + + R2_GLOBALS._player.postInit(); + + _actor7.postInit(); + _actor7.setup(1626, 2, 1); + _actor7.setPosition(Common::Point(206, 133)); + _actor7.setDetails(1625, 0, -1, -1, 1, (SceneItem *) NULL); + + _actor5.postInit(); + _actor5.setup(1625, 8, 1); + _actor5.setPosition(Common::Point(190, 131)); + _actor5.setDetails(1625, 6, -1, 2, 1, (SceneItem *) NULL); + + if (R2_GLOBALS._player._oldCharacterScene[3] == 1625) { + if (!R2_GLOBALS.getFlag(83)) { + _actor4.postInit(); + _actor4.setup(1626, 4, 1); + _actor4.setPosition(Common::Point(96, 166)); + _actor4.setDetails(1625, -1, -1, -1, 1, (SceneItem *) NULL); + } + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } else { + _actor1.postInit(); + _actor1.fixPriority(10); + + _actor6.postInit(); + + R2_GLOBALS._player.disableControl(); + _sceneMode = 1625; + setAction(&_sequenceManager, this, 1625, &_actor1, &_actor6, NULL); + } + + R2_GLOBALS._sound1.play(245); + _item1.setDetails(Rect(0, 0, 320, 200), 1625, 12, -1, -1, 1, NULL); + R2_GLOBALS._player._oldCharacterScene[3] = 1625; + R2_GLOBALS._player._characterScene[3] = 1625; +} + +void Scene1625::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene1625::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._player.disableControl(); + _actor4.postInit(); + _actor4.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); + _sceneMode = 1626; + setAction(&_sequenceManager, this, 1626, &_actor2, &_actor4, NULL); + break; + case 12: + // TODO: check if OK_BTN_STRING is required + MessageDialog::show(DONE_MSG, OK_BTN_STRING); + break; + case 14: + _actor2.postInit(); + _actor2.setup(1627, 1, 1); + _actor2.setPosition(Common::Point(68, 68)); + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(831, this); + break; + case 99: + R2_GLOBALS._player.disableControl(); + switch (_stripManager._field2E8) { + case 0: + _sceneMode = 1627; + setAction(&_sequenceManager, this, 1627, &_actor3, &_actor4, NULL); + break; + case 1: + _sceneMode = 1629; + setAction(&_sequenceManager, this, 1629, &_actor2, &_actor5, NULL); + break; + case 3: + R2_GLOBALS._player._oldCharacterScene[3] = 3150; + R2_GLOBALS._player._characterScene[3] = 3150; + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._characterScene[1]); + break; + case 4: + _sceneMode = 1628; + _actor2.remove(); + setAction(&_sequenceManager, this, 1628, &_actor3, &_actor4, NULL); + break; + case 5: + _actor4.postInit(); + _actor4.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); + _sceneMode = 1632; + setAction(&_sequenceManager, this, 1632, &_actor4, NULL); + break; + case 6: + _sceneMode = 1633; + setAction(&_sequenceManager, this, 1633, &_actor4, NULL); + break; + case 7: + _sceneMode = 1635; + setAction(&_sequenceManager, this, 1635, &_actor3, &_actor5, NULL); + break; + case 8: + _actor4.postInit(); + _actor4.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); + _sceneMode = 1634; + setAction(&_sequenceManager, this, 1634, &_actor3, &_actor5, NULL); + break; + case 2: + // No break on purpose + default: + _sceneMode = 1630; + _actor2.postInit(); + setAction(&_sequenceManager, this, 1630, &_actor1, &_actor6, NULL); + break; + } + _field412 = _stripManager._field2E8; + _stripManager._field2E8 = 0; + break; + case 1625: + _actor2.postInit(); + _actor2.setup(1627, 1, 1); + _actor2.setPosition(Common::Point(68, 68)); + _sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(800, this); + break; + case 1626: + _actor2.setup(1627, 1, 1); + _actor2.setPosition(Common::Point(68, 68)); + _actor2.show(); + + _actor3.postInit(); + _actor3.setup(1627, 3, 1); + _actor3.setPosition(Common::Point(196, 65)); + + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(832, this); + break; + case 1627: + _actor3.setup(1627, 3, 1); + _actor3.setPosition(Common::Point(196, 65)); + _actor3.show(); + + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(833, this); + break; + case 1628: + R2_GLOBALS.setFlag(83); + _actor2.postInit(); + _actor2.setup(1627, 1, 1); + _actor2.setPosition(Common::Point(68, 68)); + + _actor3.setup(1627, 3, 1); + _actor3.setPosition(Common::Point(196, 65)); + _actor3.show(); + + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(834, this); + break; + case 1629: + _actor2.setup(1627, 1, 1); + _actor2.setPosition(Common::Point(68, 68)); + _actor2.show(); + + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(805, this); + break; + case 1630: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = true; + break; + case 1631: + _actor3.setup(1627, 3, 1); + _actor3.setPosition(Common::Point(196, 65)); + _actor3.show(); + + _actor7.remove(); + + _actor1.postInit(); + _actor1.fixPriority(10); + + _actor6.postInit(); + warning("_actor6._actorName = \"arm\";"); + + R2_INVENTORY.setObjectScene(40, 3); + _sceneMode = 14; + + setAction(&_sequenceManager, this, 1625, &_actor1, &_actor6, NULL); + break; + case 1632: + _actor2.setup(1627, 1, 1); + _actor2.setPosition(Common::Point(68, 68)); + _actor2.show(); + + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(835, this); + break; + case 1633: + _actor4.remove(); + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(818, this); + break; + case 1634: + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(836, this); + break; + case 1635: + _actor3.setup(1627, 3, 1); + _actor3.setPosition(Common::Point(196, 65)); + _actor3.show(); + + _sceneMode = 99; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(818, this); + break; + default: + break; + } +} + +void Scene1625::process(Event &event) { + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) + event.handled = true; + else + Scene::process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 4a862e91f1..e4ba84cdd9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -492,6 +492,35 @@ public: virtual void signal(); }; +class Scene1625 : public SceneExt { + class Actor7 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _field412; + SpeakerMiranda1625 _mirandaSpeaker; + SpeakerTeal1625 _tealSpeaker; + SpeakerSoldier1625 _soldierSpeaker; + NamedHotspot _item1; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + Actor7 _actor7; + SequenceManager _sequenceManager; + + Scene1625(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index b5fd99b0b4..d86429493a 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -486,6 +486,29 @@ void SpeakerMiranda300::proc15() { } } +void SpeakerMiranda1625::proc15() { + int v = _fieldF6; + + if (!_object2) { + Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor3; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(Common::Point(196, 65)); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1627, 3, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + void SpeakerMiranda3255::proc15() { int v = _fieldF6; @@ -2347,9 +2370,9 @@ void SpeakerSocko3200::proc15() { // Classes related to SOLDIER //---------------------------------------------------------------------------- -SpeakerSoldier300::SpeakerSoldier300(): VisualSpeaker() { +SpeakerSoldier::SpeakerSoldier(int colour) { _speakerName = "SOLDIER"; - _color1 = 60; + _color1 = colour; _color2 = 0; _fieldF6 = 0; _textWidth = 300; @@ -2427,6 +2450,30 @@ void SpeakerTeal300::proc15() { } } +void SpeakerTeal1625::proc15() { + int v = _fieldF6; + + if (!_object2) { + Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor2; + _object2->hide(); + + _object1.postInit(); + _object1.setPosition(Common::Point(68, 68)); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + _object1.setup(1627, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } +} + void SpeakerTeal3240::proc15() { int v = _fieldF6; Scene3240 *scene = (Scene3240 *)R2_GLOBALS._sceneManager._scene; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 13c770a4a3..e795981164 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -146,6 +146,12 @@ public: virtual void proc15(); }; +class SpeakerMiranda1625 : public SpeakerMiranda { +public: + virtual Common::String getClassName() { return "SpeakerMiranda1625"; } + virtual void proc15(); +}; + class SpeakerMiranda3255 : public SpeakerMiranda { public: virtual Common::String getClassName() { return "SpeakerMiranda3255"; } @@ -477,14 +483,25 @@ public: // Classes related to Soldier -class SpeakerSoldier300 : public VisualSpeaker { +class SpeakerSoldier : public VisualSpeaker { public: - SpeakerSoldier300(); + SpeakerSoldier(int colour); + virtual Common::String getClassName() { return "SpeakerSoldier"; } +}; +class SpeakerSoldier300 : public SpeakerSoldier { +public: + SpeakerSoldier300() : SpeakerSoldier(60) {}; virtual Common::String getClassName() { return "SpeakerSoldier300"; } virtual void proc15(); }; +class SpeakerSoldier1625 : public SpeakerSoldier { +public: + SpeakerSoldier1625() : SpeakerSoldier(5) {}; + virtual Common::String getClassName() { return "SpeakerSoldier1625"; } +}; + // Classes related to Teal class SpeakerTeal : public VisualSpeaker { @@ -505,6 +522,12 @@ public: virtual void proc15(); }; +class SpeakerTeal1625 : public SpeakerTeal { +public: + virtual Common::String getClassName() { return "SpeakerTeal1625"; } + virtual void proc15(); +}; + class SpeakerTeal3240 : public SpeakerTeal { public: virtual Common::String getClassName() { return "SpeakerTeal3240"; } -- cgit v1.2.3 From 00a9d394a502598afcc3502d0bdd7cee88a065cc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 18 Jan 2012 23:21:50 +0100 Subject: TSAGE: R2R - Implement scene 1700 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 467 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 60 +++ 3 files changed, 528 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 82f52ab558..15d2331cba 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -127,6 +127,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Miranda being questioned return new Scene1625(); case 1700: + return new Scene1700(); case 1750: case 1800: case 1850: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 6f748362df..9a0a34a93e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -5173,5 +5173,472 @@ void Scene1625::process(Event &event) { Scene::process(event); } +/*-------------------------------------------------------------------------- + * Scene 1700 - + * + *--------------------------------------------------------------------------*/ +Scene1700::Scene1700() { + _field77A = 0; + _field77C = 0; +} + +void Scene1700::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field77A); + s.syncAsSint16LE(_field77C); +} + +bool Scene1700::Item2::startAction(CursorType action, Event &event) { + // The original contains a debug trace. It's currently skipped. + // TODO: either add the debug trace, or remove this function and associated class + return SceneHotspot::startAction(action, event); +} + +bool Scene1700::Actor11::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._v558B6.set(80, 0, 240, 200); + scene->_sceneMode = 4; + + Common::Point pt(271, 90); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + + return true; +} + +bool Scene1700::Actor12::startAction(CursorType action, Event &event) { + if (action != CURSOR_TALK) + return SceneActor::startAction(action, event); + + Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; + scene->_sceneMode = 30; + scene->signal(); + + return true; +} + +void Scene1700::Exit1::changeScene() { + Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + _moving = false; + scene->_sceneMode = 1; + + Common::Point pt(R2_GLOBALS._player._position.x, 0); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1700::Exit2::changeScene() { + Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + _moving = false; + scene->_sceneMode = 2; + + Common::Point pt(R2_GLOBALS._player._position.x, 170); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1700::Exit3::changeScene() { + Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + _moving = false; + scene->_sceneMode = 6; + + Common::Point pt(0, R2_GLOBALS._player._position.y); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1700::subAF3F8() { + Rect tmpRect; + R2_GLOBALS._walkRegions.load(1700); + + _actor3.remove(); + _actor4.remove(); + _actor5.remove(); + _actor6.remove(); + _actor7.remove(); + _actor8.remove(); + _actor11.remove(); + + if (_sceneMode != 40) { + _actor9.remove(); + _actor10.remove(); + } + + warning("tmpRect = _v5589E;"); + warning("Mouse_hideIfNeeded"); + warning("set_pane_p(_paneNumber);"); + warning("Big loop calling gfx_draw_slice_p"); + + if (_field77A == 0) + _field77A = 1; + else + _field77A = 0; + + warning("set_pane_p(_paneNumber);"); + + if ((_sceneMode != 40) && (R2_GLOBALS._v565F6 != 0)){ + _actor9.postInit(); + _actor9.setup(1701, 1, 1); + _actor9.setPosition(Common::Point(220, 137)); + _actor9.setDetails(1700, 6, -1, -1, 2, (SceneItem *) NULL); + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(12); + } + + if ((R2_GLOBALS._v565F6 + 2) % 4 == 0) { + _actor3.postInit(); + _actor3.setup(1700, 1, 1); + _actor3.setPosition(Common::Point(222, 82)); + _actor3.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); + + _actor5.postInit(); + _actor5.setup(1700, 2, 1); + _actor5.setPosition(Common::Point(177, 82)); + _actor5.fixPriority(0); + + _actor6.postInit(); + _actor6.setup(1700, 2, 2); + _actor6.setPosition(Common::Point(332, 96)); + _actor6.fixPriority(0); + + _actor4.postInit(); + _actor4.setup(1700, 1, 2); + _actor4.setPosition(Common::Point(424, 84)); + + R2_GLOBALS._walkRegions.enableRegion(11); + } + + if ((R2_GLOBALS._v565F6 + 399) % 800 == 0) { + _actor7.postInit(); + _actor7.setup(1700, 3, 2); + _actor7.setPosition(Common::Point(51, 141)); + _actor7.fixPriority(0); + _actor7.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); + + _exit3._enabled = true; + } else { + R2_GLOBALS._walkRegions.enableRegion(1); + _exit3._enabled = false; + } + + if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._v565F6 == 25) || (R2_GLOBALS._v565F6 == -3))) + || ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._v565F6 == R2_GLOBALS._v565FA)) + ) { + R2_GLOBALS._v565FA = R2_GLOBALS._v565F6; + if (!R2_GLOBALS.getFlag(15)) + _field77C = 1; + + _actor11.postInit(); + _actor11.setup(1700, 3, 1); + _actor11.setPosition(Common::Point(338, 150)); + _actor11.setDetails(1700, 9, -1, -1, 2, (SceneItem *) NULL); + _actor11.fixPriority(15); + + _actor8.postInit(); + _actor8.setup(1700, 4, 1); + _actor8.setPosition(Common::Point(312, 106)); + _actor8.fixPriority(130); + } +} + +void Scene1700::postInit(SceneObjectList *OwnerList) { + loadScene(1700); + SceneExt::postInit(); + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._sceneManager._previousScene = 1530; + + scalePalette(65, 65, 65); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + _field77A = 0; + _field77C = 0; + + _exit1.setDetails(Rect(94, 0, 319, 12), EXITCURSOR_N, 1700); + _exit2.setDetails(Rect(0, 161, 319, 168), EXITCURSOR_S, 1700); + _exit3.setDetails(Rect(0, 0, 2, 138), EXITCURSOR_W, 1800); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setPosition(Common::Point(0, 0)); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._player.setVisage(1501); + R2_GLOBALS._player._moveDiff = Common::Point(2, 1); + } else { + R2_GLOBALS._player.setVisage(1506); + R2_GLOBALS._player._moveDiff = Common::Point(3, 1); + } + + _actor12.postInit(); + _actor12.animate(ANIM_MODE_1, NULL); + _actor12.setObjectWrapper(new SceneObjectWrapper()); + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor12.setVisage(1506); + _actor12._moveDiff = Common::Point(3, 1); + _actor12.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor12.setVisage(1501); + _actor12._moveDiff = Common::Point(2, 1); + _actor12.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL); + } + + R2_GLOBALS._sound1.play(134); + + _actor1.postInit(); + _actor1.fixPriority(10); + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _actor1.setVisage(1112); + else + _actor1.setVisage(1111); + + _actor1._effect = 5; + _actor1._field9C = _field312; + R2_GLOBALS._player._linkedActor = &_actor1; + + _actor2.postInit(); + _actor2.fixPriority(10); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _actor2.setVisage(1111); + else + _actor2.setVisage(1112); + + _actor2._effect = 5; + _actor2._field9C = _field312; + _actor12._linkedActor = &_actor2; + + R2_GLOBALS._sound1.play(134); + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 1530: + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.hide(); + _actor12.hide(); + + _actor10.postInit(); + warning("_actor10._actorName = \"hatch\";"); + _actor10.hide(); + + _actor9.postInit(); + _actor9.setup(1701, 1, 1); + _actor9.setPosition(Common::Point(220, 137)); + _actor9.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL); + + _actor1.hide(); + _actor2.hide(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(539, this); + _sceneMode = 40; + break; + case 1750: { + R2_GLOBALS._player.setPosition(Common::Point(282, 121)); + _actor12.setPosition(Common::Point(282, 139)); + _sceneMode = 8; + Common::Point pt(262, 101); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + Common::Point pt2(262, 119); + NpcMover *mover2 = new NpcMover(); + _actor12.addMover(mover2, &pt2, this); + } + break; + case 1800: { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.setPosition(Common::Point(0, 86)); + _actor12.setPosition(Common::Point(0, 64)); + _sceneMode = 7; + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player._strip = 1; + Common::Point pt(64, 86); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + _actor12.setObjectWrapper(NULL); + _actor12._strip = 1; + Common::Point pt2(77, 64); + NpcMover *mover2 = new NpcMover(); + _actor12.addMover(mover2, &pt2, NULL); + } + break; + default: + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._player.setPosition(Common::Point(109, 160)); + _actor12.setPosition(Common::Point(156, 160)); + R2_GLOBALS._walkRegions.enableRegion(15); + } else { + R2_GLOBALS._player.setPosition(Common::Point(156, 160)); + _actor12.setPosition(Common::Point(109, 160)); + R2_GLOBALS._walkRegions.enableRegion(17); + } + _sceneMode = 50; + setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); + break; + } + R2_GLOBALS._player._characterScene[1] = 1700; + R2_GLOBALS._player._characterScene[2] = 1700; + R2_GLOBALS._player._oldCharacterScene[1] = 1700; + R2_GLOBALS._player._oldCharacterScene[2] = 1700; + + R2_GLOBALS._v558B6.set(20, 0, 320, 200); + subAF3F8(); + _item1.setDetails(1, 1700, 3, -1, -1); + _item2.setDetails(Rect(0, 0, 480, 200), 1700, 0, -1, -1, 1, NULL); +} + +void Scene1700::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene1700::signal() { + switch (_sceneMode) { + case 1: { + _sceneMode = 3; + if ((R2_GLOBALS._v565F6 < 2400) && (R2_GLOBALS._v565F6 >= 0)) + ++R2_GLOBALS._v565F6; + subAF3F8(); + R2_GLOBALS._player.setPosition(Common::Point(235 - (((((235 - R2_GLOBALS._player._position.x) * 100) / 103) * 167) / 100), 170)); + Common::Point pt(R2_GLOBALS._player._position.x, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + + if (R2_GLOBALS._player._position.x < 132) { + _actor12.setPosition(Common::Point(156, 170)); + Common::Point pt2(156, 160); + NpcMover *mover2 = new NpcMover(); + _actor12.addMover(mover2, &pt2, NULL); + R2_GLOBALS._walkRegions.enableRegion(15); + } else { + _actor12.setPosition(Common::Point(109, 170)); + Common::Point pt3(109, 160); + NpcMover *mover3 = new NpcMover(); + _actor12.addMover(mover3, &pt3, NULL); + R2_GLOBALS._walkRegions.enableRegion(17); + } + } + break; + case 2: { + _sceneMode = 3; + if ((R2_GLOBALS._v565F6 > -2400) && (R2_GLOBALS._v565F6 < 0)) + R2_GLOBALS._v565F6--; + subAF3F8(); + R2_GLOBALS._player.setPosition(Common::Point(235 - (((((235 - R2_GLOBALS._player._position.x) * 100) / 167) * 103) / 100), 0)); + Common::Point pt(R2_GLOBALS._player._position.x, 10); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + + if (R2_GLOBALS._player._position.x >= 171) { + _actor12.setPosition(Common::Point(155, 0)); + Common::Point pt2(155, 10); + NpcMover *mover2 = new NpcMover(); + _actor12.addMover(mover2, &pt2, NULL); + R2_GLOBALS._walkRegions.enableRegion(15); + } else { + _actor12.setPosition(Common::Point(188, 0)); + Common::Point pt3(188, 10); + NpcMover *mover3 = new NpcMover(); + _actor12.addMover(mover3, &pt3, NULL); + R2_GLOBALS._walkRegions.enableRegion(17); + } + } + break; + case 3: + if (_field77C == 0) { + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } else { + R2_GLOBALS.setFlag(15); + _field77C = 0; + _sceneMode = 31; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _stripManager.start(542, this); + else + _stripManager.start(543, this); + } + break; + case 4: { + _sceneMode = 5; + Common::Point pt(271, 90); + PlayerMover *mover = new PlayerMover(); + _actor12.addMover(mover, &pt, NULL); + if (R2_GLOBALS._player._characterIndex == 1) + setAction(&_sequenceManager, this, 1700, &R2_GLOBALS._player, &_actor8, NULL); + else + setAction(&_sequenceManager, this, 1701, &R2_GLOBALS._player, &_actor8, NULL); + } + break; + case 5: + R2_GLOBALS._sceneManager.changeScene(1750); + break; + case 6: + R2_GLOBALS._sceneManager.changeScene(1800); + break; + case 7: + R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + R2_GLOBALS._player._strip = 1; + _actor12.setObjectWrapper(new SceneObjectWrapper()); + _actor12._strip = 1; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._walkRegions.enableRegion(14); + break; + case 8: + R2_GLOBALS._player._strip = 2; + _actor12._strip = 1; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._walkRegions.enableRegion(12); + break; + case 30: + _sceneMode = 31; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _stripManager.start(540, this); + else + _stripManager.start(541, this); + break; + case 31: + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_TALK); + break; + case 40: + R2_GLOBALS._player.disableControl(); + _sceneMode = 1704; + setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_actor12, &_actor10, &_actor9, &_actor1, &_actor2, NULL); + break; + case 50: + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + R2_GLOBALS._walkRegions.enableRegion(15); + else + R2_GLOBALS._walkRegions.enableRegion(17); + + R2_GLOBALS._player.enableControl(); + break; + case 1704: + R2_GLOBALS._sound1.play(134); + R2_GLOBALS._walkRegions.enableRegion(15); + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(12); + R2_GLOBALS._player.fixPriority(-1); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index e4ba84cdd9..cfd701b2d5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -521,6 +521,66 @@ public: virtual void process(Event &event); }; +class Scene1700 : public SceneExt { + class Item2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor11 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor12 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit3 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + NamedHotspot _item1; + Item2 _item2; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + SceneActor _actor7; + SceneActor _actor8; + SceneActor _actor9; + SceneActor _actor10; + Actor11 _actor11; + Actor12 _actor12; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + SequenceManager _sequenceManager; + + int _field77A; + int _field77C; + + Scene1700(); + void synchronize(Serializer &s); + void subAF3F8(); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 69a2c72c47558dfd54762d2361b0fc2c5e680317 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 20 Jan 2012 19:03:12 +0100 Subject: TSAGE: R2R - Implement scene 1800 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 524 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 53 +++ 3 files changed, 579 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 15d2331cba..ff694a69fd 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -129,7 +129,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1700: return new Scene1700(); case 1750: + error("Missing scene %d from group 1", sceneNumber); case 1800: + return new Scene1800(); case 1850: case 1875: case 1900: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 9a0a34a93e..2fa7f50cb4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -5640,5 +5640,529 @@ void Scene1700::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 1800 - + * + *--------------------------------------------------------------------------*/ +Scene1800::Scene1800() { + _field412 = 0; +} + +void Scene1800::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + +bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { + if ((action != R2_9) && (action != R2_39)) + return false; + + Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS._v565F6 == 1201) { + scene->_stripManager.start(548, this); + } else if (R2_GLOBALS.getFlag(66)) { + return false; + } else { + scene->_stripManager.start(546, this); + } + } else { + if (R2_GLOBALS._v565F6 == 1201) { + scene->_stripManager.start(549, this); + } else if (R2_GLOBALS.getFlag(66)) { + return false; + } else { + scene->_stripManager.start(547, this); + } + } + + R2_GLOBALS.setFlag(66); + return true; +} + +bool Scene1800::Actor6::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (!R2_GLOBALS.getFlag(14)) + return false; + + if (R2_GLOBALS._player._characterIndex != R2_QUINN) + return SceneActor::startAction(action, event); + + Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; + R2_GLOBALS._player.disableControl(); + + if (_frame == 1) { + R2_GLOBALS.setFlag(64); + scene->_sceneMode = 1810; + scene->setAction(&scene->_sequenceManager, scene, 1810, &R2_GLOBALS._player, &scene->_actor6, &scene->_actor4, &scene->_actor5, NULL); + } else { + R2_GLOBALS.clearFlag(64); + scene->_sceneMode = 1811; + scene->setAction(&scene->_sequenceManager, scene, 1811, &R2_GLOBALS._player, &scene->_actor6, &scene->_actor4, &scene->_actor5, NULL); + } + return true; +} + +bool Scene1800::Actor7::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { + R2_GLOBALS._player.disableControl(); + if (scene->_field412 >= 2) { + if (R2_GLOBALS.getFlag(14)) { + scene->_sceneMode = 1809; + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + R2_GLOBALS.clearFlag(14); + } else { + scene->_sceneMode = 1808; + scene->setAction(&scene->_sequenceManager, scene, 1808, &R2_GLOBALS._player, &scene->_actor7, NULL); + R2_GLOBALS.setFlag(14); + } + } else { + scene->_sceneMode = 1813; + scene->setAction(&scene->_sequenceManager, scene, 1813, &R2_GLOBALS._player, NULL); + } + } else if (R2_GLOBALS.getFlag(14)) { + return SceneActor::startAction(action, event); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1812; + scene->setAction(&scene->_sequenceManager, scene, 1812, &R2_GLOBALS._player, NULL); + } + + return true; +} + +bool Scene1800::Actor8::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; + + if (_position.x < 160) { + if (scene->_actor4._frame == 1) { + return SceneActor::startAction(action, event); + } else { + R2_GLOBALS.setFlag(29); + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(14)) { + scene->_sceneMode = 1804; + scene->setAction(&scene->_sequenceManager, scene, 1804, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor8, NULL); + } else { + scene->_sceneMode = 1; + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor7, NULL); + R2_GLOBALS.clearFlag(14); + } + } else { + if (R2_GLOBALS.getFlag(14)) { + scene->_sceneMode = 1; + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + R2_GLOBALS.clearFlag(14); + } else { + scene->_sceneMode = 1805; + scene->setAction(&scene->_sequenceManager, scene, 1805, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor8, NULL); + } + } + } + } else { + if (scene->_actor4._frame == 1) { + return SceneActor::startAction(action, event); + } else { + R2_GLOBALS.clearFlag(29); + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(14)) { + scene->_sceneMode = 2; + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor7, NULL); + R2_GLOBALS.clearFlag(14); + } else { + scene->_sceneMode = 1806; + scene->setAction(&scene->_sequenceManager, scene, 1806, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor9, NULL); + } + } else { + if (R2_GLOBALS.getFlag(14)) { + scene->_sceneMode = 2; + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + R2_GLOBALS.clearFlag(14); + } else { + scene->_sceneMode = 1807; + scene->setAction(&scene->_sequenceManager, scene, 1807, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor9, NULL); + } + } + } + } + + return true; +} + +void Scene1800::Exit1::changeScene() { + Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS.getFlag(14)) { + scene->_sceneMode = 3; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_actor2, &scene->_actor7, NULL); + R2_GLOBALS.clearFlag(14); + } else { + scene->_sceneMode = 1802; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_actor2, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_actor2, NULL); + } +} + +void Scene1800::postInit(SceneObjectList *OwnerList) { + loadScene(1800); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(116); + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + if (R2_GLOBALS._sceneManager._previousScene == -1) + R2_GLOBALS._v565F6 = 1201; + + if (R2_GLOBALS._v565F6 == 1201) + _field412 = 2; + else + _field412 = 0; + + scalePalette(65, 65, 65); + _exit1.setDetails(Rect(0, 160, 319, 168), EXITCURSOR_S, 1800); + _item5.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL); + + _actor6.postInit(); + _actor6.setup(1801, 4, 1); + _actor6.setPosition(Common::Point(170, 24)); + _actor6.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL); + + _actor7.postInit(); + _actor7.setup(1801, 3, 1); + _actor7.setPosition(Common::Point(160, 139)); + _actor7.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL); + + _actor8.postInit(); + _actor8.setup(1800, 1, 1); + _actor8.setPosition(Common::Point(110, 78)); + _actor8.fixPriority(135); + _actor8.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); + + _actor9.postInit(); + _actor9.setup(1800, 2, 1); + _actor9.setPosition(Common::Point(209, 78)); + _actor9.fixPriority(135); + _actor9.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); + + _actor4.postInit(); + if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64))) + _actor4.setup(1801, 2, 1); + else + _actor4.setup(1801, 2, 10); + _actor4.setPosition(Common::Point(76, 142)); + _actor4.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); + + _actor5.postInit(); + if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64))) + _actor5.setup(1801, 1, 1); + else + _actor5.setup(1801, 1, 10); + _actor5.setPosition(Common::Point(243, 142)); + _actor5.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(14)) { + R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); + R2_GLOBALS._player.setObjectWrapper(NULL); + R2_GLOBALS._player.setup(1801, 5, 12); + R2_GLOBALS._player.setPosition(Common::Point(160, 139)); + R2_GLOBALS._walkRegions.enableRegion(9); + _actor7.hide(); + } else { + R2_GLOBALS._player.setVisage(1507); + } + R2_GLOBALS._player._moveDiff = Common::Point(4, 2); + } else { + R2_GLOBALS._player.setVisage(1503); + R2_GLOBALS._player._moveDiff = Common::Point(2, 2); + } + + _actor2.postInit(); + _actor2.animate(ANIM_MODE_1, NULL); + _actor2.setObjectWrapper(new SceneObjectWrapper()); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(14)) { + _actor2.animate(ANIM_MODE_NONE, NULL); + _actor2.setObjectWrapper(NULL); + _actor2.setup(1801, 5, 12); + + R2_GLOBALS._walkRegions.enableRegion(9); + _actor7.hide(); + } else { + _actor2.setup(1507, 1, 1); + _actor2.setPosition(Common::Point(180, 160)); + } + _actor2.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + _actor2._moveDiff = Common::Point(4, 2); + } else { + _actor2.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + _actor2.setVisage(1503); + _actor2._moveDiff = Common::Point(2, 2); + } + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._player.setPosition(Common::Point(114, 150)); + R2_GLOBALS._player.setStrip(5); + if (R2_GLOBALS.getFlag(14)) { + _actor2.setPosition(Common::Point(160, 139)); + R2_GLOBALS._walkRegions.enableRegion(8); + } else { + _actor2.setPosition(Common::Point(209, 150)); + _actor2.setStrip(6); + R2_GLOBALS._walkRegions.enableRegion(8); + } + } else { + if (R2_GLOBALS.getFlag(14)) { + R2_GLOBALS._player.setup(1801, 5, 12); + R2_GLOBALS._player.setPosition(Common::Point(160, 139)); + } else { + R2_GLOBALS._player.setPosition(Common::Point(209, 150)); + R2_GLOBALS._player.setStrip(6); + } + _actor2.setPosition(Common::Point(114, 150)); + _actor2.setStrip(5); + R2_GLOBALS._walkRegions.enableRegion(10); + R2_GLOBALS._walkRegions.enableRegion(11); + } + } else { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._player.setPosition(Common::Point(140, 160)); + _actor2.setPosition(Common::Point(180, 160)); + } else { + R2_GLOBALS._player.setPosition(Common::Point(180, 160)); + _actor2.setPosition(Common::Point(140, 160)); + } + } + + _actor1.postInit(); + _actor1.fixPriority(10); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _actor1.setVisage(1111); + else + _actor1.setVisage(1110); + + _actor1._effect = 5; + _actor1._field9C = _field312; + + R2_GLOBALS._player._linkedActor = &_actor1; + + _actor3.postInit(); + _actor3.fixPriority(10); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _actor3.setVisage(1110); + else + _actor3.setVisage(1111); + + _actor3._effect = 5; + _actor3._field9C = _field312; + + _actor2._linkedActor = &_actor3; + + R2_GLOBALS._player._characterScene[1] = 1800; + R2_GLOBALS._player._characterScene[2] = 1800; + + _item2.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL); + _item1.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL); + + // Original was calling _item3.setDetails(Rect(1800, 11, 24, 23), 25, -1, -1, -1, 1, NULL); + // This is *wrong*. The following statement is a wild guess based on good common sense + _item3.setDetails(11, 1800, 23, 24, 25); + _item4.setDetails(Rect(0, 0, 320, 200), 1800, 17, -1, 19, 1, NULL); + + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) { + if ((R2_GLOBALS.getFlag(14)) && (R2_GLOBALS._player._characterIndex == R2_SEEKER)) { + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + } else { + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } + } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) { + if (R2_GLOBALS.getFlag(29)) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _sceneMode = 1814; + setAction(&_sequenceManager, this, 1814, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + } else { + _sceneMode = 1815; + setAction(&_sequenceManager, this, 1815, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + } + } else { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _sceneMode = 1816; + setAction(&_sequenceManager, this, 1816, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + } else { + _sceneMode = 1817; + setAction(&_sequenceManager, this, 1817, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + } + } + } else { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _sceneMode = 1800; + setAction(&_sequenceManager, this, 1800, &R2_GLOBALS._player, &_actor2, NULL); + } else { + _sceneMode = 1801; + setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_actor2, NULL); + } + } + + R2_GLOBALS._player._oldCharacterScene[1] = 1800; + R2_GLOBALS._player._oldCharacterScene[2] = 1800; +} + +void Scene1800::signal() { + switch (_sceneMode) { + case 1: + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _sceneMode = 1804; + setAction(&_sequenceManager, this, 1804, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + } else { + _sceneMode = 1805; + setAction(&_sequenceManager, this, 1805, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + } + break; + case 2: + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _sceneMode = 1806; + setAction(&_sequenceManager, this, 1806, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + } else { + _sceneMode = 1807; + setAction(&_sequenceManager, this, 1807, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + } + break; + case 3: + _sceneMode = 1802; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + setAction(&_sequenceManager, this, 1802, &R2_GLOBALS._player, &_actor2, NULL); + else + setAction(&_sequenceManager, this, 1803, &R2_GLOBALS._player, &_actor2, NULL); + break; + case 10: + // No break on purpose + case 11: + R2_GLOBALS._player.enableControl(CURSOR_TALK); + break; + case 12: + R2_GLOBALS._player.enableControl(CURSOR_TALK); + R2_GLOBALS._player._canWalk = false; + break; + case 13: + _sceneMode = 14; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._player.setup(1801, 7, 1); + R2_GLOBALS._player.animate(ANIM_MODE_8, NULL); + _stripManager.start(550, this); + break; + case 14: + _sceneMode = 15; + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.setup(1801, 6, 1); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 15: + R2_GLOBALS._player.setup(1503, 4, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + case 1800: + R2_GLOBALS._walkRegions.enableRegion(8); + if (R2_GLOBALS.getFlag(63)) + R2_GLOBALS._player.enableControl(CURSOR_USE); + else { + _sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(544, this); + } + break; + case 1801: + R2_GLOBALS._walkRegions.enableRegion(10); + R2_GLOBALS._walkRegions.enableRegion(11); + R2_GLOBALS.setFlag(63); + + // The following check is completely dumb. + // Either an original bug, or dead code. + if (R2_GLOBALS.getFlag(63)) { + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } else { + _sceneMode = 10; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(545, this); + } + break; + case 1802: + R2_GLOBALS.clearFlag(14); + R2_GLOBALS._sceneManager.changeScene(1700); + break; + case 1804: + // No break on purpose + case 1805: + // No break on purpose + case 1806: + // No break on purpose + case 1807: + R2_GLOBALS.clearFlag(14); + R2_GLOBALS._sceneManager.changeScene(1850); + break; + case 1808: + _sceneMode = 12; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(553, this); + break; + case 1812: + _sceneMode = 13; + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 1814: + // No break on purpose + case 1815: + R2_GLOBALS._walkRegions.enableRegion(10); + R2_GLOBALS._walkRegions.enableRegion(11); + R2_GLOBALS._player.enableControl(); + break; + case 1816: + // No break on purpose + case 1817: + R2_GLOBALS._walkRegions.enableRegion(8); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene1800::saveCharacter(int characterIndex) { + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) + R2_GLOBALS._sound1.fadeOut2(NULL); + + SceneExt::saveCharacter(characterIndex); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index cfd701b2d5..08d35edf06 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -581,6 +581,59 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene1800 : public SceneExt { + class Hotspot5 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor6 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor7 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor8 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + int _field412; + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + Hotspot5 _item5; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + Actor6 _actor6; + Actor7 _actor7; + Actor8 _actor8; + Actor8 _actor9; + Exit1 _exit1; + SequenceManager _sequenceManager; + + Scene1800(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void saveCharacter(int characterIndex); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 0f6750945651b6213fd47a7a84e3afc8e65b2afd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 20 Jan 2012 19:45:24 +0100 Subject: TSAGE: R2R - Implement scene 1875 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 208 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 33 ++++ 3 files changed, 243 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ff694a69fd..7e4cbd88ad 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -133,7 +133,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1800: return new Scene1800(); case 1850: + error("Missing scene %d from group 1", sceneNumber); case 1875: + return new Scene1875(); case 1900: case 1925: case 1945: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 2fa7f50cb4..18d27b3c49 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -6164,5 +6164,213 @@ void Scene1800::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } +/*-------------------------------------------------------------------------- + * Scene 1875 - + * + *--------------------------------------------------------------------------*/ +Scene1875::Actor1875::Actor1875() { + _fieldA4 = 0; + _fieldA6 = 0; +} + +void Scene1875::Actor1875::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_fieldA6); +} + +void Scene1875::Actor1875::subB84AB() { + Scene1875 *scene = (Scene1875 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._sound1.play(227); + + int newFrameNumber; + switch (_fieldA4) { + case 3: + if ((scene->_actor1._frame == 1) && (scene->_actor4._strip == 2)) { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_sceneMode = 10; + scene->_stripManager.start(576, this); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1890; + scene->_actor2.postInit(); + scene->setAction(&scene->_sequenceManager, scene, 1890, &scene->_actor2, NULL); + } + break; + case 4: + newFrameNumber = scene->_actor1._frame + 1; + if (newFrameNumber > 6) + newFrameNumber = 1; + scene->_actor1.setFrame(newFrameNumber); + break; + case 5: + newFrameNumber = scene->_actor1._frame - 1; + if (newFrameNumber < 1) + newFrameNumber = 6; + scene->_actor1.setFrame(newFrameNumber); + break; + default: + break; + } +} + +void Scene1875::Actor1875::subB8271(int indx) { + postInit(); + _fieldA4 = indx; + _fieldA6 = 0; + setVisage(1855); + + if (_fieldA4 == 1) + setStrip(2); + else + setStrip(1); + + setFrame(_fieldA4); + switch (_fieldA4 - 1) { + case 0: + setPosition(Common::Point(20, 144)); + break; + case 1: + setPosition(Common::Point(82, 144)); + break; + case 2: + setPosition(Common::Point(136, 144)); + break; + case 3: + setPosition(Common::Point(237, 144)); + break; + case 4: + setPosition(Common::Point(299, 144)); + break; + default: + break; + } + + setDetails(1875, 6, 1, -1, 2, (SceneItem *) NULL); +} + +void Scene1875::Actor1875::process(Event &event) { + if ((R2_GLOBALS._player._uiEnabled) || (event.handled)) + return; + + Scene1875 *scene = (Scene1875 *)R2_GLOBALS._sceneManager._scene; + + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_STEPPING_DISKS) && (_bounds.contains(event.mousePos)) && (_fieldA6 == 0)) { + setStrip(2); + switch (_fieldA4) { + case 1: + R2_GLOBALS._sound2.play(227); + scene->_actor5.setStrip(1); + break; + case 2: + R2_GLOBALS._sound2.play(227); + scene->_actor4.setStrip(1); + break; + default: + break; + } + _fieldA6 = 1; + event.handled = true; + } + + if ((event.eventType == EVENT_BUTTON_UP) && (_fieldA6 != 0)) { + if ((_fieldA4 == 3) || (_fieldA4 == 4) || (_fieldA4 == 5)) { + setStrip(1); + subB84AB(); + } + _fieldA6 = 0; + event.handled = true; + } +} + +void Scene1875::postInit(SceneObjectList *OwnerList) { + loadScene(1875); + SceneExt::postInit(); + + R2_GLOBALS._player._characterScene[1] = 1875; + R2_GLOBALS._player._characterScene[2] = 1875; + + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + _actor4.subB8271(1); + _actor5.subB8271(2); + _actor6.subB8271(3); + _actor7.subB8271(4); + _actor8.subB8271(5); + + _actor1.postInit(); + _actor1.setup(1855, 4, 1); + _actor1.setPosition(Common::Point(160, 116)); + + R2_GLOBALS._player.postInit(); + if (R2_GLOBALS._sceneManager._previousScene == 1625) { + R2_GLOBALS._sound1.play(122); + R2_GLOBALS._player.disableControl(); + _sceneMode = 11; + _actor2.postInit(); + setAction(&_sequenceManager, this, 1892, &_actor2, NULL); + } else if (R2_GLOBALS._sceneManager._previousScene == 3150) { + R2_GLOBALS._sound1.play(116); + } else { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } + + _item2.setDetails(Rect(43, 14, 275, 122), 1875, 9, 1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 1875, 3, -1, -1, 1, NULL); + + R2_GLOBALS._player._characterScene[1] = 1875; + R2_GLOBALS._player._characterScene[2] = 1875; + R2_GLOBALS._player._oldCharacterScene[1] = 1875; + R2_GLOBALS._player._oldCharacterScene[2] = 1875; +} + +void Scene1875::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._player.disableControl(); + _sceneMode = 1891; + _actor2.postInit(); + setAction(&_sequenceManager, this, 1891, &_actor2, NULL); + break; + case 11: + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _sceneMode = 1892; + _stripManager.start(577, this); + break; + case 1890: + _actor2.remove(); + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + case 1891: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._sceneManager.changeScene(1625); + break; + case 1892: + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._sceneManager.changeScene(1900); + break; + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + } +} + +void Scene1875::process(Event &event) { + Scene::process(event); + + _actor4.process(event); + _actor5.process(event); + _actor6.process(event); + _actor7.process(event); + _actor8.process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 08d35edf06..e6ea196cee 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -634,6 +634,39 @@ public: virtual void saveCharacter(int characterIndex); }; +class Scene1875 : public SceneExt { + class Actor1875 : public SceneActor { + public: + int _fieldA4; + int _fieldA6; + + Actor1875(); + void subB84AB(); + void subB8271(int indx); + + void synchronize(Serializer &s); + virtual void process(Event &event); + }; +public: + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Actor1875 _actor4; + Actor1875 _actor5; + Actor1875 _actor6; + Actor1875 _actor7; + Actor1875 _actor8; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + virtual void process(Event &event); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 1c84ef47381fff19c45fb2f9f9a186d16b21b4ab Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 20 Jan 2012 23:39:37 +0100 Subject: TSAGE: R2R - Implement scene 1900 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 251 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 32 +++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 30 +++ engines/tsage/ringworld2/ringworld2_speakers.h | 6 + 5 files changed, 320 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 7e4cbd88ad..ad1835b386 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -137,6 +137,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1875: return new Scene1875(); case 1900: + return new Scene1900(); case 1925: case 1945: case 1950: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 18d27b3c49..eb374b3d50 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -6372,5 +6372,256 @@ void Scene1875::process(Event &event) { _actor8.process(event); } +/*-------------------------------------------------------------------------- + * Scene 1900 - + * + *--------------------------------------------------------------------------*/ +bool Scene1900::Actor2::startAction(CursorType action, Event &event) { + Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if ((_frame != 1) || (R2_GLOBALS._player._characterIndex != R2_SEEKER)) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + return SceneActor::startAction(action, event); + else + return true; + } + + R2_GLOBALS._player.enableControl(CURSOR_USE); + + if (_position.x >= 160) { + scene->_sceneMode = 1905; + scene->setAction(&scene->_sequenceManager1, scene, 1905, &R2_GLOBALS._player, &scene->_actor3, NULL); + } else { + R2_GLOBALS.setFlag(29); + scene->_sceneMode = 1904; + scene->setAction(&scene->_sequenceManager1, scene, 1904, &R2_GLOBALS._player, &scene->_actor2, NULL); + } + + return true; +} + +void Scene1900::Exit1::changeScene() { + Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 10; + + Common::Point pt(-10, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1900::Exit2::changeScene() { + Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 11; + + Common::Point pt(330, 135); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1900::postInit(SceneObjectList *OwnerList) { + loadScene(1900); + SceneExt::postInit(); + + // Debug message, skipped + + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._sceneManager._previousScene = 1925; + R2_GLOBALS._player._characterIndex = R2_SEEKER; + R2_GLOBALS._player._oldCharacterScene[2] = 1925; + } + + if (R2_GLOBALS._sceneManager._previousScene != 1875) + R2_GLOBALS._sound1.play(200); + + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(3); + _stripManager.addSpeaker(&_seekerSpeaker); + + _exit1.setDetails(Rect(0, 105, 14, 145), R2_9, 2000); + _exit1.setDest(Common::Point(14, 135)); + + _exit2.setDetails(Rect(305, 105, 320, 145), R2_10, 2000); + _exit2.setDest(Common::Point(315, 135)); + + R2_GLOBALS._player.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + R2_GLOBALS._player.setup(2008, 3, 1); + else + R2_GLOBALS._player.setup(20, 3, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + else + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._sceneManager._previousScene != 1925) + R2_GLOBALS.clearFlag(29); + + _actor2.postInit(); + _actor2.setup(1901, 1, 1); + _actor2.setPosition(Common::Point(95, 109)); + _actor2.fixPriority(100); + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _actor2.setDetails(1900, 0, 1, 2, 1, (SceneItem *) NULL); + else + _actor2.setDetails(1900, 0, 1, -1, 1, (SceneItem *) NULL); + + _actor3.postInit(); + _actor3.setup(1901, 2, 1); + _actor3.setPosition(Common::Point(225, 109)); + _actor3.fixPriority(100); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _actor3.setDetails(1900, 0, 1, 2, 1, (SceneItem *) NULL); + else + _actor3.setDetails(1900, 0, 1, -1, 1, (SceneItem *) NULL); + + if (R2_GLOBALS._sceneManager._previousScene != 1875) { + _object1.postInit(); + _object1.setup(1945, 6, 1); + _object1.setPosition(Common::Point(96, 109)); + _object1.fixPriority(80); + + _object2.postInit(); + _object2.setup(1945, 6, 2); + _object2.setPosition(Common::Point(223, 109)); + _object2.fixPriority(80); + } + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1875) { + R2_GLOBALS._player._characterIndex = R2_QUINN; + _actor1.postInit(); + _sceneMode = 20; + R2_GLOBALS._player.setAction(&_sequenceManager1, NULL, 1901, &R2_GLOBALS._player, &_actor2, NULL); + _actor1.setAction(&_sequenceManager2, this, 1900, &_actor1, &_actor3, NULL); + } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1925) { + if (R2_GLOBALS.getFlag(29)) { + R2_GLOBALS.clearFlag(29); + _actor2.hide(); + + R2_GLOBALS._player.setStrip(6); + R2_GLOBALS._player.setPosition(Common::Point(90, 106)); + _sceneMode = 1906; + setAction(&_sequenceManager1, this, 1906, &R2_GLOBALS._player, &_actor2, NULL); + } else { + _actor3.hide(); + R2_GLOBALS._player.setStrip(5); + R2_GLOBALS._player.setPosition(Common::Point(230, 106)); + _sceneMode = 1907; + setAction(&_sequenceManager1, this, 1907, &R2_GLOBALS._player, &_actor3, NULL); + } + + if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + _actor1.setPosition(Common::Point(30, 110)); + R2_GLOBALS._walkRegions.enableRegion(1); + _actor1.setup(2008, 3, 1); + _actor1.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1900; + } else if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + _actor1.postInit(); + _actor1.setPosition(Common::Point(30, 110)); + R2_GLOBALS._walkRegions.enableRegion(1); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor1.setup(20, 3, 1); + _actor1.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor1.setup(2008, 3, 1); + _actor1.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); + } + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS._v56605[1] == 5) { + _sceneMode = 1902; + setAction(&_sequenceManager1, this, 1902, &R2_GLOBALS._player, NULL); + } else { + _sceneMode = 1903; + setAction(&_sequenceManager1, this, 1903, &R2_GLOBALS._player, NULL); + } + } else { + if (R2_GLOBALS._v56605[2] == 5) { + _sceneMode = 1908; + setAction(&_sequenceManager1, this, 1908, &R2_GLOBALS._player, NULL); + } else { + _sceneMode = 1909; + setAction(&_sequenceManager1, this, 1909, &R2_GLOBALS._player, NULL); + } + } + } else { + R2_GLOBALS._player.setPosition(Common::Point(160, 135)); + R2_GLOBALS._player.enableControl(); + } + R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1900; + } + + _item2.setDetails(Rect(77, 2, 240, 103), 1900, 6, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 1900, 3, -1, -1, 1, NULL); +} + +void Scene1900::remove() { + R2_GLOBALS._sound1.fadeOut(NULL); + SceneExt::remove(); +} + +void Scene1900::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 5; + R2_GLOBALS._sceneManager.changeScene(2000); + break; + case 11: + R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 6; + R2_GLOBALS._sceneManager.changeScene(2000); + break; + case 20: + ++_sceneMode; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(1300, this); + break; + case 21: + ++_sceneMode; + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._action) + R2_GLOBALS._player._action->_endHandler = this; + else + signal(); + break; + case 22: + _sceneMode = 1910; + _actor1.setAction(&_sequenceManager2, this, 1910, &_actor1, NULL); + break; + case 1904: + R2_GLOBALS._v56A9C = -3; + // No break on purpose + case 1905: + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._sceneManager.changeScene(1925); + break; + case 1910: + R2_INVENTORY.setObjectScene(22, 2535); + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._player._oldCharacterScene[1] = 1900; + R2_GLOBALS._player._oldCharacterScene[2] = 1900; + R2_GLOBALS._sceneManager.changeScene(2450); + break; + case 1906: + R2_GLOBALS._v56A9C = -3; + // No break on purpose + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index e6ea196cee..66c3371410 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -667,6 +667,38 @@ public: virtual void process(Event &event); }; +class Scene1900 : public SceneExt { + class Actor2 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + SpeakerSeeker1900 _seekerSpeaker; + NamedHotspot _item1; + NamedHotspot _item2; + SceneActor _actor1; + BackgroundSceneObject _object1; + BackgroundSceneObject _object2; + Actor2 _actor2; + Actor2 _actor3; + Exit1 _exit1; + Exit2 _exit2; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index d86429493a..01db39de2f 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -1947,6 +1947,36 @@ void SpeakerSeeker1100::proc15() { } } +void SpeakerSeeker1900::proc15() { + int v = _fieldF6; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == 2) { + _object2 = &R2_GLOBALS._player; + } else { + Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_actor1; + } + + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + _object1._numFrames = 7; + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else if (v == 1) { + _object1.setup(4032, 1, 1); + _object1.animate(ANIM_MODE_5, this); + } else { + signal(); + } +} + void SpeakerSeeker2435::proc15() { int v = _fieldF6; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index e795981164..a229ace16a 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -413,6 +413,12 @@ public: virtual void proc15(); }; +class SpeakerSeeker1900 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker1900"; } + virtual void proc15(); +}; + class SpeakerSeeker2435 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker2435"; } -- cgit v1.2.3 From cb1eaf4134e2ffd1a2ceead9b194e7a446cafb1c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 21 Jan 2012 14:15:51 +1100 Subject: TSAGE: Implemented R2R Scene 160 - Credits --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 172 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 20 +++ 3 files changed, 194 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index ad1835b386..0309fa6860 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -53,7 +53,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Empty Bedroom #1 return new Scene150(); case 160: - error("Missing scene %d from group 0", sceneNumber); + // Credits + return new Scene160(); case 175: // Empty Bedroom #2 return new Scene175(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 597156fd03..f153bd254c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -23,6 +23,7 @@ #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" +#include "tsage/ringworld2/ringworld2_dialogs.h" #include "tsage/ringworld2/ringworld2_scenes0.h" #include "tsage/ringworld2/ringworld2_speakers.h" @@ -1289,6 +1290,177 @@ void Scene150::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 160 - Credits + * + *--------------------------------------------------------------------------*/ + +void Scene160::Action1::signal() { + Scene160 *scene = (Scene160 *)R2_GLOBALS._sceneManager._scene; + bool breakFlag; + SynchronizedList::iterator i; + SceneText *topItem; + + switch (_actionIndex) { + case 0: + scene->_yChange = 1; + scene->_lineNum = 0; + ++_actionIndex; + // Deliberate fall-through + + case 1: + setDelay(5); + breakFlag = true; + do { + if (!scene->_lineNum || ((scene->_lineNum != -1) && + ((*scene->_creditsList.reverse_begin())->_position.y < 164) || !breakFlag)) { + breakFlag = true; + Common::String msg = g_resourceManager->getMessage(160, scene->_lineNum++); + + if (*msg.c_str() == '^') { + scene->_lineNum = -1; + } else { + if (msg.size() == 0) + msg = " "; + + SceneText *sceneText = new SceneText(); + sceneText->_fontNumber = 50; + + switch (*msg.c_str()) { + case '$': { + // Centered text + msg.deleteChar(0); + int width = R2_GLOBALS.gfxManager()._font.getStringWidth(msg.c_str()); + + sceneText->_textMode = ALIGN_CENTER; + sceneText->setPosition(Common::Point(160 - (width / 2), 175)); + sceneText->_width = 320; + break; + } + + case '%': { + // Text for position name + msg.deleteChar(0); + int width = R2_GLOBALS.gfxManager()._font.getStringWidth(msg.c_str()); + + sceneText->_textMode = ALIGN_RIGHT; + sceneText->setPosition(Common::Point(151 - width, 175)); + sceneText->_width = 320; + breakFlag = false; + break; + } + + case '@': + // Text for who was in the position + msg.deleteChar(0); + sceneText->_textMode = ALIGN_LEFT; + sceneText->_position = Common::Point(167, 175); + sceneText->_width = 153; + break; + + default: + sceneText->_width = 151; + sceneText->setPosition(Common::Point(151, 175)); + sceneText->_textMode = ALIGN_RIGHT; + break; + } + + sceneText->_color1 = 191; + sceneText->_color2 = 191; + sceneText->_color3 = 191; + sceneText->setup(msg); + sceneText->_flags |= OBJFLAG_CLONED; + sceneText->fixPriority(5); + + scene->_creditsList.push_back(sceneText); + } + } + + } while (!breakFlag); + + // Move all the active credits + for (i = scene->_creditsList.begin(); i != scene->_creditsList.end(); ++i) { + SceneObject *item = *i; + item->setPosition(Common::Point(item->_position.x, item->_position.y - scene->_yChange)); + } + + topItem = *scene->_creditsList.begin(); + if (topItem->_position.y < 25) { + // Credit has reached the top, so remove it + topItem->remove(); + scene->_creditsList.remove(topItem); + + if (scene->_creditsList.size() == 0) { + // No more items left + setDelay(10); + ++_actionIndex; + } + } + break; + + case 2: + HelpDialog::show(); + setDelay(4); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene160::Scene160(): SceneExt() { + _frameNumber = _yChange = 0; + _lineNum = 0; +} + +void Scene160::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(4001); + + R2_GLOBALS._player._uiEnabled = false; + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + + R2_GLOBALS._uiElements.hide(); + R2_GLOBALS._interfaceY = SCREEN_HEIGHT; + + _lineNum = 0; + _frameNumber = R2_GLOBALS._events.getFrameNumber(); + + _sound1.play(337); + setAction(&_action1); +} + +void Scene160::synchronize(Serializer &s) { + SceneExt::synchronize(s); + s.syncAsSint16LE(_frameNumber); + s.syncAsSint16LE(_yChange); + s.syncAsSint16LE(_lineNum); +} + +void Scene160::remove() { + // Clear the credit list + SynchronizedList::iterator i; + for (i = _creditsList.begin(); i != _creditsList.end(); ++i) { + SceneText *item = *i; + + item->remove(); + } + _creditsList.clear(); + + _sound1.fadeOut(NULL); + SceneExt::remove(); +} + +void Scene160::process(Event &event) { + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { + event.handled = true; + HelpDialog::show(); + } + + if (!event.handled) + SceneExt::process(event); +} + /*-------------------------------------------------------------------------- * Scene 200 - Ship Corridor * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index ff5d5d63a4..177cdc3774 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -166,6 +166,26 @@ public: virtual void signal(); }; +class Scene160: public SceneExt { + class Action1: public Action { + public: + void signal(); + }; +public: + ASound _sound1; + Action1 _action1; + int _frameNumber, _yChange; + SceneObject _object1, _object2, _object3; + int _lineNum; + SynchronizedList _creditsList; +public: + Scene160(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void process(Event &event); +}; + class Scene175: public Scene150 { }; -- cgit v1.2.3 From d62e1f28cb08514e7d08c2ea1318b6d5a03296a8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 21 Jan 2012 19:52:14 +1100 Subject: TSAGE: Fix parenthesis in R2R scene 160 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index f153bd254c..e0713fd4b9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1313,7 +1313,7 @@ void Scene160::Action1::signal() { breakFlag = true; do { if (!scene->_lineNum || ((scene->_lineNum != -1) && - ((*scene->_creditsList.reverse_begin())->_position.y < 164) || !breakFlag)) { + (((*scene->_creditsList.reverse_begin())->_position.y < 164) || !breakFlag))) { breakFlag = true; Common::String msg = g_resourceManager->getMessage(160, scene->_lineNum++); -- cgit v1.2.3 From 4e118ccf98e3cc442636da3dddaf965e587ccf15 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 22 Jan 2012 13:16:09 +1100 Subject: TSAGE: Implemented R2R Scene 500 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 58 ++- engines/tsage/ringworld2/ringworld2_logic.h | 14 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 519 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 79 ++++ engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 6 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 4 +- 7 files changed, 672 insertions(+), 10 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 0309fa6860..d81672807a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -78,6 +78,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Science Lab return new Scene400(); case 500: + // Lander Bay 2 Storage + return new Scene500(); case 525: case 600: case 700: @@ -382,7 +384,7 @@ bool SceneExt::display(CursorType action, Event &event) { else SceneItem::display2(5, 0); break; - case R2_7: + case R2_SONIC_STUNNER: if ((R2_GLOBALS._v565F1[1] == 2) || ((R2_GLOBALS._v565F1[1] == 1) && (R2_GLOBALS._v565F1[2] == 2) && (R2_GLOBALS._sceneManager._previousScene == 300))) { R2_GLOBALS._sound4.stop(); @@ -744,12 +746,12 @@ void Ringworld2InvObjectList::reset() { setObjectScene(R2_STEPPING_DISKS, 100); setObjectScene(R2_ATTRACTOR_UNIT, 400); setObjectScene(R2_SENSOR_PROBE, 400); - setObjectScene(R2_7, 500); + setObjectScene(R2_SONIC_STUNNER, 500); setObjectScene(R2_8, 700); setObjectScene(R2_9, 800); setObjectScene(R2_10, 100); setObjectScene(R2_11, 400); - setObjectScene(R2_12, 500); + setObjectScene(R2_AEROSOL, 500); setObjectScene(R2_13, 1550); setObjectScene(R2_OPTICAL_FIBRE, 850); setObjectScene(R2_CLAMP, 850); @@ -757,7 +759,7 @@ void Ringworld2InvObjectList::reset() { setObjectScene(R2_17, 1550); setObjectScene(R2_18, 1550); setObjectScene(R2_19, 1550); - setObjectScene(R2_20, 500); + setObjectScene(R2_REBREATHER_TANK, 500); setObjectScene(R2_21, 500); setObjectScene(R2_22, 1550); setObjectScene(R2_23, 1580); @@ -1104,6 +1106,54 @@ void SceneExit::process(Event &event) { } } +/*--------------------------------------------------------------------------*/ + +void SceneAreaObject::remove() { + _object1.remove(); + SceneArea::remove(); + --R2_GLOBALS._insetUp; +} + +void SceneAreaObject::process(Event &event) { + if (_insetCount == R2_GLOBALS._insetUp) { + CursorType cursor = R2_GLOBALS._events.getCursor(); + + if (_bounds.contains(event.mousePos)) { + // Cursor moving in bounded area + if (cursor == _cursorNum) { + R2_GLOBALS._events.setCursor(_savedCursorNum); + } + } else if (event.mousePos.y < 168) { + if (_cursorNum != cursor) + // Cursor moved outside bounded area + R2_GLOBALS._events.setCursor(_savedCursorNum); + + if (event.eventType == EVENT_BUTTON_DOWN) { + R2_GLOBALS._events.setCursor(_savedCursorNum); + event.handled = true; + } + } + } +} + +void SceneAreaObject::setDetails(int visage, int strip, int frameNumber, const Common::Point &pt) { + _object1.postInit(); + _object1.setup(visage, strip, frameNumber); + _object1.setPosition(pt); + _object1.fixPriority(250); + + _cursorNum = CURSOR_INVALID; + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + scene->_sceneAreas.push_front(this); + + _insetCount = ++R2_GLOBALS._insetUp; +} + +void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { + ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum, + 2, (SceneItem *)NULL); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 9b64063803..14ab1d0081 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -273,6 +273,20 @@ public: } }; +class SceneAreaObject: public SceneArea { + class Object1: public SceneActor { + public: + }; +public: + Object1 _object1; + int _insetCount; + + virtual void remove(); + virtual void process(Event &event); + void setDetails(int visage, int strip, int frameNumber, const Common::Point &pt); + void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index e0713fd4b9..784968b5cb 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -3921,6 +3921,525 @@ void Scene400::dispatch() { } } +/*-------------------------------------------------------------------------- + * Scene 500 - Lander Bay 2 Storage + * + *--------------------------------------------------------------------------*/ + +bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) { + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS.getFlag(26)) { + scene->_stripNumber = 1104; + scene->_sceneMode = 524; + scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); + } else { + scene->_sceneMode = 510; + scene->setAction(&scene->_sequenceManager1, scene, 510, &R2_GLOBALS._player, NULL); + } + return true; + } else { + return SceneHotspot::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +bool Scene500::Object2::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_TALK) { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == 1) { + scene->_stripNumber = R2_GLOBALS.getFlag(26) ? 1101 : 1103; + } else { + scene->_stripNumber = R2_GLOBALS.getFlag(26) ? 1102 : 1105; + } + + scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::Object3::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(500, R2_GLOBALS.getFlag(28) ? 28 : _strip + 25); + return true; + + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if ((_strip != 3) && (_strip != 7)) + SceneItem::display2(500, _strip); + else if (R2_GLOBALS.getFlag(26)) { + R2_GLOBALS._player.disableControl(); + scene->_stripNumber = 1103; + scene->_sceneMode = 524; + scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); + } else if (!R2_GLOBALS.getFlag(28)) + SceneItem::display2(500, 41); + else if (!R2_GLOBALS.getFlag(40)) + SceneItem::display2(500, 40); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 512; + scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, &scene->_object3, NULL); + R2_GLOBALS.setFlag(26); + } + } else { + SceneItem::display2(500, 42); + } + return true; + + case R2_REBREATHER_TANK: + if (!R2_GLOBALS.getFlag(25)) + SceneItem::display2(500, 10); + else if (_strip != 3) + SceneItem::display2(500, _strip + 25); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 515; + scene->setAction(&scene->_sequenceManager1, scene, 515, &R2_GLOBALS._player, &scene->_object3, NULL); + R2_GLOBALS.setFlag(28); + } + return true; + + case R2_21: + SceneItem::display2(500, 53); + return true; + + default: + if (action < R2_LAST_INVENT) { + SceneItem::display2(500, action); + return true; + } else { + return SceneActor::startAction(action, event); + } + } +} + +bool Scene500::Doorway::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) { + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS.getFlag(26)) { + scene->_stripNumber = 1104; + scene->_sceneMode = 524; + scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); + } else { + scene->_sceneMode = 500; + scene->setAction(&scene->_sequenceManager1, scene, 500, &R2_GLOBALS._player, NULL); + } + + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::OxygenTanks::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_LOOK: + SceneItem::display2(500, R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) ? 50 : 49); + return true; + + case CURSOR_USE: + if (R2_GLOBALS._player._characterIndex != R2_QUINN) { + SceneItem::display2(500, 52); + return true; + } else if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) != 1) && + (R2_GLOBALS._player._characterIndex != R2_SEEKER) && !R2_GLOBALS.getFlag(28)) { + R2_GLOBALS._player.disableControl(); + + if (_position.y == 120) { + scene->_sceneMode = 513; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + &scene->_tanks1, NULL); + } else { + scene->_sceneMode = 514; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + &scene->_tanks2, NULL); + } + return true; + } + break; + + default: + break; + } + + return SceneActor::startAction(action, event); +} + +bool Scene500::AirLock::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && R2_GLOBALS.getFlag(26)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = (R2_GLOBALS._player._characterIndex == R2_QUINN) ? 521 : 522; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + &scene->_object2, &scene->_airLock, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::Aerosol::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 503; + scene->setAction(&scene->_sequenceManager1, scene, 503, &R2_GLOBALS._player, this, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::SonicStunner::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = R2_GLOBALS.getFlag(26) ? 520 : 502; + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::Locker1::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) { + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS.getFlag(11)) + scene->_sceneMode = R2_GLOBALS.getFlag(26) ? 517 : 505; + else + scene->_sceneMode = R2_GLOBALS.getFlag(26) ? 516 : 504; + + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, this, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::Locker2::startAction(CursorType action, Event &event) { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) { + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS.getFlag(12)) + scene->_sceneMode = R2_GLOBALS.getFlag(26) ? 519 : 507; + else + scene->_sceneMode = R2_GLOBALS.getFlag(26) ? 518 : 506; + + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, this, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene500::Object::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) { + return false; + } else { + return SceneActor::startAction(action, event); + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene500::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(500); + + Common::fill(&_buffer[0], &_buffer[2710], 0); + _stripManager.setColors(60, 255); + _stripManager.setFontNumber(50); + _stripManager.addSpeaker(&_seekerSpeaker); + _stripManager.addSpeaker(&_quinnSpeaker); + + if (R2_GLOBALS.getFlag(25)) { + R2_GLOBALS._player._characterScene[R2_SEEKER] = 500; + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._walkRegions.disableRegion(1); + + _object2.postInit(); + _object2._effect = 1; + _object2.setup(1505, 1, 1); + _object2._moveDiff.x = 5; + _object2.setPosition(Common::Point(42, 151)); + _object2.setDetails(500, 34, 35, 36, 1, (SceneItem *)NULL); + } else if (R2_GLOBALS._player._characterScene[R2_QUINN] == 500) { + _object2.postInit(); + _object2._effect = 1; + _object2.setup(R2_GLOBALS.getFlag(26) ? 1500 : 10, 1, 1); + _object2.setPosition(Common::Point(42, 151)); + + R2_GLOBALS._walkRegions.disableRegion(1); + R2_GLOBALS._walkRegions.disableRegion(2); + R2_GLOBALS._walkRegions.disableRegion(3); + + _object2.setDetails(500, 37, 38, -1, 1, (SceneItem *)NULL); + } + } + + if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) != 500) && R2_GLOBALS.getFlag(27)) { + _tanks1.postInit(); + _tanks1.setup(502, 7, 1); + _tanks1.setPosition(Common::Point(281, 120)); + _tanks1.setDetails(500, -1, -1, -1, 1, (SceneItem *)NULL); + } else { + if (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 500) { + _tanks1.postInit(); + _tanks1.setup(502, 7, 1); + _tanks1.setPosition(Common::Point(281, 120)); + _tanks1.setDetails(500, -1, -1, -1, 1, (SceneItem *)NULL); + } + + _tanks2.postInit(); + _tanks2.setup(502, 7, 1); + _tanks2.setPosition(Common::Point(286, 121)); + _tanks2.setDetails(500, -1, -1, -1, 1, (SceneItem *)NULL); + } + + _doorway.postInit(); + _doorway.setup(501, 1, 1); + _doorway.setPosition(Common::Point(132, 85)); + _doorway.setDetails(500, 15, -1, 17, 1, (SceneItem *)NULL); + + _airLock.postInit(); + _airLock.setup(501, 2, 1); + _airLock.setPosition(Common::Point(41, 121)); + + if (!R2_GLOBALS.getFlag(25)) + _airLock.setDetails(500, 6, -1, 10, 1, (SceneItem *)NULL); + else if ((R2_GLOBALS._player._characterScene[R2_QUINN] != 500) || + (R2_GLOBALS._player._characterScene[R2_SEEKER] != 500)) + _airLock.setDetails(500, 6, -1, 40, 1, (SceneItem *)NULL); + else + _airLock.setDetails(500, 6, -1, 9, 1, (SceneItem *)NULL); + + _locker1.postInit(); + _locker1.setup(500, 3, R2_GLOBALS.getFlag(11) ? 6 : 1); + _locker1.setPosition(Common::Point(220, 82)); + _locker1.setDetails(500, 27, -1, -1, 1, (SceneItem *)NULL); + + _locker2.postInit(); + _locker2.setup(500, 4, R2_GLOBALS.getFlag(12) ? 6 : 1); + _locker2.setPosition(Common::Point(291, 98)); + _locker2.fixPriority(121); + _locker2.setDetails(500, 27, -1, -1, 1, (SceneItem *)NULL); + + if (R2_INVENTORY.getObjectScene(R2_AEROSOL) == 500) { + _aerosol.postInit(); + _aerosol.setup(500, 5, 2); + _aerosol.setPosition(Common::Point(286, 91)); + _aerosol.fixPriority(120); + _aerosol.setDetails(500, 24, 25, 26, 1, (SceneItem *)NULL); + } + + if (R2_INVENTORY.getObjectScene(R2_SONIC_STUNNER) == 500) { + _sonicStunner.postInit(); + _sonicStunner.setup(500, 5, 1); + _sonicStunner.setPosition(Common::Point(214, 76)); + _sonicStunner.setDetails(500, 21, 22, 23, 1, (SceneItem *)NULL); + } + + _object1.postInit(); + _object1._effect = 1; + _object1.setup(502, 1, 1); + _object1.setPosition(Common::Point(258, 99)); + _object1.fixPriority(50); + + _object8.postInit(); + _object8.setPosition(Common::Point(250, 111)); + + if (!R2_GLOBALS.getFlag(35)) { + _object8.setup(501, 3, 1); + } else { + _object8.setup(500, 8, 7); + + _object3.postInit(); + _object3._effect = 1; + _object3.setPosition(Common::Point(247, 52)); + _object3.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); + + if (!R2_GLOBALS.getFlag(26)) { + if (R2_GLOBALS.getFlag(28)) + _object3.setup(502, 7, 2); + else + _object3.setup(502, R2_GLOBALS._v566A3 + 2, 7); + } + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) + R2_GLOBALS._player._moveDiff.x = 5; + + _controlPanel.setDetails(Rect(175, 62, 191, 80), 500, 31, 32, 33, 1, (SceneItem *)NULL); + _item2.setDetails(Rect(13, 58, 70, 118), 500, 12, -1, -1, 1, (SceneItem *)NULL); + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 500, 0, -1, -1, 1, (SceneItem *)NULL); + + if ((R2_GLOBALS._player._characterIndex == R2_QUINN) && (R2_GLOBALS._sceneManager._previousScene == 700)) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 501; + setAction(&_sequenceManager1, this, 501, &R2_GLOBALS._player, &_doorway, NULL); + } else { + if (R2_GLOBALS._player._characterIndex != R2_QUINN) { + R2_GLOBALS._player.setup(1505, 6, 1); + } else { + R2_GLOBALS._player.setup(R2_GLOBALS.getFlag(26) ? 1500 : 10, 6, 1); + } + + R2_GLOBALS._player.setPosition(Common::Point(123, 135)); + R2_GLOBALS._player.enableControl(); + } +} + +void Scene500::synchronize(Serializer &s) { + SceneExt::synchronize(s); + s.syncAsSint16LE(_stripNumber); +} + +void Scene500::signal() { + switch (_sceneMode) { + case 3: + R2_GLOBALS._player.enableControl(); + break; + case 5: + _sceneMode = 12; + _sound1.play(127); + _object1.animate(ANIM_MODE_6, this); + + R2_GLOBALS.clearFlag(35); + _object3.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 6: + _sceneMode = 11; + _sound1.play(127); + _object1.animate(ANIM_MODE_5, this); + + R2_GLOBALS.clearFlag(35); + _object3.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 7: + _sound1.play(126); + _object8.animate(ANIM_MODE_6, this); + + R2_GLOBALS.clearFlag(35); + _object3.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 500: + R2_GLOBALS._sceneManager.changeScene(700); + break; + case 501: + if (R2_GLOBALS._player._characterScene[R2_QUINN] == 500) { + _stripNumber = 1100; + _sceneMode = 523; + setAction(&_sequenceManager1, this, 523, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player.enableControl(); + } + break; + case 502: + case 520: + R2_INVENTORY.setObjectScene(R2_SONIC_STUNNER, 1); + _sonicStunner.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 503: + R2_INVENTORY.setObjectScene(R2_AEROSOL, 1); + _aerosol.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 504: + case 516: + R2_GLOBALS.setFlag(11); + R2_GLOBALS._player.enableControl(); + break; + case 505: + case 517: + R2_GLOBALS.clearFlag(11); + R2_GLOBALS._player.enableControl(); + break; + case 506: + case 518: + R2_GLOBALS.setFlag(11); + R2_GLOBALS._player.enableControl(); + break; + case 507: + case 519: + R2_GLOBALS.clearFlag(12); + R2_GLOBALS._player.enableControl(); + break; + case 509: + R2_GLOBALS.clearFlag(35); + _object3.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 510: + R2_GLOBALS._player.enableControl(); + _area1.setDetails(500, 6, 1, Common::Point(160, 120)); + R2_GLOBALS._player.enableControl(); + break; + case 513: + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1); + _tanks1.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 514: + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1); + R2_GLOBALS.setFlag(27); + _tanks2.remove(); + R2_GLOBALS._player.enableControl(); + break; + case 515: + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 0); + R2_GLOBALS.setFlag(28); + R2_GLOBALS._player.enableControl(); + break; + case 521: + case 522: + R2_GLOBALS._sceneManager.changeScene(525); + break; + case 523: + case 524: + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + _sceneMode = 8; + _stripManager.start(_stripNumber, this); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + /*-------------------------------------------------------------------------- * Scene 800 - Sick Bay * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 177cdc3774..c7b0ecfc83 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -442,6 +442,85 @@ public: virtual void dispatch(); }; +class Scene500: public SceneExt { + /* Items */ + class ControlPanel: public SceneHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + /* Objects */ + class Object2: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Object3: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Doorway: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class OxygenTanks: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class AirLock: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Object8: public SceneActor { + // This classes uses a custom draw method + }; + class Aerosol: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class SonicStunner: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Locker1: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Locker2: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Object: public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _stripNumber; + byte _buffer[2710]; + SpeakerSeeker _seekerSpeaker; + SpeakerQuinn _quinnSpeaker; + SceneHotspot _background, _item2; + ControlPanel _controlPanel; + SceneActor _object1; + Object2 _object2; + Object3 _object3; + Doorway _doorway; + OxygenTanks _tanks1, _tanks2; + AirLock _airLock; + Object8 _object8; + Aerosol _aerosol; + SonicStunner _sonicStunner; + Locker1 _locker1; + Locker2 _locker2; + SceneAreaObject _area1; + Object _obj1, _obj2, _obj3; + ASoundExt _sound1; + SequenceManager _sequenceManager1, _sequenceManager2; +public: + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void signal(); +}; + class Scene800: public SceneExt { /* Items */ class Button: public NamedHotspot { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index eb374b3d50..18ca3b060d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -277,7 +277,7 @@ bool Scene1100::Actor17::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); } break; - case R2_7: + case R2_SONIC_STUNNER: // No break on purpose case R2_44: if (_visage == 1105) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index ef2d0526ae..a1409067dc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1035,7 +1035,7 @@ bool Scene2350::Actor2::startAction(CursorType action, Event &event) { bool Scene2350::Actor3::startAction(CursorType action, Event &event) { Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; - if ((action == R2_20) && (R2_GLOBALS.getFlag(74))) { + if ((action == R2_REBREATHER_TANK) && (R2_GLOBALS.getFlag(74))) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); scene->_sceneMode = 2355; @@ -2488,7 +2488,7 @@ void Scene2500::signal() { bool Scene2525::Item5::startAction(CursorType action, Event &event) { Scene2525 *scene = (Scene2525 *)R2_GLOBALS._sceneManager._scene; - if ((action == R2_20) && (!R2_GLOBALS.getFlag(74))) { + if ((action == R2_REBREATHER_TANK) && (!R2_GLOBALS.getFlag(74))) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2526; scene->setAction(&scene->_sequenceManager, scene, 2526, &R2_GLOBALS._player, NULL); @@ -4177,7 +4177,7 @@ bool Scene2800::Actor1::startAction(CursorType action, Event &event) { scene->_sceneMode = 2803; scene->_stripManager.start(scene->_field412, scene); return true; - } else if (action == R2_7) { + } else if (action == R2_SONIC_STUNNER) { R2_GLOBALS._events.setCursor(CURSOR_ARROW); R2_GLOBALS._player.disableControl(); R2_GLOBALS.setFlag(47); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 266098a2ca..c6c1b0610c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -3029,10 +3029,10 @@ bool Scene3600::Actor13::startAction(CursorType action, Event &event) { scene->_stripManager.start(3327, scene); return true; - case R2_7: + case R2_SONIC_STUNNER: // No break on purpose case R2_44: - if (action == R2_7) + if (action == R2_SONIC_STUNNER) R2_GLOBALS._sound3.play(43); else R2_GLOBALS._sound3.play(99); -- cgit v1.2.3 From 888c341c7a5738ef8cfd838ab711d864f4ebd0c3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 22 Jan 2012 11:50:15 +0100 Subject: TSAGE: R2R - Implement scene 1925 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 324 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 49 ++++ 3 files changed, 372 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d81672807a..21fd638870 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -142,6 +142,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1900: return new Scene1900(); case 1925: + return new Scene1925(); case 1945: case 1950: error("Missing scene %d from group 1", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 18ca3b060d..58f5a31f17 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -6601,7 +6601,7 @@ void Scene1900::signal() { _actor1.setAction(&_sequenceManager2, this, 1910, &_actor1, NULL); break; case 1904: - R2_GLOBALS._v56A9C = -3; + R2_GLOBALS._scene1925CurrLevel = -3; // No break on purpose case 1905: R2_GLOBALS._player.disableControl(CURSOR_ARROW); @@ -6615,7 +6615,7 @@ void Scene1900::signal() { R2_GLOBALS._sceneManager.changeScene(2450); break; case 1906: - R2_GLOBALS._v56A9C = -3; + R2_GLOBALS._scene1925CurrLevel = -3; // No break on purpose default: R2_GLOBALS._player.enableControl(); @@ -6623,5 +6623,325 @@ void Scene1900::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 1925 - + * + *--------------------------------------------------------------------------*/ +Scene1925::Scene1925() { + _field9B8 = 0; + for (int i = 0; i < 5; i++) + _levelResNum[i] = 0; +} + +void Scene1925::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field9B8); + for (int i = 0; i < 5; i++) + s.syncAsSint16LE(_levelResNum[i]); +} + +bool Scene1925::Hotspot2::startAction(CursorType action, Event &event) { + Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneHotspot::startAction(action, event); + + if ((R2_GLOBALS._player._position.x == 110) && (R2_GLOBALS._player._position.y == 100)) + return SceneHotspot::startAction(action, event); + + if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 20)) + scene->_sceneMode = 1928; + else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 200)) + scene->_sceneMode = 1929; + else + scene->_sceneMode = 1930; + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, NULL); + return true; +} + +bool Scene1925::Hotspot3::startAction(CursorType action, Event &event) { + if ((!R2_GLOBALS.getFlag(29)) || (action != CURSOR_USE)) + return SceneHotspot::startAction(action, event); + + Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + + if ((R2_GLOBALS._player._position.x == 110) && (R2_GLOBALS._player._position.y == 100)) { + scene->_exit3._enabled = false; + scene->_sceneMode = 1925; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, NULL); + return true; + } + + if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 20) && (event.mousePos.y >= 30)) { + scene->_sceneMode = 1931; + } else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 200) && (event.mousePos.y < 140)) { + scene->_sceneMode = 1932; + } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) + || ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110)) + ) && (event.mousePos.y >= 100)) { + scene->_sceneMode = 1926; + } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) + || ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110)) + ) && (event.mousePos.y < 60)) { + scene->_sceneMode = 1927; + } else { + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + } + + if (scene->_sceneMode != 0) + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + + return true; +} + +void Scene1925::Exit1::changeScene() { + Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + + if ((R2_GLOBALS._player._position.x == 110) && (R2_GLOBALS._player._position.y == 100)) { + scene->_exit3._enabled = false; + scene->_field9B8 = 1927; + scene->_sceneMode = 1925; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, NULL); + return; + } + + if ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) + || ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110))) { + scene->_sceneMode = 1927; + } else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 200)) { + scene->_sceneMode = 1932; + } + + if (scene->_sceneMode == 0) + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + else { + scene->_sceneMode = 1932; + scene->signal(); + } +} + +void Scene1925::Exit2::changeScene() { + Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + + if ((R2_GLOBALS._player._position.x == 110) && (R2_GLOBALS._player._position.y == 100)) { + scene->_exit3._enabled = false; + scene->_field9B8 = 1926; + scene->_sceneMode = 1925; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, NULL); + return; + } + + if ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) + || ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110))) { + scene->_sceneMode = 1926; + } else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 20)) { + scene->_sceneMode = 1931; + } + + if (scene->_sceneMode == 0) { + scene->_sceneMode = 1931; + scene->signal(); + } else + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); +} + +void Scene1925::Exit3::changeScene() { + Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 1921; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); +} + +void Scene1925::Exit4::changeScene() { + Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_sceneMode = 1920; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); +} + +void Scene1925::changeLevel(bool upFlag) { + if (R2_GLOBALS._scene1925CurrLevel <= 0) + R2_GLOBALS._scene1925CurrLevel = 3; + + if (upFlag) { + R2_GLOBALS._player.setup(1925, 1, 1); + R2_GLOBALS._player.setPosition(Common::Point(154, 200)); + ++R2_GLOBALS._scene1925CurrLevel; + } else { + R2_GLOBALS._player.setup(1925, 1, 1); + R2_GLOBALS._player.setPosition(Common::Point(154, 20)); + R2_GLOBALS._scene1925CurrLevel--; + } + + switch (R2_GLOBALS._scene1925CurrLevel) { + case -1: + R2_GLOBALS._sceneManager.changeScene(1945); + return; + break; + case 3: + loadScene(_levelResNum[4]); + _item2.setDetails(Rect(133, 68, 140, 77), 1925, 3, -1, 5, 2, NULL); + _actor1.setDetails(1925, 0, 1, 2, 2, (SceneItem *) NULL); + _actor1.show(); + break; + case 512: + R2_GLOBALS._scene1925CurrLevel = 508; + // No break on purpose + default: + loadScene(_levelResNum[(R2_GLOBALS._scene1925CurrLevel % 4)]); + R2_GLOBALS._sceneItems.remove(&_item2); + R2_GLOBALS._sceneItems.remove(&_actor1); + _actor1.hide(); + break; + } + + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; +} + +void Scene1925::postInit(SceneObjectList *OwnerList) { + _levelResNum[0] = 1930; + _levelResNum[1] = 1935; + _levelResNum[2] = 1940; + _levelResNum[3] = 1935; + _levelResNum[4] = 1925; + + if (R2_GLOBALS.getFlag(29)) { + if ((R2_GLOBALS._scene1925CurrLevel == -3) || (R2_GLOBALS._scene1925CurrLevel == 3)) + loadScene(_levelResNum[4]); + else + loadScene(_levelResNum[R2_GLOBALS._scene1925CurrLevel % 4]); + } else { + R2_GLOBALS._scene1925CurrLevel = -2; + loadScene(1920); + } + SceneExt::postInit(); + R2_GLOBALS._sound1.play(220); + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player._characterScene[2] = 1925; + R2_GLOBALS._player._characterIndex = R2_SEEKER; + switch (R2_GLOBALS._scene1925CurrLevel) { + case -2: + _exit4.setDetails(Rect(203, 44, 247, 111), EXITCURSOR_E, 1925); + _item3.setDetails(Rect(31, 3, 45, 167), 1925, 6, -1, 8, 1, NULL); + break; + case 3: + _actor1.setDetails(1925, 0, 1, 2, 1, (SceneItem *) NULL); + _item2.setDetails(Rect(133, 68, 140, 77), 1925, 3, -1, 5, 1, NULL); + // No break on purpose + case -3: + _exit3.setDetails(Rect(83, 38, 128, 101), EXITCURSOR_W, 1925); + // No break on purpose + default: + _exit1.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1925); + _exit2.setDetails(Rect(128, 160, 190, 167), EXITCURSOR_S, 1925); + _item3.setDetails(Rect(141, 11, 167, 159), 1925, 6, -1, -1, 1, NULL); + break; + } + + _actor1.postInit(); + _actor1.setup(1925, 5, 1); + _actor1.setPosition(Common::Point(128, 35)); + _actor1.hide(); + + if (R2_GLOBALS._scene1925CurrLevel == 3) + _actor1.show(); + + R2_GLOBALS._player.enableControl(CURSOR_USE); + switch (R2_GLOBALS._scene1925CurrLevel) { + case -2: + R2_GLOBALS._player.setup(20, 6, 1); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setPosition(Common::Point(224, 109)); + break; + case -3: + _actor1.hide(); + R2_GLOBALS._player.setup(20, 5, 1); + R2_GLOBALS._player.setPosition(Common::Point(110, 100)); + break; + case 0: + R2_GLOBALS._player.setup(1925, 1, 1); + R2_GLOBALS._player.setPosition(Common::Point(154, 200)); + break; + default: + R2_GLOBALS._player.setup(1925, 1, 3); + R2_GLOBALS._player.setPosition(Common::Point(154, 110)); + break; + } + + R2_GLOBALS._player._canWalk = false; + _field9B8 = 0; + R2_GLOBALS._sceneManager._previousScene = 1925; + _item1.setDetails(Rect(27, 0, 292, 200), 1925, 9, -1, -1, 1, NULL); +} + +void Scene1925::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._player._oldCharacterScene[2] = 1925; + SceneExt::remove(); +} + +void Scene1925::signal() { + switch (_sceneMode) { + case 1920: + // No break on purpose + case 1921: + // No break on purpose + case 1928: + // No break on purpose + case 1929: + // No break on purpose + case 1930: + R2_GLOBALS._scene1925CurrLevel = -3; + R2_GLOBALS._sceneManager.changeScene(1900); + break; + case 1926: + // No break on purpose + case 1931: + // Change level, down + changeLevel(false); + break; + case 1927: + // No break on purpose + case 1932: + // Change level, up + changeLevel(true); + break; + case 1925: + _exit3._enabled = false; + if (_field9B8 != 0) { + _sceneMode = _field9B8; + _field9B8 = 0; + setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); + } + // No break on purpose + default: + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + } + + R2_GLOBALS._player._canWalk = false; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 66c3371410..df6789efbd 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -699,6 +699,55 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene1925 : public SceneExt { + class Hotspot2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Hotspot3 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit3 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit4 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + Hotspot2 _item2; + Hotspot3 _item3; + SceneActor _actor1; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + Exit4 _exit4; + SequenceManager _sequenceManager; + + int _field9B8; + int _levelResNum[5]; + + Scene1925(); + void synchronize(Serializer &s); + + void changeLevel(bool upFlag); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From e4d6d4780bc033a4dfad0ff13937d287c4fd0de3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 Jan 2012 00:58:42 +0100 Subject: TSAGE: R2R - Implement scene 1945 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 312 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 48 ++++ 3 files changed, 361 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 21fd638870..983b2b3c7d 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -144,6 +144,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1925: return new Scene1925(); case 1945: + return new Scene1945(); case 1950: error("Missing scene %d from group 1", sceneNumber); /* Scene group #2 */ diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 58f5a31f17..d957599159 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -6943,5 +6943,317 @@ void Scene1925::signal() { R2_GLOBALS._player._canWalk = false; } +/*-------------------------------------------------------------------------- + * Scene 1945 - + * + *--------------------------------------------------------------------------*/ +Scene1945::Scene1945() { + _fieldEAA = 0; + _fieldEAC = 0; + _fieldEAE = CURSOR_NONE; +} + +void Scene1945::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_fieldEAA); + s.syncAsSint16LE(_fieldEAC); + s.syncAsSint16LE(_fieldEAE); +} + +bool Scene1945::Hotspot3::startAction(CursorType action, Event &event) { + Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case R2_37: + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 0; + if ((R2_GLOBALS._player._position.x == 191) && (R2_GLOBALS._player._position.y == 142)) + scene->_sceneMode = 1942; + else { + scene->_sceneMode = 1940; + scene->_fieldEAA = 1942; + } + // At this point the original check if _sceneMode != 0. Skipped. + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + return true; + break; + case CURSOR_USE: + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 50) && (event.mousePos.x >= 130)) { + scene->_sceneMode = 1940; + // At this point the original check if _sceneMode != 0. Skipped. + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + return true; + } else { + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + if (event.mousePos.x > 130) + scene->_item3.setDetails(1945, 3, -1, -1, 3, (SceneItem *) NULL); + else + scene->_item3.setDetails(1945, 3, -1, 5, 3, (SceneItem *) NULL); + } + // No break on purpose + default: + return SceneHotspot::startAction(action, event); + break; + } +} + +bool Scene1945::Hotspot4::startAction(CursorType action, Event &event) { + Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneHotspot::startAction(action, event); + + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + + if ((R2_GLOBALS._player._position.x == 221) && (R2_GLOBALS._player._position.y == 142)) { + scene->_sceneMode = 1949; + scene->_fieldEAA = 1947; + } else if ( ((R2_GLOBALS._player._position.x == 197) && (R2_GLOBALS._player._position.y == 158)) + || ((R2_GLOBALS._player._position.x == 191) && (R2_GLOBALS._player._position.y == 142)) ) { + scene->_sceneMode = 1947; + } else if ((R2_GLOBALS._player._position.x == 221) && (R2_GLOBALS._player._position.y == 142) && (event.mousePos.y >= 30)) { + scene->_sceneMode = 1940; + } else { + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + } + + if (scene->_sceneMode != 0) + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + + return true; +} + +bool Scene1945::Actor3::startAction(CursorType action, Event &event) { + if ((action == R2_50) && (action == R2_49)) { + Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; + + scene->_fieldEAE = action; + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 0; + if ((R2_GLOBALS._player._position.x == 191) && (R2_GLOBALS._player._position.y == 142)) { + scene->_sceneMode= 1947; + scene->_fieldEAA = 1943; + } else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 50)) { + scene->_sceneMode = 1940; + scene->_fieldEAA = 1943; + } else { + scene->_sceneMode = 1949; + scene->_fieldEAA = 1947; + scene->_fieldEAC = 1943; + } + // At this point the original check if _sceneMode != 0. Skipped. + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +void Scene1945::Exit1::changeScene() { + Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + + if ((R2_GLOBALS._player._position.x == 221) && (R2_GLOBALS._player._position.y == 142)) { + scene->_sceneMode = 1949; + scene->_fieldEAA = 1947; + } else if ( ((R2_GLOBALS._player._position.x == 197) && (R2_GLOBALS._player._position.y == 158)) + || ((R2_GLOBALS._player._position.x == 191) && (R2_GLOBALS._player._position.y == 142)) ) { + scene->_sceneMode = 1947; + } + + if (scene->_sceneMode == 0) { + scene->_sceneMode = 1941; + signal(); + } else { + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); + } +} + +void Scene1945::Exit2::changeScene() { + Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; + + _moving = false; + R2_GLOBALS._player.disableControl(CURSOR_USE); + scene->_sceneMode = 0; + + if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 50)) { + scene->_sceneMode = 1940; + scene->_fieldEAA = 1945; + } else if ( ((R2_GLOBALS._player._position.x == 197) && (R2_GLOBALS._player._position.y == 158)) + || ((R2_GLOBALS._player._position.x == 191) && (R2_GLOBALS._player._position.y == 142)) ) { + scene->_sceneMode = 1945; + } + + if (scene->_sceneMode != 0) + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); +} + +void Scene1945::postInit(SceneObjectList *OwnerList) { + loadScene(1945); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(220); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + R2_GLOBALS._player._characterScene[2] = 1945; + R2_GLOBALS._player._characterIndex = R2_SEEKER; + + _exit1.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1945); + _exit2.setDetails(Rect(238, 144, 274, 167), EXITCURSOR_E, 1945); + + _item4.setDetails(Rect(141, 3, 167, 126), 1945, 9, -1, -1, 1, NULL); + + if (!R2_GLOBALS.getFlag(43)) { + _exit2._enabled = false; + _actor3.postInit(); + _actor3.setup(1945, 4, 1); + _actor3.setPosition(Common::Point(253, 169)); + _actor3.fixPriority(150); + + if (R2_GLOBALS.getFlag(42)) + _actor3.setDetails(1945, 15, -1, -1, 1, (SceneItem *) NULL); + else + _actor3.hide(); + + _actor1.postInit(); + _actor1.setup(1945, 8, 1); + _actor1.setPosition(Common::Point(253, 169)); + _actor1.fixPriority(130); + + _actor2.postInit(); + _actor2.setup(1945, 3, 1); + _actor2.hide(); + } else { + _exit2._enabled = true; + } + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 1925: + R2_GLOBALS._scene1925CurrLevel = 0; + R2_GLOBALS.clearFlag(29); + R2_GLOBALS._player.setup(1925, 1, 10); + R2_GLOBALS._player.setPosition(Common::Point(154, 50)); + break; + case 1950: + _sceneMode = 1944; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, NULL); + R2_GLOBALS._player.disableControl(CURSOR_USE); + break; + default: + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setup(20, 5, 1); + R2_GLOBALS._player.setPosition(Common::Point(191, 142)); + break; + } + + R2_GLOBALS._player._canWalk = false; + _fieldEAA = 0; + _fieldEAC = 0; + + _item3.setDetails(11, 1945, 3, -1, 5); + _item1.setDetails(Rect(238, 144, 274, 167), 1945, 0, -1, 2, 1, NULL); + _item2.setDetails(Rect(27, 3, 292, 167), 1945, 3, -1, -1, 1, NULL); +} + +void Scene1945::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene1945::signal() { + switch (_sceneMode) { + case 1940: + if (_fieldEAA == 1943) { + _sceneMode = _fieldEAA; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor2, NULL); + } else { + _sceneMode = 1946; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, NULL); + } + return; + break; + case 1941: + if (_fieldEAA == 0) { + R2_GLOBALS._scene1925CurrLevel = 0; + R2_GLOBALS.setFlag(29); + R2_GLOBALS._sceneManager.changeScene(1925); + } else { + _sceneMode = _fieldEAA; + _fieldEAA = 0; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, NULL); + } + return; + case 1942: + R2_INVENTORY.setObjectScene(R2_37, 0); + _actor3.setDetails(1945, 15, -1, -1, 2, (SceneItem *) NULL); + R2_GLOBALS.setFlag(42); + break; + case 1943: + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_INVENTORY.setObjectScene(_fieldEAE, 0); + _sceneMode = 1948; + setAction(&_sequenceManager1, this, _sceneMode, &_actor3, &_actor2, &_actor1, NULL); + setAction(&_sequenceManager2, NULL, 1941, &R2_GLOBALS._player, NULL); + return; + case 1944: + break; + case 1945: + R2_GLOBALS._sceneManager.changeScene(1950); + return; + case 1946: + if (_fieldEAA == 1942) { + _sceneMode = _fieldEAA; + _fieldEAA = 0; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor3, NULL); + return; + } + break; + case 1947: + if (_fieldEAA == 1943) { + _sceneMode = _fieldEAA; + _fieldEAA = 1948; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor2, NULL); + } else { + _sceneMode = 1941; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, NULL); + } + return; + case 1948: + R2_GLOBALS._sound1.play(220); + _exit2._enabled = true; + R2_GLOBALS._sceneItems.remove(&_actor3); + R2_GLOBALS.clearFlag(42); + R2_GLOBALS.clearFlag(43); + _fieldEAA = 1940; + // No break on purpose + case 1949: + _sceneMode = _fieldEAA; + if (_fieldEAC == 1943) { + _fieldEAA = _fieldEAC; + _fieldEAC = 0; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor2, NULL); + } else { + _fieldEAA = 0; + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, NULL); + } + return; + default: + break; + } + + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index df6789efbd..4a58609cd5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -748,6 +748,54 @@ public: virtual void remove(); virtual void signal(); }; + +class Scene1945 : public SceneExt { + class Hotspot3 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Hotspot4 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor3 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + Hotspot3 _item3; + Hotspot4 _item4; + SceneActor _actor1; + SceneActor _actor2; + Actor3 _actor3; + Exit1 _exit1; + Exit2 _exit2; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + + int _fieldEAA; + int _fieldEAC; + CursorType _fieldEAE; + + Scene1945(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 2820573b43da847df00d2140bbb710ecef7cd1d1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 Jan 2012 09:50:18 +0100 Subject: TSAGE: R2R - Fix a couple of bugs in scenes 1925 and 1945, some renaming --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 12 ++++++------ engines/tsage/ringworld2/ringworld2_scenes1.h | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index d957599159..38aeee6def 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -6701,7 +6701,7 @@ bool Scene1925::Hotspot3::startAction(CursorType action, Event &event) { return true; } -void Scene1925::Exit1::changeScene() { +void Scene1925::ExitUp::changeScene() { Scene1925 *scene = (Scene1925 *)R2_GLOBALS._sceneManager._scene; _moving = false; @@ -6723,7 +6723,7 @@ void Scene1925::Exit1::changeScene() { scene->_sceneMode = 1932; } - if (scene->_sceneMode == 0) + if (scene->_sceneMode != 0) scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); else { scene->_sceneMode = 1932; @@ -6779,7 +6779,7 @@ void Scene1925::Exit4::changeScene() { } void Scene1925::changeLevel(bool upFlag) { - if (R2_GLOBALS._scene1925CurrLevel <= 0) + if (R2_GLOBALS._scene1925CurrLevel < 0) R2_GLOBALS._scene1925CurrLevel = 3; if (upFlag) { @@ -6853,7 +6853,7 @@ void Scene1925::postInit(SceneObjectList *OwnerList) { _exit3.setDetails(Rect(83, 38, 128, 101), EXITCURSOR_W, 1925); // No break on purpose default: - _exit1.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1925); + _exitUp.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1925); _exit2.setDetails(Rect(128, 160, 190, 167), EXITCURSOR_S, 1925); _item3.setDetails(Rect(141, 11, 167, 159), 1925, 6, -1, -1, 1, NULL); break; @@ -7055,7 +7055,7 @@ bool Scene1945::Actor3::startAction(CursorType action, Event &event) { } } -void Scene1945::Exit1::changeScene() { +void Scene1945::ExitUp::changeScene() { Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; _moving = false; @@ -7108,7 +7108,7 @@ void Scene1945::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterScene[2] = 1945; R2_GLOBALS._player._characterIndex = R2_SEEKER; - _exit1.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1945); + _exitUp.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1945); _exit2.setDetails(Rect(238, 144, 274, 167), EXITCURSOR_E, 1945); _item4.setDetails(Rect(141, 3, 167, 126), 1945, 9, -1, -1, 1, NULL); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 4a58609cd5..52fb3650cf 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -710,7 +710,7 @@ class Scene1925 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class ExitUp : public SceneExit { public: virtual void changeScene(); }; @@ -731,7 +731,7 @@ public: Hotspot2 _item2; Hotspot3 _item3; SceneActor _actor1; - Exit1 _exit1; + ExitUp _exitUp; Exit2 _exit2; Exit3 _exit3; Exit4 _exit4; @@ -764,7 +764,7 @@ class Scene1945 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class ExitUp : public SceneExit { public: virtual void changeScene(); }; @@ -780,7 +780,7 @@ public: SceneActor _actor1; SceneActor _actor2; Actor3 _actor3; - Exit1 _exit1; + ExitUp _exitUp; Exit2 _exit2; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; -- cgit v1.2.3 From aec3a92377c4c1467407e92b472da169d61b10b9 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 Jan 2012 12:42:04 +0100 Subject: TSAGE: R2R - Implement several missing functions in scene1550 --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 67 ++++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 3 ++ 2 files changed, 69 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 38aeee6def..bc4a31c3f0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2497,8 +2497,73 @@ void Scene1550::UnkArea1550::remove() { scene->setAction(&scene->_sequenceManager1, scene, 1562, &R2_GLOBALS._player, NULL); } } + +void Scene1550::UnkArea1550::process(Event &event) { +// This is a copy of Scene1200::Area1::process + if (_field20 != R2_GLOBALS._insetUp) + return; + + CursorType cursor = R2_GLOBALS._events.getCursor(); + + if (_areaActor._bounds.contains(event.mousePos.x + g_globals->gfxManager()._bounds.left , event.mousePos.y)) { + if (cursor == _cursorNum) + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState); + } else if (event.mousePos.y < 168) { + if (cursor != _cursorNum) { + _savedCursorNum = cursor; + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(CURSOR_INVALID); + } + if (event.eventType == EVENT_BUTTON_DOWN) { + event.handled = true; + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState); + remove(); + } + } +} + void Scene1550::UnkArea1550::proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY) { - warning("Scene1550::UnkArea1550::proc12() should be based on Scene1550::UnkArea1200::proc12()"); + // UnkArea1200::proc12(); + Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; + + _areaActor.postInit(); + _areaActor.setup(visage, stripFrameNum, frameNum); + _areaActor.setPosition(Common::Point(posX, posY)); + _areaActor.fixPriority(250); + _cursorNum = CURSOR_INVALID; + scene->_sceneAreas.push_front(this); + ++R2_GLOBALS._insetUp; + _field20 = R2_GLOBALS._insetUp; + // + + proc13(1550, 67, -1, -1); + _unkObj155031.postInit(); + _unkObj155031._fieldA4 = 1; + if (scene->_actor4._frame == 1) + _unkObj155031.setup(1559, 3, 1); + else + _unkObj155031.setup(1559, 3, 2); + _unkObj155031.setPosition(Common::Point(142, 79)); + _unkObj155031.fixPriority(251); + _unkObj155031.setDetails(1550, 68, -1, -1, 2, (SceneItem *) NULL); + + _unkObj155032.postInit(); + _unkObj155032._numFrames = 5; + _unkObj155032._fieldA4 = 2; + if (scene->_actor13._frame == 1) + _unkObj155032.setup(1559, 2, 1); + else + _unkObj155032.setup(1559, 2, 2); + _unkObj155032.setPosition(Common::Point(156, 103)); + _unkObj155032.fixPriority(251); + _unkObj155032.setDetails(1550, 69, -1, -1, 2, (SceneItem *) NULL); +} + +void Scene1550::UnkArea1550::proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { + // Copy of Scene1200::Area1::proc13 + _areaActor.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); } bool Scene1550::Hotspot1::startAction(CursorType action, Event &event) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 52fb3650cf..3f2399a2fe 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -275,7 +275,9 @@ class Scene1550 : public SceneExt { UnkObj15503 _unkObj155032; virtual void remove(); + virtual void process(Event &event); virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); + virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; class Hotspot1 : public NamedHotspot { @@ -796,6 +798,7 @@ public: virtual void remove(); virtual void signal(); }; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From db26984ed4ee7672c23ed9d45381958a64e07e78 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 25 Jan 2012 22:08:40 +0100 Subject: TSAGE: R2R- Implement scene 1950 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 1800 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 142 ++ 3 files changed, 1943 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 983b2b3c7d..54d9bc362f 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -146,7 +146,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1945: return new Scene1945(); case 1950: - error("Missing scene %d from group 1", sceneNumber); + return new Scene1950(); /* Scene group #2 */ // case 2000: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index bc4a31c3f0..d3b7d616f1 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1104,6 +1104,9 @@ Scene1200::Object1::Object1() { void Scene1200::Object1::synchronize(Serializer &s) { SavedObject::synchronize(s); + _rect1.synchronize(s); + _rect2.synchronize(s); + s.syncAsSint16LE(_field16); s.syncAsSint16LE(_field26); s.syncAsSint16LE(_field28); @@ -7320,5 +7323,1802 @@ void Scene1945::signal() { R2_GLOBALS._player._canWalk = false; } +/*-------------------------------------------------------------------------- + * Scene 1950 - + * + *--------------------------------------------------------------------------*/ +Scene1950::Area1::Area1() { + _field20 = 0; + _fieldB65 = 0; +} +void Scene1950::Area1::synchronize(Serializer &s) { + SceneArea::synchronize(s); + + s.syncAsByte(_field20); + s.syncAsSint16LE(_fieldB65); +} + +Scene1950::Scene1950() { + _field412 = 0; + _field414 = 0; + _field416 = 0; + _field418 = Common::Point(0, 0); + _field41C = 0; +} + +void Scene1950::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); + s.syncAsSint16LE(_field418.x); + s.syncAsSint16LE(_field418.y); + s.syncAsSint16LE(_field41C); +} + +Scene1950::Area1::Actor10::Actor10() { + _fieldA4 = 0; + _fieldA6 = 0; + _fieldA8 = 0; +} + +void Scene1950::Area1::Actor10::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_fieldA6); + s.syncAsSint16LE(_fieldA8); +} + +void Scene1950::Area1::Actor10::init(int indx) { +// Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _fieldA4 = indx; + _fieldA6 = 0; + _fieldA8 = 0; + + postInit(); + setup(1971, 2, 1); + fixPriority(249); + setPosition(Common::Point(((_fieldA4 / 4) * 22) + 127, ((_fieldA4 / 4) * 19) + 71)); + warning("FIXME: invalid call to scene->_sceneAreas.push_front(this);"); +} + +void Scene1950::Area1::Actor10::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos)) && (_fieldA6 == 0)) { + R2_GLOBALS._sound2.play(227); + if (_fieldA8 == 0) { + setFrame(2); + _fieldA8 = 1; + } else { + setFrame(1); + _fieldA8 = 0; + } + _fieldA6 = 1; + event.handled = true; + } + + if ((event.eventType == EVENT_BUTTON_UP) && (_fieldA6 != 0)) { + _fieldA6 = 0; + event.handled = true; + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + scene->subBF4B4(_fieldA4); + } +} + +bool Scene1950::Area1::Actor10::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) + return false; + return SceneActor::startAction(action, event); +} + +void Scene1950::Area1::remove() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + for (_fieldB65 = 0; _fieldB65 < 16; ++_fieldB65) { + warning("Unexpected _sceneAreas.remove() call"); + // R2_GLOBALS._sceneAreas.remove(&_arrActor1[_fieldB65]); + _arrActor1[_fieldB65].remove(); + } + + // sub201EA + R2_GLOBALS._sceneItems.remove((SceneItem *)this); + _areaActor.remove(); + SceneArea::remove(); + R2_GLOBALS._insetUp--; + // + + if (!R2_GLOBALS.getFlag(37)) + R2_GLOBALS._sound2.play(278); + + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + scene->_exit3._enabled = true; + + if (!R2_GLOBALS.getFlag(37)) { + if (R2_GLOBALS.getFlag(36)) { + scene->_sceneMode = 1964; + scene->setAction(&scene->_sequenceManager, scene, 1964, &R2_GLOBALS._player, NULL); + } else { + scene->_sceneMode = 1965; + scene->setAction(&scene->_sequenceManager, scene, 1965, &R2_GLOBALS._player, NULL); + } + } +} + +void Scene1950::Area1::process(Event &event) { +// This is a copy of Scene1200::Area1::process + if (_field20 != R2_GLOBALS._insetUp) + return; + + CursorType cursor = R2_GLOBALS._events.getCursor(); + + if (_areaActor._bounds.contains(event.mousePos.x + g_globals->gfxManager()._bounds.left , event.mousePos.y)) { + if (cursor == _cursorNum) + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState); + } else if (event.mousePos.y < 168) { + if (cursor != _cursorNum) { + _savedCursorNum = cursor; + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(CURSOR_INVALID); + } + if (event.eventType == EVENT_BUTTON_DOWN) { + event.handled = true; + warning("TODO: _cursorState = ???"); + R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState); + remove(); + } + } +} + +void Scene1950::Area1::proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY) { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS._player._mover) + R2_GLOBALS._player.addMover(NULL); + R2_GLOBALS._player._canWalk = false; + + // UnkArea1200::proc12(); + _areaActor.postInit(); + _areaActor.setup(visage, stripFrameNum, frameNum); + _areaActor.setPosition(Common::Point(posX, posY)); + _areaActor.fixPriority(250); + _cursorNum = CURSOR_INVALID; + scene->_sceneAreas.push_front(this); + ++R2_GLOBALS._insetUp; + _field20 = R2_GLOBALS._insetUp; + // + + _areaActor.fixPriority(248); + scene->_exit3._enabled = false; + proc13(1950, 27, 28, 27); + + for (_fieldB65 = 0; _fieldB65 < 16; _fieldB65++) + _arrActor1[_fieldB65].init(_fieldB65); +} + +void Scene1950::Area1::proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { + // Copy of Scene1200::Area1::proc13() + _areaActor.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); +} + +bool Scene1950::Hotspot2::startAction(CursorType action, Event &event) { + if ((action != CURSOR_USE) || (R2_GLOBALS.getFlag(37))) + return SceneHotspot::startAction(action, event); + + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS.getFlag(36)) { + scene->_sceneMode = 1962; + scene->setAction(&scene->_sequenceManager, scene, 1962, &R2_GLOBALS._player, NULL); + } else { + scene->_sceneMode = 1963; + scene->setAction(&scene->_sequenceManager, scene, 1963, &R2_GLOBALS._player, NULL); + } + return true; +} + +bool Scene1950::Actor2::startAction(CursorType action, Event &event) { + if (action != R2_31) + return SceneActor::startAction(action, event); + + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + R2_INVENTORY.setObjectScene(31, 0); + scene->_sceneMode = 1958; + scene->setAction(&scene->_sequenceManager, scene, 1958, &R2_GLOBALS._player, &scene->_actor2, NULL); + return true; +} + +bool Scene1950::Actor3::startAction(CursorType action, Event &event) { + if ((action != CURSOR_USE) || (R2_INVENTORY.getObjectScene(35) != 1950)) + return SceneActor::startAction(action, event); + + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1968; + scene->setAction(&scene->_sequenceManager, scene, 1968, &R2_GLOBALS._player, NULL); + + return true; +} + +bool Scene1950::Actor5::startAction(CursorType action, Event &event) { + if ((action != CURSOR_USE) || (!R2_GLOBALS.getFlag(37))) + return SceneActor::startAction(action, event); + + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1967; + scene->setAction(&scene->_sequenceManager, scene, 1967, &R2_GLOBALS._player, NULL); + + return true; +} + +Scene1950::Actor8::Actor8() { + _fieldA4 = 0; + _fieldA6 = 0; + _fieldA8 = 0; + _fieldAA = 0; + _fieldAC = 0; + _fieldAE = 0; + _fieldAF = 0; +} + +void Scene1950::Actor8::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_fieldA6); + s.syncAsSint16LE(_fieldA8); + s.syncAsSint16LE(_fieldAA); + s.syncAsSint16LE(_fieldAC); + s.syncAsByte(_fieldAE); + s.syncAsByte(_fieldAF); +} + +void Scene1950::Actor8::signal() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + switch (_fieldAC) { + case 19: { + _fieldAC = 0; + setVisage(1960); + if (R2_GLOBALS._v566A5 == 3) + setStrip(2); + else + setStrip(1); + + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &scene->_field418, this); + } + break; + case 20: { + _fieldAC = 19; + R2_GLOBALS._player.setVisage(22); + if (R2_GLOBALS._v566A5 == 3) + R2_GLOBALS._player.setStrip(1); + else + R2_GLOBALS._player.setStrip(2); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1]--; + + if (R2_GLOBALS._v566A5 == 3) + _fieldA4 = _position.x + 10; + else + _fieldA4 = _position.x - 10; + + _fieldA6 = _position.y -4; + setVisage(1961); + + if (R2_GLOBALS._v566A5 == 3) + setStrip(2); + else + setStrip(1); + + animate(ANIM_MODE_2, NULL); + Common::Point pt(_fieldA4, _fieldA6); + PlayerMover *mover = new PlayerMover(); + addMover(mover, &pt, this); + + R2_GLOBALS._player.enableControl(); + } + break; + case 21: + R2_GLOBALS._player.setVisage(22); + if (R2_GLOBALS._v566A5 == 3) + R2_GLOBALS._player.setStrip(1); + else + R2_GLOBALS._player.setStrip(2); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + setVisage(1961); + if (R2_GLOBALS._v566A5 == 3) + setStrip(4); + else + setStrip(3); + setDetails(1950, 15, -1, 17, 2, (SceneItem *) NULL); + addMover(NULL); + _numFrames = 8; + R2_GLOBALS._sound2.play(226); + animate(ANIM_MODE_5, NULL); + fixPriority(10); + R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) ]--; + R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1]--; + R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 2] = _position.x; + R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 3] = _position.y; + _fieldA8 = (_position.x - R2_GLOBALS._player._position.x) / 2; + _fieldAA = (_position.y - R2_GLOBALS._player._position.y) / 2; + + _fieldAE = 0; + for (_fieldAF = 0; _fieldAF < 18; ++_fieldAF) + if (R2_GLOBALS._v56613[4 * _fieldAF] == 0) + ++_fieldAE; + + if (_fieldAE == 18) { + R2_GLOBALS.setFlag(36); + _fieldAC = 23; + Common::Point pt(R2_GLOBALS._player._position.x + _fieldA8, R2_GLOBALS._player._position.y + _fieldAA); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else if (_fieldAE == 1) { + _fieldAC = 22; + Common::Point pt(R2_GLOBALS._player._position.x + _fieldA8, R2_GLOBALS._player._position.y + _fieldAA); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } + + if (R2_GLOBALS._v566A5 == 3) + scene->_exit3._enabled = true; + else + scene->_exit6._enabled = true; + + scene->_field416 = 0; + break; + case 22: + SceneItem::display(1950, 18, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + case 23: + SceneItem::display(1950, 25, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + scene->_sceneMode = R2_GLOBALS._v566A5; + scene->setAction(&scene->_sequenceManager, scene, 1960, &R2_GLOBALS._player, NULL); + break; + default: + break; + } +} + +bool Scene1950::Actor8::startAction(CursorType action, Event &event) { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + if ((R2_GLOBALS._v56613[(scene->_field41C - 1) * 4] == 0) || (action != R2_44)) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + + if (R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1] <= 1) + _fieldAC = 21; + else + _fieldAC = 20; + + R2_GLOBALS._player.setVisage(25); + if (R2_GLOBALS._v566A5 == 3) + R2_GLOBALS._player.setStrip(2); + else + R2_GLOBALS._player.setStrip(1); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + R2_GLOBALS._sound3.play(99); + + return true; +} + +void Scene1950::Exit1::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 1; + scene->_sceneMode = 11; + + Common::Point pt(160, 127); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1950::Exit2::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 2; + scene->_sceneMode = 12; + + if (scene->_field412 == 0) { + if (R2_GLOBALS.getFlag(36)) + scene->setAction(&scene->_sequenceManager, scene, 1953, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 1970, &R2_GLOBALS._player, NULL); + } else { + if (R2_GLOBALS.getFlag(36)) + scene->setAction(&scene->_sequenceManager, scene, 1952, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 1969, &R2_GLOBALS._player, NULL); + } +} + +void Scene1950::Exit3::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 3; + scene->_sceneMode = 13; + + if (scene->_field416 != 0) + R2_GLOBALS._player.animate(ANIM_MODE_9); + + Common::Point pt(340, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1950::Exit4::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 4; + scene->_sceneMode = 14; + + if (R2_GLOBALS.getFlag(36)) + scene->setAction(&scene->_sequenceManager, scene, 1956, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager, scene, 1973, &R2_GLOBALS._player, NULL); +} + +void Scene1950::Exit5::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 5; + scene->_sceneMode = 15; + + Common::Point pt(160, 213); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); +} + +void Scene1950::Exit6::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 5; + if (R2_GLOBALS._v566A4 == 2) { + if ((R2_GLOBALS.getFlag(36)) && (R2_INVENTORY.getObjectScene(34) == 2) && (R2_INVENTORY.getObjectScene(35) == 2)) { + scene->_sceneMode = 1961; + Common::Point pt(-20, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } else { + if (!R2_GLOBALS.getFlag(36)) + SceneItem::display(1950, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + if ((R2_INVENTORY.getObjectScene(34) == 1950) || (R2_INVENTORY.getObjectScene(35) == 1950)) + SceneItem::display(1950, 34, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + scene->_sceneMode = 0; + Common::Point pt(30, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } + } else { + if (scene->_field416 != 0) + R2_GLOBALS._player.animate(ANIM_MODE_9); + + scene->_sceneMode = 16; + Common::Point pt(-20, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } +} + +void Scene1950::Exit7::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 0; + scene->_sceneMode = 1951; + scene->setAction(&scene->_sequenceManager, scene, 1951, &R2_GLOBALS._player, NULL); +} + +void Scene1950::Exit8::changeScene() { + Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; + + _enabled = false; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._v566A5 = 3; + if (R2_GLOBALS._player._visage == 22) { + scene->_sceneMode = 1975; + scene->setAction(&scene->_sequenceManager, scene, 1975, &R2_GLOBALS._player, NULL); + } else { + SceneItem::display(1950, 22, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + R2_GLOBALS._v566A5 = 0; + scene->_sceneMode = 0; + Common::Point pt(250, 150); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + _enabled = true; + } +} + +void Scene1950::subBDC1E() { + _exit1._enabled = false; + _exit2._enabled = false; + _exit3._enabled = false; + _exit4._enabled = false; + _exit5._enabled = false; + _exit6._enabled = false; + _exit7._enabled = false; + _exit8._enabled = false; + _exit1._insideArea = false; + _exit2._insideArea = false; + _exit3._insideArea = false; + _exit4._insideArea = false; + _exit5._insideArea = false; + _exit6._insideArea = false; + _exit7._insideArea = false; + _exit8._insideArea = false; + _exit1._moving = false; + _exit2._moving = false; + _exit3._moving = false; + _exit4._moving = false; + _exit5._moving = false; + _exit6._moving = false; + _exit7._moving = false; + _exit8._moving = false; + _field412 = 0; + switch (R2_GLOBALS._v566A4 - 1) { + case 0: + loadScene(1948); + break; + case 1: + // No break on purpose + case 8: + // No break on purpose + case 10: + // No break on purpose + case 12: + // No break on purpose + case 16: + // No break on purpose + case 19: + // No break on purpose + case 23: + // No break on purpose + case 30: + // No break on purpose + case 44: + // No break on purpose + case 72: + // No break on purpose + case 74: + // No break on purpose + case 86: + // No break on purpose + case 96: + // No break on purpose + case 103: + loadScene(1950); + break; + case 2: + // No break on purpose + case 29: + loadScene(1965); + break; + case 3: + // No break on purpose + case 9: + // No break on purpose + case 11: + // No break on purpose + case 15: + // No break on purpose + case 24: + // No break on purpose + case 39: + // No break on purpose + case 45: + // No break on purpose + case 71: + // No break on purpose + case 73: + // No break on purpose + case 75: + // No break on purpose + case 79: + // No break on purpose + case 85: + // No break on purpose + case 87: + // No break on purpose + case 95: + loadScene(1955); + break; + case 4: + // No break on purpose + case 6: + // No break on purpose + case 13: + // No break on purpose + case 27: + // No break on purpose + case 41: + // No break on purpose + case 48: + // No break on purpose + case 50: + // No break on purpose + case 54: + // No break on purpose + case 76: + // No break on purpose + case 80: + // No break on purpose + case 90: + // No break on purpose + case 104: + loadScene(1975); + break; + case 5: + // No break on purpose + case 7: + // No break on purpose + case 14: + // No break on purpose + case 28: + // No break on purpose + case 32: + // No break on purpose + case 47: + // No break on purpose + case 53: + loadScene(1997); + break; + case 17: + // No break on purpose + case 20: + // No break on purpose + case 25: + // No break on purpose + case 31: + // No break on purpose + case 33: + // No break on purpose + case 46: + loadScene(1995); + break; + case 18: + // No break on purpose + case 22: + // No break on purpose + case 26: + // No break on purpose + case 36: + // No break on purpose + case 38: + // No break on purpose + case 43: + // No break on purpose + case 51: + // No break on purpose + case 70: + // No break on purpose + case 78: + // No break on purpose + case 84: + // No break on purpose + case 89: + // No break on purpose + case 101: + loadScene(1970); + break; + case 21: + // No break on purpose + case 34: + // No break on purpose + case 57: + // No break on purpose + case 58: + // No break on purpose + case 59: + // No break on purpose + case 62: + // No break on purpose + case 65: + loadScene(1980); + break; + case 35: + // No break on purpose + case 61: + // No break on purpose + case 77: + // No break on purpose + case 83: + loadScene(1982); + break; + case 37: + // No break on purpose + case 52: + // No break on purpose + case 82: + // No break on purpose + case 88: + // No break on purpose + case 92: + // No break on purpose + case 97: + // No break on purpose + case 100: + loadScene(1962); + break; + case 40: + // No break on purpose + case 102: + loadScene(1960); + break; + case 42: + // No break on purpose + case 55: + // No break on purpose + case 60: + // No break on purpose + case 66: + // No break on purpose + case 68: + // No break on purpose + case 69: + // No break on purpose + case 93: + // No break on purpose + case 98: + loadScene(1990); + break; + case 49: + // No break on purpose + case 81: + // No break on purpose + case 91: + // No break on purpose + case 94: + // No break on purpose + case 99: + loadScene(1967); + break; + case 56: + // No break on purpose + case 63: + // No break on purpose + case 64: + // No break on purpose + case 67: + loadScene(1985); + _field412 = 1; + break; + default: + break; + } + + if (R2_GLOBALS._v566A4 != 1) + R2_GLOBALS._walkRegions.load(1950); + + switch (R2_GLOBALS._v566A4 - 1) { + case 0: + _exit7._enabled = true; + if ((R2_INVENTORY.getObjectScene(31) == 0) && (R2_INVENTORY.getObjectScene(34) == 1950)) + _exit8._enabled = true; + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._walkRegions.enableRegion(3); + R2_GLOBALS._walkRegions.enableRegion(4); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + break; + case 1: + // No break on purpose + case 2: + // No break on purpose + case 3: + // No break on purpose + case 8: + // No break on purpose + case 9: + // No break on purpose + case 10: + // No break on purpose + case 11: + // No break on purpose + case 12: + // No break on purpose + case 15: + // No break on purpose + case 16: + // No break on purpose + case 19: + // No break on purpose + case 23: + // No break on purpose + case 24: + // No break on purpose + case 29: + // No break on purpose + case 30: + // No break on purpose + case 39: + // No break on purpose + case 40: + // No break on purpose + case 44: + // No break on purpose + case 45: + // No break on purpose + case 71: + // No break on purpose + case 72: + // No break on purpose + case 73: + // No break on purpose + case 74: + // No break on purpose + case 75: + // No break on purpose + case 79: + // No break on purpose + case 85: + // No break on purpose + case 86: + // No break on purpose + case 87: + // No break on purpose + case 95: + // No break on purpose + case 96: + // No break on purpose + case 102: + // No break on purpose + case 103: + _exit3._enabled = true; + _exit6._enabled = true; + break; + case 4: + // No break on purpose + case 6: + // No break on purpose + case 13: + // No break on purpose + case 17: + // No break on purpose + case 20: + // No break on purpose + case 25: + // No break on purpose + case 27: + // No break on purpose + case 31: + // No break on purpose + case 33: + // No break on purpose + case 37: + // No break on purpose + case 41: + // No break on purpose + case 46: + // No break on purpose + case 48: + // No break on purpose + case 50: + // No break on purpose + case 52: + // No break on purpose + case 54: + // No break on purpose + case 76: + // No break on purpose + case 80: + // No break on purpose + case 82: + // No break on purpose + case 88: + // No break on purpose + case 90: + // No break on purpose + case 92: + // No break on purpose + case 97: + // No break on purpose + case 100: + // No break on purpose + case 104: + _exit6._enabled = true; + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(9); + break; + case 5: + // No break on purpose + case 7: + // No break on purpose + case 14: + // No break on purpose + case 18: + // No break on purpose + case 22: + // No break on purpose + case 26: + // No break on purpose + case 28: + // No break on purpose + case 32: + // No break on purpose + case 36: + // No break on purpose + case 38: + // No break on purpose + case 43: + // No break on purpose + case 47: + // No break on purpose + case 49: + // No break on purpose + case 51: + // No break on purpose + case 53: + // No break on purpose + case 70: + // No break on purpose + case 78: + // No break on purpose + case 81: + // No break on purpose + case 84: + // No break on purpose + case 89: + // No break on purpose + case 91: + // No break on purpose + case 94: + // No break on purpose + case 99: + // No break on purpose + case 101: + _exit3._enabled = true; + R2_GLOBALS._walkRegions.enableRegion(1); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._walkRegions.enableRegion(13); + break; + default: + R2_GLOBALS._walkRegions.enableRegion(1); + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._walkRegions.enableRegion(9); + R2_GLOBALS._walkRegions.enableRegion(13); + break; + } + + _object1.remove(); + _object1.removeObject(); + _actor1.remove(); + + switch (R2_GLOBALS._v566A4 - 4) { + case 0: + // No break on purpose + case 3: + // No break on purpose + case 16: + // No break on purpose + case 22: + // No break on purpose + case 24: + // No break on purpose + case 32: + // No break on purpose + case 33: + // No break on purpose + case 45: + // No break on purpose + case 46: + // No break on purpose + case 48: + // No break on purpose + case 51: + // No break on purpose + case 56: + // No break on purpose + case 59: + // No break on purpose + case 67: + // No break on purpose + case 68: + // No break on purpose + case 70: + // No break on purpose + case 73: + // No break on purpose + case 82: + // No break on purpose + case 90: + _exit1._enabled = true; + _object1.setup2(1950, (R2_GLOBALS._v566A4 % 2) + 1, 1, 160, 237, 25, 0); + + _actor1.postInit(); + _actor1.setVisage(1950); + _actor1.setStrip((((R2_GLOBALS._v566A4 - 1) / 35) % 2) + 1); + _actor1.setFrame(2); + _actor1.setPosition(Common::Point(160, 167)); + _actor1.fixPriority(220); + R2_GLOBALS._walkRegions.enableRegion(3); + R2_GLOBALS._walkRegions.enableRegion(4); + break; + case 7: + // No break on purpose + case 10: + // No break on purpose + case 23: + // No break on purpose + case 29: + // No break on purpose + case 31: + // No break on purpose + case 39: + // No break on purpose + case 40: + // No break on purpose + case 52: + // No break on purpose + case 53: + // No break on purpose + case 55: + // No break on purpose + case 63: + // No break on purpose + case 65: + // No break on purpose + case 66: + // No break on purpose + case 75: + // No break on purpose + case 77: + // No break on purpose + case 81: + // No break on purpose + case 87: + // No break on purpose + case 89: + // No break on purpose + case 97: + _exit5._enabled = true; + _actor1.postInit(); + _actor1.setVisage(1950); + _actor1.setStrip((((R2_GLOBALS._v566A4 - 1) / 35) % 2) + 1); + _actor1.setFrame(3); + _actor1.setPosition(Common::Point(160, 167)); + _actor1.fixPriority(220); + break; + case 58: + // No break on purpose + case 74: + // No break on purpose + case 80: + _exit1._enabled = true; + _exit5._enabled = true; + + _object1.setup(1950, (R2_GLOBALS._v566A4 % 2) + 1, 1, 160, 137, 25); + + _actor1.postInit(); + _actor1.setVisage(1950); + _actor1.setStrip((((R2_GLOBALS._v566A4 - 1) / 35) % 2) + 1); + _actor1.setFrame(3); + _actor1.setPosition(Common::Point(160, 167)); + _actor1.fixPriority(220); + R2_GLOBALS._walkRegions.enableRegion(3); + R2_GLOBALS._walkRegions.enableRegion(4); + break; + default: + _actor1.postInit(); + _actor1.setVisage(1950); + _actor1.setStrip(((R2_GLOBALS._v566A4 - 1) % 35) + 1); + _actor1.setFrame(2); + _actor1.setPosition(Common::Point(160, 167)); + _actor1.fixPriority(220); + break; + } + + switch (R2_GLOBALS._v566A4 - 3) { + case 0: + // No break on purpose + case 3: + // No break on purpose + case 5: + // No break on purpose + case 12: + // No break on purpose + case 15: + // No break on purpose + case 18: + // No break on purpose + case 19: + // No break on purpose + case 23: + // No break on purpose + case 26: + // No break on purpose + case 27: + // No break on purpose + case 29: + // No break on purpose + case 30: + // No break on purpose + case 31: + // No break on purpose + case 32: + // No break on purpose + case 44: + // No break on purpose + case 45: + // No break on purpose + case 51: + // No break on purpose + case 55: + // No break on purpose + case 56: + // No break on purpose + case 57: + // No break on purpose + case 60: + // No break on purpose + case 63: + _exit2._enabled = true; + case 54: + // No break on purpose + case 61: + // No break on purpose + case 62: + // No break on purpose + case 65: + _exit2._enabled = true; + // No break on purpose + case 35: + // No break on purpose + case 38: + // No break on purpose + case 40: + // No break on purpose + case 47: + // No break on purpose + case 50: + // No break on purpose + case 53: + // No break on purpose + case 58: + // No break on purpose + case 64: + // No break on purpose + case 66: + // No break on purpose + case 67: + // No break on purpose + case 79: + // No break on purpose + case 80: + // No break on purpose + case 86: + // No break on purpose + case 89: + // No break on purpose + case 90: + // No break on purpose + case 91: + // No break on purpose + case 92: + // No break on purpose + case 95: + // No break on purpose + case 96: + // No break on purpose + case 97: + // No break on purpose + case 98: + // No break on purpose + case 100: + _exit4._enabled = true; + R2_GLOBALS._walkRegions.enableRegion(4); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(10); + R2_GLOBALS._walkRegions.enableRegion(11); + default: + break; + } + R2_GLOBALS._uiElements.draw(); +} + +void Scene1950::subBE59B() { + R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + + _actor8.remove(); + _actor2.remove(); + _actor3.remove(); + + _field416 = 0; + _field41C = 0; + + switch (R2_GLOBALS._v566A4) { + case 10: + _field41C = 1; + break; + case 13: + _field41C = 2; + break; + case 16: + _field41C = 3; + break; + case 17: + _field41C = 4; + break; + case 24: + _field41C = 5; + break; + case 25: + _field41C = 6; + break; + case 31: + _field41C = 7; + break; + case 40: + _field41C = 8; + break; + case 45: + _field41C = 9; + break; + case 46: + _field41C = 10; + break; + case 73: + _field41C = 11; + break; + case 75: + _field41C = 12; + break; + case 80: + _field41C = 13; + break; + case 87: + _field41C = 14; + break; + case 88: + _field41C = 15; + break; + case 96: + _field41C = 16; + break; + case 97: + _field41C = 17; + break; + case 104: + _field41C = 18; + break; + default: + break; + } + + if (_field41C != 0) { + _actor8.postInit(); + _actor8._numFrames = 6; + _actor8._moveRate = 6; + _actor8._moveDiff = Common::Point(3, 2); + _actor8._effect = 1; + if (R2_GLOBALS._v56613[(_field41C - 1) * 4] == 0) { + _actor8.setPosition(Common::Point(R2_GLOBALS._v56613[((_field41C - 1) * 4) + 2], R2_GLOBALS._v56613[((_field41C - 1) * 4) + 3])); + _actor8.animate(ANIM_MODE_NONE, NULL); + _actor8.addMover(NULL); + _actor8.setVisage(1961); + _actor8.setStrip(4); + _actor8.setFrame(10); + _actor8.fixPriority(10); + _actor8.setDetails(1950, 15, -1, 17, 2, (SceneItem *) NULL); + } else { + _actor8.setVisage(1960); + _actor8.setPosition(Common::Point(160, 130)); + _actor8.animate(ANIM_MODE_2, NULL); + _actor8.setDetails(1950, 12, -1, 14, 2, (SceneItem *) NULL); + _field416 = 1; + } + } + if ((R2_GLOBALS._v566A4 == 1) && (R2_INVENTORY.getObjectScene(31) != 0)) { + _actor2.postInit(); + _actor2.setVisage(1948); + _actor2.setStrip(3); + _actor2.setPosition(Common::Point(278, 155)); + _actor2.fixPriority(100); + _actor2.setDetails(1950, 19, 20, 23, 2, (SceneItem *) NULL); + } + + if (R2_GLOBALS._v566A4 == 102) { + R2_GLOBALS._walkRegions.load(1951); + R2_GLOBALS._walkRegions.enableRegion(1); + R2_GLOBALS._walkRegions.enableRegion(5); + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(7); + + _actor6.postInit(); + _actor6.setVisage(1970); + _actor6.setStrip(1); + if (R2_GLOBALS.getFlag(37)) + _actor6.setFrame(3); + else + _actor6.setFrame(1); + _actor6.setPosition(Common::Point(193, 158)); + _actor6.setDetails(1950, 3, 4, 5, 2, (SceneItem *) NULL); + + _actor7.postInit(); + _actor7.setVisage(1970); + _actor7.setStrip(3); + _actor7.animate(ANIM_MODE_2, NULL); + _actor7._numFrames = 6; + _actor7.setPosition(Common::Point(194, 158)); + _actor7.fixPriority(159); + + _item2.setDetails(Rect(188, 124, 199, 133), 1950, 27, 28, -1, 2, NULL); + + if (R2_INVENTORY.getObjectScene(34) == 1950) { + _actor5.postInit(); + _actor5.setVisage(1970); + _actor5.setStrip(1); + _actor5.setFrame(2); + _actor5.fixPriority(160); + } + + if (R2_GLOBALS.getFlag(37)) { + _actor5.setPosition(Common::Point(192, 118)); + _actor5.setDetails(1950, 9, 4, -1, 2, (SceneItem *) NULL); + } else { + _actor4.postInit(); + _actor4.setVisage(1970); + _actor4.setStrip(4); + _actor4._numFrames = 4; + _actor4.animate(ANIM_MODE_8, NULL); + _actor4.setPosition(Common::Point(192, 121)); + _actor4.fixPriority(159); + _actor4.setDetails(1950, 6, 7, 8, 2, (SceneItem *) NULL); + + _actor5.setPosition(Common::Point(192, 109)); + _actor5.setDetails(1950, 9, 7, 8, 2, (SceneItem *) NULL); + } + + _actor3.postInit(); + _actor3.setVisage(1972); + _actor3.setStrip(1); + _actor3.setPosition(Common::Point(76, 94)); + _actor3.fixPriority(25); + _actor3.setDetails(1950, 30, -1, -1, 2, (SceneItem *) NULL); + if (R2_INVENTORY.getObjectScene(35) == 2) + _actor3.setFrame(2); + else + _actor3.setFrame(1); + + _field414 = 1; + } else if (_field414 != 0) { + _actor6.remove(); + _actor4.remove(); + _actor5.remove(); + _actor7.remove(); + _actor3.remove(); + + _item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 2, NULL); + } + + switch (R2_GLOBALS._v566A5) { + case 0: + _sceneMode = 1950; + if (R2_INVENTORY.getObjectScene(31) == 0) { + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + } else { + setAction(&_sequenceManager, this, 1950, &R2_GLOBALS._player, NULL); + } + break; + case 1: { + _sceneMode = R2_GLOBALS._v566A5; + R2_GLOBALS._player.setPosition(Common::Point(160, 213)); + Common::Point pt(160, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 2: + _sceneMode = R2_GLOBALS._v566A5; + if (R2_GLOBALS.getFlag(36)) + setAction(&_sequenceManager, this, 1957, &R2_GLOBALS._player, NULL); + else + setAction(&_sequenceManager, this, 1974, &R2_GLOBALS._player, NULL); + break; + case 3: + if (_field416 == 0) { + _sceneMode = R2_GLOBALS._v566A5; + R2_GLOBALS._player.setPosition(Common::Point(-20, 160)); + Common::Point pt(30, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } else { + _sceneMode = 18; + _exit3._enabled = false; + _field418 = Common::Point(60, 152); + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + + _actor8.setStrip(2); + NpcMover *mover = new NpcMover(); + _actor8.addMover(mover, &_field418, this); + + R2_GLOBALS._player.setPosition(Common::Point(-20, 160)); + Common::Point pt2(30, 160); + NpcMover *mover2 = new NpcMover(); + R2_GLOBALS._player.addMover(mover2, &pt2, NULL); + } + break; + case 4: + _sceneMode = R2_GLOBALS._v566A5; + if (_field412 == 0) { + if (R2_GLOBALS.getFlag(36)) + setAction(&_sequenceManager, this, 1955, &R2_GLOBALS._player, NULL); + else + setAction(&_sequenceManager, this, 1972, &R2_GLOBALS._player, NULL); + } else { + if (R2_GLOBALS.getFlag(36)) + setAction(&_sequenceManager, this, 1954, &R2_GLOBALS._player, NULL); + else + setAction(&_sequenceManager, this, 1971, &R2_GLOBALS._player, NULL); + } + break; + case 5: { + _sceneMode = R2_GLOBALS._v566A5; + R2_GLOBALS._player.setPosition(Common::Point(160, 127)); + Common::Point pt(160, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 6: + if (_field416 == 0) { + _sceneMode = R2_GLOBALS._v566A5; + if (R2_GLOBALS._v566A4 == 1) { + setAction(&_sequenceManager, this, 1961, &R2_GLOBALS._player, NULL); + } else { + R2_GLOBALS._player.setPosition(Common::Point(340, 160)); + Common::Point pt(289, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + } else { + _sceneMode = 17; + _exit6._enabled = false; + _field418 = Common::Point(259, 152); + + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + + _actor8.setStrip(1); + NpcMover *mover = new NpcMover(); + _actor8.addMover(mover, &_field418, this); + + R2_GLOBALS._player.setPosition(Common::Point(340, 160)); + Common::Point pt2(289, 160); + NpcMover *mover2 = new NpcMover(); + R2_GLOBALS._player.addMover(mover2, &pt2, NULL); + } + break; + default: + break; + } +} + +void Scene1950::subBF4B4(int indx) { + R2_GLOBALS._player.disableControl(); + int si = indx - 1; + if ((indx / 4) == (si / 4)) { + if (si < 0) + si = 3; + } else + si = 4; + + if (_area1._arrActor1[si]._fieldA8 == 0) { + _area1._arrActor1[si].setFrame(2); + _area1._arrActor1[si]._fieldA8 = 1; + } else { + _area1._arrActor1[si].setFrame(1); + _area1._arrActor1[si]._fieldA8 = 0; + } + + si = indx + 1; + if ((indx / 4) == (si / 4)) { + if (si > 15) + si = 12; + } else + si -= 4; + + if (_area1._arrActor1[si]._fieldA8 == 0) { + _area1._arrActor1[si].setFrame(2); + _area1._arrActor1[si]._fieldA8 = 1; + } else { + _area1._arrActor1[si].setFrame(1); + _area1._arrActor1[si]._fieldA8 = 0; + } + + si = indx - 4; + if (si < 0) + si += 16; + + if (_area1._arrActor1[si]._fieldA8 == 0) { + _area1._arrActor1[si].setFrame(2); + _area1._arrActor1[si]._fieldA8 = 1; + } else { + _area1._arrActor1[si].setFrame(1); + _area1._arrActor1[si]._fieldA8 = 0; + } + + si = indx + 4; + if (si > 15) + si -= 16; + + if (_area1._arrActor1[si]._fieldA8 == 0) { + _area1._arrActor1[si].setFrame(2); + _area1._arrActor1[si]._fieldA8 = 1; + } else { + _area1._arrActor1[si].setFrame(1); + _area1._arrActor1[si]._fieldA8 = 0; + } + + int cpt = 0; + for (si = 0; si < 16; si++) { + if (_area1._arrActor1[si]._fieldA8 != 0) + ++cpt; + } + + if (cpt != 16) { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } else { + R2_GLOBALS.setFlag(37); + _sceneMode = 24; + // TODO: check if correct. The original doesn't countain a sceneActor in + // this call, but it's extremely unusual + setAction(&_sequenceManager, this, 1976, NULL); + } +} + +void Scene1950::postInit(SceneObjectList *OwnerList) { + _field412 = 0; + _field414 = 0; + _field416 = 0; + _field41C = 0; + if (R2_GLOBALS._sceneManager._previousScene == 300) + R2_GLOBALS._v566A4 = 103; + + subBDC1E(); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(105); + + _exit1.setDetails(Rect(130, 46, 189, 135), SHADECURSOR_UP, 1950); + _exit1.setDest(Common::Point(160, 145)); + + _exit2.setDetails(Rect(208, 0, 255, 73), EXITCURSOR_N, 1950); + _exit2.setDest(Common::Point(200, 151)); + + _exit3.setDetails(Rect(305, 95, 320, 147), EXITCURSOR_E, 1950); + _exit3.setDest(Common::Point(312, 160)); + + _exit4.setDetails(Rect(208, 99, 255, 143), EXITCURSOR_S, 1950); + _exit4.setDest(Common::Point(200, 151)); + + _exit5.setDetails(Rect(113, 154, 206, 168), SHADECURSOR_DOWN, 1950); + _exit5.setDest(Common::Point(160, 165)); + + _exit6.setDetails(Rect(0, 95, 14, 147), EXITCURSOR_W, 1950); + _exit6.setDest(Common::Point(7, 160)); + + _exit7.setDetails(Rect(72, 54, 120, 128), EXITCURSOR_NW, 1950); + _exit7.setDest(Common::Point(120, 140)); + + _exit8.setDetails(Rect(258, 60, 300, 145), EXITCURSOR_NE, 1950); + _exit8.setDest(Common::Point(268, 149)); + + R2_GLOBALS._player.postInit(); + if ( (R2_INVENTORY.getObjectScene(32) == 0) && (R2_INVENTORY.getObjectScene(33) == 0) + && (R2_INVENTORY.getObjectScene(46) == 0) && (!R2_GLOBALS.getFlag(36)) ) + R2_GLOBALS._player.setVisage(22); + else + R2_GLOBALS._player.setVisage(20); + + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + _item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 1, NULL); + + subBE59B(); +} + +void Scene1950::remove() { + R2_GLOBALS._sound1.stop(); + R2_GLOBALS._sound2.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene1950::signal() { + switch (_sceneMode) { + case 11: + R2_GLOBALS._v566A4 += 7; + subBDC1E(); + subBE59B(); + break; + case 12: + R2_GLOBALS._v566A4 += 35; + subBDC1E(); + subBE59B(); + break; + case 1975: + SceneItem::display(1950, 21, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + // No break on purpose + case 13: + ++R2_GLOBALS._v566A4; + subBDC1E(); + subBE59B(); + break; + case 14: + R2_GLOBALS._v566A4 += 221; + subBDC1E(); + subBE59B(); + break; + case 15: + R2_GLOBALS._v566A4 += 249; + subBDC1E(); + subBE59B(); + break; + case 16: + // No break on purpose + case 1961: + --R2_GLOBALS._v566A4; + subBDC1E(); + subBE59B(); + break; + case 17: { + _sceneMode = 13; + R2_GLOBALS._v566A5 = 3; + _field416 = 0; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._player._canWalk = true; + R2_GLOBALS._player.setVisage(22); + R2_GLOBALS._player.animate(ANIM_MODE_9, NULL); + Common::Point pt(340, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + Common::Point pt2(289, 160); + NpcMover *mover2 = new NpcMover(); + _actor8.addMover(mover2, &pt2, NULL); + } + break; + case 18: { + _sceneMode = 16; + R2_GLOBALS._v566A5 = 6; + _field416 = 0; + R2_GLOBALS._player.disableControl(CURSOR_ARROW); + R2_GLOBALS._player._canWalk = true; + R2_GLOBALS._player.setVisage(22); + R2_GLOBALS._player.animate(ANIM_MODE_9, NULL); + Common::Point pt(-20, 160); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + Common::Point pt2(30, 160); + NpcMover *mover2 = new NpcMover(); + _actor8.addMover(mover2, &pt2, NULL); + } + break; + case 24: + _area1.remove(); + _sceneMode = 1966; + _actor6.setFrame(3); + setAction(&_sequenceManager, this, 1966, &_actor4, &_actor5, NULL); + break; + case 1951: + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._sceneManager.changeScene(1945); + break; + case 1958: + SceneItem::display(1950, 24, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + _exit8._enabled = true; + break; + case 1959: + R2_INVENTORY.setObjectScene(46, 0); + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + _exit8._enabled = true; + break; + case 1962: + // No break on purpose + case 1963: + R2_GLOBALS._player.enableControl(); + _area1.proc12(1971, 1, 1, 160, 135); + break; + case 1964: + // No break on purpose + case 1965: + if (!R2_GLOBALS.getFlag(37)) + SceneItem::display(1950, 26, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + R2_GLOBALS._player.enableControl(); + break; + case 1966: + _actor4.remove(); + if (R2_GLOBALS.getFlag(36)) { + _sceneMode = 1964; + setAction(&_sequenceManager, this, 1964, &R2_GLOBALS._player, NULL); + } else { + _sceneMode = 1965; + setAction(&_sequenceManager, this, 1965, &R2_GLOBALS._player, NULL); + } + _actor5.setDetails(1950, 9, -1, -1, 2, (SceneItem *) NULL); + case 1967: { + _sceneMode = 0; + R2_INVENTORY.setObjectScene(34, 2); + _actor5.remove(); + if (R2_GLOBALS.getFlag(36)) + R2_GLOBALS._player.setVisage(20); + else + R2_GLOBALS._player.setVisage(22); + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + Common::Point pt(218, 165); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 1968: + R2_GLOBALS._player.disableControl(); + R2_INVENTORY.setObjectScene(35, 2); + _actor3.setFrame(2); + if (R2_GLOBALS.getFlag(36)) + R2_GLOBALS._player.setVisage(20); + else + R2_GLOBALS._player.setVisage(22); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + break; + default: + R2_GLOBALS._v56AAB = 0; + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } +} + +void Scene1950::process(Event &event) { + if ( (event.eventType == EVENT_BUTTON_DOWN) + && (R2_GLOBALS._player._uiEnabled) + && (R2_GLOBALS._events.getCursor() == R2_47) + && (R2_GLOBALS._player._bounds.contains(event.mousePos)) + && (R2_INVENTORY.getObjectScene(31) == 0)) { + event.handled = true; + R2_GLOBALS._player.disableControl(); + _exit7._enabled = false; + _exit8._enabled = false; + _sceneMode = 1959; + setAction(&_sequenceManager, this, 1959, &R2_GLOBALS._player, NULL); + } + Scene::process(event); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 3f2399a2fe..7efaec72c1 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -799,6 +799,148 @@ public: virtual void signal(); }; +class Scene1950 : public SceneExt { + class Area1: public SceneArea { + public: + class Actor10 : public SceneActor { + public: + int _fieldA4; + int _fieldA6; + int _fieldA8; + + Actor10::Actor10(); + void synchronize(Serializer &s); + + void init(int indx); + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + }; + + SceneActor _areaActor; + Actor10 _arrActor1[16]; + + byte _field20; + int _fieldB65; + + Area1(); + void synchronize(Serializer &s); + + virtual void remove(); + virtual void process(Event &event); + virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); + virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); + }; + + class Hotspot2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor2 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor5 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor8 : public SceneActor { + public: + int _fieldA4; + int _fieldA6; + int _fieldA8; + int _fieldAA; + int _fieldAC; + byte _fieldAE; + byte _fieldAF; + + Actor8::Actor8(); + void synchronize(Serializer &s); + + virtual void signal(); + virtual bool startAction(CursorType action, Event &event); + }; + + class Exit1 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit2 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit3 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit4 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit5 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit6 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit7 : public SceneExit { + public: + virtual void changeScene(); + }; + class Exit8 : public SceneExit { + public: + virtual void changeScene(); + }; +public: + NamedHotspot _item1; + Hotspot2 _item2; + SceneActor _actor1; + BackgroundSceneObject _object1; + Actor2 _actor2; + Actor3 _actor3; + SceneActor _actor4; + Actor5 _actor5; + SceneActor _actor6; + SceneActor _actor7; + Actor8 _actor8; + Area1 _area1; + Exit1 _exit1; + Exit2 _exit2; + Exit3 _exit3; + Exit4 _exit4; + Exit5 _exit5; + Exit6 _exit6; + Exit7 _exit7; + Exit8 _exit8; + SequenceManager _sequenceManager; + + int _field412; + int _field414; + int _field416; + Common::Point _field418; + int _field41C; + + Scene1950(); + void synchronize(Serializer &s); + + void subBDC1E(); + void subBE59B(); + void subBF4B4(int indx); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); +}; } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From dd46de7569ce460047bb832f3d12ef2bb342ef8b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 25 Jan 2012 22:20:34 +0100 Subject: TSAGE: Fix compilation, sorry --- engines/tsage/ringworld2/ringworld2_scenes1.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 7efaec72c1..7c05cd8e5f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -808,7 +808,7 @@ class Scene1950 : public SceneExt { int _fieldA6; int _fieldA8; - Actor10::Actor10(); + Actor10(); void synchronize(Serializer &s); void init(int indx); @@ -862,7 +862,7 @@ class Scene1950 : public SceneExt { byte _fieldAE; byte _fieldAF; - Actor8::Actor8(); + Actor8(); void synchronize(Serializer &s); virtual void signal(); -- cgit v1.2.3 From 14523275a35b31eb61e5afd08499aa9354a9eb35 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 Jan 2012 01:16:59 +0100 Subject: TSAGE: R2R - Implement scene 3500 This required a fix for direct draw code --- engines/tsage/ringworld2/ringworld2_logic.cpp | 285 ++++- engines/tsage/ringworld2/ringworld2_logic.h | 34 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 268 +---- engines/tsage/ringworld2/ringworld2_scenes1.h | 25 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 1294 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 120 +++ 6 files changed, 1737 insertions(+), 289 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 54d9bc362f..8df0a5bda2 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -259,7 +259,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 3400: return new Scene3400(); case 3500: - error("Missing scene %d from group 3", sceneNumber); + return new Scene3500(); case 3600: return new Scene3600(); case 3700: @@ -1156,6 +1156,289 @@ void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, i 2, (SceneItem *)NULL); } +/*****************************************************************************/ + +UnkObject1200::UnkObject1200() { + _field16 = _field3A = NULL; + _field12 = _field14 = 0; + _field26 = _field28 = _field2A = _field2C = _field2E = _field30 = 0; + _field32 = _field34 = _field36 = _field38 = _field3E = _field40 = 0; +} + +void UnkObject1200::synchronize(Serializer &s) { + SavedObject::synchronize(s); + + _rect1.synchronize(s); + _rect2.synchronize(s); + + // FIXME: syncrhonize _field16 and _field3A + + s.syncAsSint16LE(_field12); + s.syncAsSint16LE(_field14); + s.syncAsSint16LE(_field26); + s.syncAsSint16LE(_field28); + s.syncAsSint16LE(_field2A); + s.syncAsSint16LE(_field2C); + s.syncAsSint16LE(_field2E); + s.syncAsSint16LE(_field30); + s.syncAsSint16LE(_field32); + s.syncAsSint16LE(_field34); + s.syncAsSint16LE(_field36); + s.syncAsSint16LE(_field38); + s.syncAsSint16LE(_field3E); + s.syncAsSint16LE(_field40); +} + +void UnkObject1200::sub51AE9(int arg1) { + warning("STUB: UnkObject1200::sub51AE9()"); +} + +int UnkObject1200::sub51AF8(Common::Point pt) { + if (!_rect1.contains(pt)) + return -1; + + int tmp1 = (pt.x - _rect1.left + _field2E) / _field2A; + int tmp2 = (pt.y - _rect1.top + _field30) / _field2C; + + if ((tmp1 >= 0) && (tmp2 >= 0) && (_field26 > tmp1) && (_field28 > tmp2)) + return _field16[(((_field26 * tmp2) + tmp1)* 2)]; + + return -1; +} + +bool UnkObject1200::sub51AFD(Common::Point pt) { + int retval = false; + + _field2E = pt.x; + _field30 = pt.y; + + if (_field2E < _rect2.top) { + _field2E = _rect2.top; + retval = true; + } + + if (_field30 < _rect2.left) { + _field30 = _rect2.left; + retval = true; + } + + if (_field2E + _rect1.width() > _rect2.right) { + _field2E = _rect2.right - _rect1.width(); + retval = true; + } + + if (_field30 + _rect1.height() > _rect2.bottom) { + _field30 = _rect2.bottom - _rect1.height(); + retval = true; + } + + return retval; +} + +void UnkObject1200::sub51B02() { + warning("STUB: UnkObject1200::sub51B02()"); +} + +void UnkObject1200::sub9EDE8(Rect rect) { + _rect1 = rect; + warning("FIXME: UnkObject1200::sub9EDE8()"); +// _rect1.clip(g_globals->gfxManager()._bounds); +} + +int UnkObject1200::sub9EE22(int &arg1, int &arg2) { + arg1 /= _field2A; + arg2 /= _field2C; + + if ((arg1 >= 0) && (arg2 >= 0) && (_field26 > arg1) && (_field28 > arg2)) { + return _field16[(((_field26 * arg2) + arg1) * 2)]; + } + + return -1; +} + +void Scene1200::sub9DAD6(int indx) { + _object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4); + + switch (indx) { + case 0: + if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) + || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) + || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 41)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1200; + setAction(&_sequenceManager, this, 1200, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(200, 69)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 15; + else + _sceneMode = 10; + break; + case 1: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 76; + else + _sceneMode = 75; + break; + case 2: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 101; + else + _sceneMode = 100; + break; + case 3: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 111; + else + _sceneMode = 110; + break; + default: + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 1; + signal(); + } + break; + case 1: + if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) + || ((R2_GLOBALS._v56AA2 == 5) && (R2_GLOBALS._v56AA4 == 5)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1201; + setAction(&_sequenceManager, this, 1201, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(120, 69)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 56; + else + _sceneMode = 55; + break; + case 1: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 25; + else + _sceneMode = 20; + break; + case 2: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 91; + else + _sceneMode = 90; + break; + case 3: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 121; + else + _sceneMode = 120; + break; + default: + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 2; + signal(); + } + break; + case 2: + if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3)) + || ((R2_GLOBALS._v56AA2 == 41) && (R2_GLOBALS._v56AA4 == 21)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1203; + setAction(&_sequenceManager, this, 1203, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(160, 110)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 51; + else + _sceneMode = 50; + break; + case 1: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 81; + else + _sceneMode = 80; + break; + case 2: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 35; + else + _sceneMode = 30; + break; + case 3: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 116; + else + _sceneMode = 115; + break; + default: + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 3; + signal(); + } + break; + case 3: + if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3)) + || ((R2_GLOBALS._v56AA2 == 35) && (R2_GLOBALS._v56AA4 == 17)) ) + ) { + R2_GLOBALS._player.disableControl(); + _sceneMode = 1202; + setAction(&_sequenceManager, this, 1202, &_actor1, NULL); + } else if (_object1.sub51AF8(Common::Point(160, 30)) == 36) { + switch (_field412 - 1) { + case 0: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 61; + else + _sceneMode = 60; + break; + case 1: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 71; + else + _sceneMode = 70; + break; + case 2: + if (R2_GLOBALS._player._visage == 3156) + _sceneMode = 96; + else + _sceneMode = 95; + break; + case 3: + if (R2_GLOBALS._player._visage == 3155) + _sceneMode = 45; + else + _sceneMode = 40; + break; + default: + _sceneMode = 1; + R2_GLOBALS._player.setup(3156, 4, 6); + break; + } + R2_GLOBALS._player.disableControl(); + _field412 = 4; + signal(); + } + break; + default: + break; + } +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 14ab1d0081..dbb740d9fd 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -287,6 +287,40 @@ public: void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; +class UnkObject1200 : public SavedObject { +public: + Rect _rect1; + Rect _rect2; + + int *_field16; + int *_field3A; + + int _field12; + int _field14; + int _field26; + int _field28; + int _field2A; + int _field2C; + int _field2E; + int _field30; + int _field32; + int _field34; + int _field36; + int _field38; + int _field3E; + int _field40; + + UnkObject1200(); + void synchronize(Serializer &s); + + void sub51AE9(int arg1); + int sub51AF8(Common::Point pt); + bool sub51AFD(Common::Point pt); + void sub51B02(); + void sub9EDE8(Rect rect); + int sub9EE22(int &arg1, int &arg2); + virtual Common::String getClassName() { return "UnkObject1200"; } +}; } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index d3b7d616f1..9a9112e3fc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1097,266 +1097,6 @@ void Scene1200::Area1::proc13(int resNum, int lookLineNum, int talkLineNum, int _actor2.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); } -Scene1200::Object1::Object1() { - _field16 = _field26 = _field28 = _field2A = _field2C = _field2E = _field30 = 0; -} - -void Scene1200::Object1::synchronize(Serializer &s) { - SavedObject::synchronize(s); - - _rect1.synchronize(s); - _rect2.synchronize(s); - - s.syncAsSint16LE(_field16); - s.syncAsSint16LE(_field26); - s.syncAsSint16LE(_field28); - s.syncAsSint16LE(_field2A); - s.syncAsSint16LE(_field2C); - s.syncAsSint16LE(_field2E); - s.syncAsSint16LE(_field30); -} - -int Scene1200::Object1::sub51AF8(Common::Point pt) { - if (!_rect1.contains(pt)) - return -1; - - int tmp1 = (pt.x - _rect1.left + _field2E) / _field2A; - int tmp2 = (pt.y - _rect1.top + _field30) / _field2C; - - if ((tmp1 >= 0) && (tmp2 >= 0) && (_field26 > tmp1) && (_field28 > tmp2)) - return _field16 + (((_field26 * tmp2) + tmp1)* 2); - - return -1; -} - -bool Scene1200::Object1::sub51AFD(Common::Point pt) { - int retval = false; - - _field2E = pt.x; - _field30 = pt.y; - - if (_field2E < _rect2.top) { - _field2E = _rect2.top; - retval = true; - } - - if (_field30 < _rect2.left) { - _field30 = _rect2.left; - retval = true; - } - - if (_field2E + _rect1.width() > _rect2.right) { - _field2E = _rect2.right - _rect1.width(); - retval = true; - } - - if (_field30 + _rect1.height() > _rect2.bottom) { - _field30 = _rect2.bottom - _rect1.height(); - retval = true; - } - - return retval; -} - -void Scene1200::Object1::sub9EDE8(Rect rect) { - _rect1 = rect; - warning("FIXME: Scene1200::Object1::sub9EDE8()"); -// _rect1.clip(g_globals->gfxManager()._bounds); -} - -int Scene1200::Object1::sub9EE22(int &arg1, int &arg2) { - arg1 /= _field2A; - arg2 /= _field2C; - - if ((arg1 >= 0) && (arg2 >= 0) && (_field26 > arg1) && (_field28 > arg2)) { - return (((_field26 * arg2) + arg1) * 2) + _field16; - } - - return -1; -} - -void Scene1200::sub9DAD6(int indx) { - _object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4); - - switch (indx) { - case 0: - if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) - || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) - || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) - || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 41)) ) - ) { - R2_GLOBALS._player.disableControl(); - _sceneMode = 1200; - setAction(&_sequenceManager, this, 1200, &_actor1, NULL); - } else if (_object1.sub51AF8(Common::Point(200, 69)) == 36) { - switch (_field412 - 1) { - case 0: - if (R2_GLOBALS._player._visage == 3155) - _sceneMode = 15; - else - _sceneMode = 10; - break; - case 1: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 76; - else - _sceneMode = 75; - break; - case 2: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 101; - else - _sceneMode = 100; - break; - case 3: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 111; - else - _sceneMode = 110; - break; - default: - break; - } - R2_GLOBALS._player.disableControl(); - _field412 = 1; - signal(); - } - break; - case 1: - if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) - || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) - || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) - || ((R2_GLOBALS._v56AA2 == 5) && (R2_GLOBALS._v56AA4 == 5)) ) - ) { - R2_GLOBALS._player.disableControl(); - _sceneMode = 1201; - setAction(&_sequenceManager, this, 1201, &_actor1, NULL); - } else if (_object1.sub51AF8(Common::Point(120, 69)) == 36) { - switch (_field412 - 1) { - case 0: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 56; - else - _sceneMode = 55; - break; - case 1: - if (R2_GLOBALS._player._visage == 3155) - _sceneMode = 25; - else - _sceneMode = 20; - break; - case 2: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 91; - else - _sceneMode = 90; - break; - case 3: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 121; - else - _sceneMode = 120; - break; - default: - break; - } - R2_GLOBALS._player.disableControl(); - _field412 = 2; - signal(); - } - break; - case 2: - if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3)) - || ((R2_GLOBALS._v56AA2 == 41) && (R2_GLOBALS._v56AA4 == 21)) ) - ) { - R2_GLOBALS._player.disableControl(); - _sceneMode = 1203; - setAction(&_sequenceManager, this, 1203, &_actor1, NULL); - } else if (_object1.sub51AF8(Common::Point(160, 110)) == 36) { - switch (_field412 - 1) { - case 0: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 51; - else - _sceneMode = 50; - break; - case 1: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 81; - else - _sceneMode = 80; - break; - case 2: - if (R2_GLOBALS._player._visage == 3155) - _sceneMode = 35; - else - _sceneMode = 30; - break; - case 3: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 116; - else - _sceneMode = 115; - break; - default: - break; - } - R2_GLOBALS._player.disableControl(); - _field412 = 3; - signal(); - } - break; - case 3: - if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3)) - || ((R2_GLOBALS._v56AA2 == 35) && (R2_GLOBALS._v56AA4 == 17)) ) - ) { - R2_GLOBALS._player.disableControl(); - _sceneMode = 1202; - setAction(&_sequenceManager, this, 1202, &_actor1, NULL); - } else if (_object1.sub51AF8(Common::Point(160, 30)) == 36) { - switch (_field412 - 1) { - case 0: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 61; - else - _sceneMode = 60; - break; - case 1: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 71; - else - _sceneMode = 70; - break; - case 2: - if (R2_GLOBALS._player._visage == 3156) - _sceneMode = 96; - else - _sceneMode = 95; - break; - case 3: - if (R2_GLOBALS._player._visage == 3155) - _sceneMode = 45; - else - _sceneMode = 40; - break; - default: - _sceneMode = 1; - R2_GLOBALS._player.setup(3156, 4, 6); - break; - } - R2_GLOBALS._player.disableControl(); - _field412 = 4; - signal(); - } - break; - default: - break; - } -} void Scene1200::postInit(SceneObjectList *OwnerList) { Rect tmpRect; @@ -1395,10 +1135,10 @@ void Scene1200::postInit(SceneObjectList *OwnerList) { tmpRect.set(110, 20, 210, 120); _object1.sub9EDE8(tmpRect); - warning("_object1.sub51AE9(1);"); + _object1.sub51AE9(1); _object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4)); warning("int unk = set_pane_p(_paneNumber);"); - warning("_object1.sub51B02();"); + _object1.sub51B02(); warning("set_pane_p(unk);"); R2_GLOBALS._player.enableControl(); @@ -1805,7 +1545,7 @@ void Scene1200::dispatch() { if (_field41C != 0) { _object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4)); warning("int unk = set_pane_p(_paneNumber);"); - warning("_object1.sub51B02();"); + _object1.sub51B02(); warning("_gfxManager.sub294AC(unk);"); warning("tmpRect.sub14DF3();"); _field41C = 0; @@ -1832,7 +1572,7 @@ void Scene1200::dispatch() { } _object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4)); warning("int unk = set_pane_p(_paneNumber);"); - warning("_object1.sub51B02();"); + _object1.sub51B02(); warning("_gfxManager.sub294AC(unk);"); warning("tmpRect.sub14DF3();"); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 7c05cd8e5f..da68bffcab 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -142,35 +142,12 @@ class Scene1200 : public SceneExt { virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; - - class Object1 : public SavedObject { - public: - Rect _rect1; - Rect _rect2; - - int _field16; - int _field26; - int _field28; - int _field2A; - int _field2C; - int _field2E; - int _field30; - - Object1(); - void synchronize(Serializer &s); - - int sub51AF8(Common::Point pt); - bool sub51AFD(Common::Point pt); - void sub9EDE8(Rect rect); - int sub9EE22(int &arg1, int &arg2); - virtual Common::String getClassName() { return "UnkObject1200"; } - }; public: NamedHotspot _item1; SceneActor _actor1; Area1 _area1; - Object1 _object1; + UnkObject1200 _object1; SequenceManager _sequenceManager; int _field412; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index c6c1b0610c..d462cb11f5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -2884,6 +2884,1300 @@ void Scene3400::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 3500 - + * + *--------------------------------------------------------------------------*/ +Scene3500::Action1::Action1() { + _field1E = 0; + _field20 = 0; + _field22 = 0; + _field24 = 0; +} + +void Scene3500::Action1::synchronize(Serializer &s) { + Action::synchronize(s); + + s.syncAsSint16LE(_field1E); + s.syncAsSint16LE(_field20); + s.syncAsSint16LE(_field22); + s.syncAsSint16LE(_field24); +} + +void Scene3500::Action1::sub108670(int arg1) { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + _field1E = arg1; + _field20 = 1; + _field24 = 1; + + scene->_actor9.setStrip(2); + scene->_actor9.show(); + + if (_field1E == 1) + scene->_actor6.show(); + else + scene->_actor5.show(); + + if (scene->_actor1._frame % 2 == 0) + scene->_actor1._frameChange = _field1E; + scene->_actor1.setFrame(scene->_actor1.changeFrame()); + + setActionIndex(0); +} + +void Scene3500::Action1::sub108732(int arg1) { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + _field20 = arg1; + _field1E = -_field1E; + + if (_field1E == 1) { + scene->_actor6.show(); + scene->_actor5.hide(); + } else { + scene->_actor5.show(); + scene->_actor6.hide(); + } + + switch (_actionIndex) { + case 4: + scene->_actor1._frameChange = _field1E; + scene->_actor1.setFrame(scene->_actor1.changeFrame()); + // No break on purpose + case 3: + _actionIndex = 10; + setDelay(0); + break; + case 5: { + scene->_fieldAF8 = 160; + Common::Point pt(160, 73); + NpcMover *mover = new NpcMover(); + scene->_actor8.addMover(mover, &pt, NULL); + + scene->_fieldB9E = 160 - (_field1E * 2 * 160); + Common::Point pt2(scene->_fieldB9E, 73); + NpcMover *mover2 = new NpcMover(); + scene->_actor9.addMover(mover2, &pt2, this); + + _actionIndex = 11; + } + break; + case 6: + scene->_actor1._frameChange = _field1E; + scene->_actor1.setFrame(scene->_actor1.changeFrame()); + setDelay(1); + // No break on purpose + case 8: + scene->_actor9.setStrip(2); + _actionIndex = 1; + break; + default: + break; + } +} + +Scene3500::Action2::Action2() { + _field1E = 0; +} + +void Scene3500::Action2::synchronize(Serializer &s) { + Action::synchronize(s); + + s.syncAsSint16LE(_field1E); +} + +Scene3500::Item4::Item4() { + _field34 = 0; +} + +void Scene3500::Item4::synchronize(Serializer &s) { + NamedHotspot::synchronize(s); + + s.syncAsSint16LE(_field34); +} + +Scene3500::Actor7::Actor7() { + _fieldA4 = 0; + _fieldA6 = 0; + _fieldA8 = 0; + _fieldAA = 0; + _fieldAC = 0; + _fieldAE = 0; +} + +void Scene3500::Actor7::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_fieldA6); + s.syncAsSint16LE(_fieldA8); + s.syncAsSint16LE(_fieldAA); + s.syncAsSint16LE(_fieldAC); + s.syncAsSint16LE(_fieldAE); +} + +void Scene3500::Actor7::sub109466(int arg1, int arg2, int arg3, int arg4, int arg5) { + _fieldAE = 0; + _fieldA4 = arg1; + _fieldA6 = arg2; + _fieldA8 = arg3; + _fieldAA = arg4; + _fieldAC = _fieldAA / _fieldA8; + + postInit(); + setup(10501, 3, 1); + fixPriority(255); + sub109663(arg5); +} + +void Scene3500::Actor7::sub1094ED() { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + scene->_field1270 = _position.x - _fieldA4; +} + +void Scene3500::Actor7::sub109663(int arg1){ + sub109693(Common::Point(_fieldA4 + arg1, _fieldA6 - (_fieldAC * arg1))); +} + +void Scene3500::Actor7::sub109693(Common::Point Pt) { + setPosition(Pt); +} + +int Scene3500::UnkObject3500::sub1097C9(int arg1) { + return (_field2A / 2) + arg1 - (arg1 % _field2A); +} + +int Scene3500::UnkObject3500::sub1097EF(int arg1) { + return (_field2C / 2) + arg1 - (arg1 % _field2C); +} + +int Scene3500::UnkObject3500::sub109C09(Common::Point pt) { + int vx = pt.x / _field2A; + int vy = pt.y / _field2C; + + if ((vx >= 0) && (_field26 > vx) && (_field28 > vy)) { + return _field16[((_field26 * vy) + vx) * 2]; + } else + return -1; +} + +int Scene3500::UnkObject3500::sub109C5E(int &x, int &y) { + int retVal = sub51AFD(Common::Point(x, y)); + x = _field2E; + y = _field30; + + return retVal; +} + +Scene3500::Scene3500() { + _fieldAF8 = 0; + _fieldB9E = 0; + _rotation = NULL; + _field126E = 0; + _field1270 = 0; + _field1272 = 0; + _field1274 = 0; + _field1276 = 0; + _field1278 = 0; + _field127A = 0; + _field127C = 0; + _field127E = 0; + _field1280 = 0; + _field1282 = 0; + _field1284 = 0; + _field1286 = 0; +} + +void Scene3500::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_fieldAF8); + s.syncAsSint16LE(_fieldB9E); + _rotation->synchronize(s); + s.syncAsSint16LE(_field126E); + s.syncAsSint16LE(_field1270); + s.syncAsSint16LE(_field1272); + s.syncAsSint16LE(_field1274); + s.syncAsSint16LE(_field1276); + s.syncAsSint16LE(_field1278); + s.syncAsSint16LE(_field127A); + s.syncAsSint16LE(_field127C); + s.syncAsSint16LE(_field127E); + s.syncAsSint16LE(_field1280); + s.syncAsSint16LE(_field1282); + s.syncAsSint16LE(_field1284); + s.syncAsSint16LE(_field1286); +} + +void Scene3500::sub107F71(int arg1) { + switch (arg1) { + case -1: + _actor7.sub1094ED(); + if (_field1270 != 0) { + _field1270--; + _actor7.sub109663(_field1270); + } + if (_action1._field24 != 0) + _field1270 = 0; + break; + case 1: + _actor7.sub1094ED(); + if (_field1270 < 16) { + ++_field1270; + _actor7.sub109663(_field1270); + } + if (_action1._field24 != 0) + _field1270 = 0; + break; + case 88: + if ((_action == 0) || (_action1._field24 == 0)) { + // The original makes a second useless check on action, skipped + _action2.sub10831F(2); + if ((_action) && ((_action2.getActionIndex() != 0) || (_action2._field1E != 2))) { + _action2.signal(); + } else { + _actor9.setAction(&_action2, &_actor9, NULL); + } + } + break; + case 96: + if ((_action) && (_action1._field24 != 0) && (_action2._field1E != 1)) { + _field1278 = 0; + _action1.sub108732(0); + } else if ((_action) && (_field1278 == 0) && (_action1._field24 != 0)) { + _field1278 = arg1; + } else if ((_action) && (_action1._field24 == 0)) { + _action1.sub108670(1); + _action1.signal(); + } else if (_action == 0) { + _action1.sub108670(1); + setAction(&_action1, &_actor1, NULL); + } + break; + case 104: + if ((_action == 0) || (_action1._field24 == 0)) { + _action2.sub10831F(-1); + if ((_action) && ((_action2.getActionIndex() != 0) || (_action2._field1E != -1))) { + _action2.signal(); + } else { + _actor9.setAction(&_action2, &_actor9, NULL); + } + } + break; + case 112: + if ((_action) && (_action1._field24 != 0) && (_action2._field1E != -1)) { + _field1278 = 0; + _action1.sub108732(0); + } else if ((_action) && (_field1278 == 0) && (_action1._field24 != 0)) { + _field1278 = arg1; + } else if ((_action) && (_action1._field24 == 0)) { + _action1.sub108670(-1); + _action1.signal(); + } else if (_action == 0) { + _action1.sub108670(-1); + setAction(&_action1, &_actor1, NULL); + } + break; + default: + _field1270 = arg1; + _actor7.sub109663(arg1); + if (_action1._field24 != 0) { + _field1270 = 0; + } + break; + } +} + +void Scene3500::Action1::signal() { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + switch(_actionIndex++) { + case 0: + R2_GLOBALS._player.disableControl(); + scene->_field1286 = 0; + if (scene->_field1270 != 0) { + scene->_field1270 = 0; + scene->_field126E = 0; + scene->_field1272 = 0; + scene->_rotation->_idxChange = 0; + } + break; + case 1: + if ((scene->_actor1._frame % 2) == 0) { + setDelay(1); + return; + } + // No break on purpose + case 3: + scene->_actor1._frameChange = _field1E; + scene->_actor1.setFrame(scene->_actor1.changeFrame()); + setDelay(1); + break; + case 4: { + int si = scene->_unkObj1.sub109C09(Common::Point(scene->_field127A + 70, scene->_field127C + 46)); + int var2 = scene->_unkObj1.sub1097C9(scene->_field127A + 70) - 70; + int var4 = scene->_unkObj1.sub1097EF(scene->_field127C + 46) - 46; + int di = abs(var2 - scene->_field127A); + int var6 = abs(var4 - scene->_field127C); + + if ((scene->_actor1._frame % 2) != 0) { + scene->_actor1._frameChange = _field1E; + scene->_actor1.setFrame(scene->_actor1.changeFrame()); + } + + int var8 = (scene->_action1._field1E * 2 + scene->_field1276); + if (var8 > 7) + var8 = 1; + else if (var8 < 1) + var8 = 7; + + switch (var8) { + case 0: + if ( ((si != 2) && (si != 3) && (si != 6) && (si != 1) && (si != 23) && (si != 24) && (si != 4) && (si != 11)) + || (var6 != 0)) { + if ((si != 25) && (si != 26) && (si != 5) && (si != 14) && (si != 15)) + _field20 = 0; + else if ((var6 != 0) || (di <= 3)) // useless, skipped: "|| (di == 0)" + _field20 = 0; + else + _field20 = 1; + } else + _field20 = 1; + break; + case 2: + if ( ((si != 12) && (si != 13) && (si != 11) && (si != 16) && (si != 26) && (si != 24) && (si != 15) && (si != 6) && (si != 31)) + || (di != 0)) { + if ((si != 25) && (si != 23) && (si != 14) && (si != 5) && (si != 4)) + _field20 = 0; + else if ((di != 0) || (var6 <= 3)) // useless, skipped: "|| (var6 == 0)" + _field20 = 0; + else + _field20 = 1; + } else + _field20 = 1; + break; + case 4: + if ( ((si != 2) && (si != 3) && (si != 6) && (si != 1) && (si != 25) && (si != 26) && (si != 5) && (si != 16) && (si != 31)) + || (var6 != 0)) { + if ((si != 23) && (si != 24) && (si != 4) && (si != 14) && (si != 15)) + _field20 = 0; + else if ((var6 != 0) || (di <= 3)) // useless, skipped: "|| (di == 0)" + _field20 = 0; + else + _field20 = 1; + } else + _field20 = 1; + break; + case 6: + if ( ((si != 12) && (si != 13) && (si != 11) && (si != 16) && (si != 25) && (si != 23) && (si != 14) && (si != 1) && (si != 31)) + || (var6 != 0)) { + if ((si != 26) && (si != 24) && (si != 15) && (si != 5) && (si != 4)) + _field20 = 0; + else if ((var6 <= 0) || (di != 0)) // useless, skipped: "|| (var6 == 0)" + _field20 = 0; + else + _field20 = 1; + } else + _field20 = 1; + default: + break; + } + } + // No break on purpose + case 2: { + scene->_actor8.setPosition(Common::Point(160, 73)); + scene->_actor8._moveDiff.x = 160 - scene->_field126E; + scene->_fieldAF8 = 160 - ((_field1E * 2) * 160); + Common::Point pt(scene->_fieldAF8, 73); + NpcMover *mover = new NpcMover(); + scene->_actor8.addMover(mover, &pt, this); + + scene->_actor9.setPosition(Common::Point(160 + ((_field1E * 2) * 160), 73));; + scene->_actor9._moveDiff.x = 160 - scene->_field126E; + scene->_fieldB9E = 160; + Common::Point pt2(scene->_fieldB9E, 73); + NpcMover *mover2 = new NpcMover(); + scene->_actor9.addMover(mover2, &pt2, NULL); + } + break; + case 5: + scene->_actor1._frameChange = _field1E; + scene->_field1276 = scene->_actor1.changeFrame(); + scene->_actor1.setFrame(scene->_field1276); + setDelay(1); + break; + case 6: + scene->_actor8.setPosition(Common::Point(160, 73)); + if (_field20 == 0) + scene->_actor8.setStrip(1); + else + scene->_actor8.setStrip(2); + scene->_actor8.fixPriority(1); + + scene->_actor9.setPosition(Common::Point(-160, 73)); + scene->_actor9.setStrip(9); + scene->_actor9.fixPriority(11); + scene->_actor9.hide(); + setDelay(1); + break; + case 7: + if ((scene->_actor1._frame % 2) == 0) { + scene->_actor1._frameChange = _field1E; + scene->_field1276 = scene->_actor1.changeFrame(); + scene->_actor1.setFrame(scene->_field1276); + } + setDelay(1); + break; + case 8: { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + scene->_field1286 = 1; + if ((scene->_actor1._frame % 2) == 0) { + scene->_actor1._frameChange = _field1E; + scene->_actor1.setFrame(scene->_actor1.changeFrame()); + } + // All the var_8 initialization was missing in the original + // but it's clearly a cut and paste error from case 4. + // The following code allows the switch to work properly. + warning("Checkme: fix for dead code"); + int var_8 = (_field1E * 2 + scene->_field1276); + if (var_8 > 7) + var_8 = 1; + else if (var_8 < 1) + var_8 = 7; + // + + switch (var_8 - 1) { + case 0: + // No break on purpose + case 4: + scene->_field127A = scene->_unkObj1.sub1097C9(scene->_field127A + 70) - 70; + break; + case 2: + // No break on purpose + case 6: + scene->_field127C = scene->_unkObj1.sub1097EF(scene->_field127C + 46) - 46; + break; + default: + break; + } + scene->_actor5.hide(); + scene->_actor6.hide(); + _field24 = 0; + if (_field20 == 0) { + scene->_actor7.sub1094ED(); + if (scene->_field126E == scene->_field1270) + scene->_aSound1.play(276); + } + break; + } + case 10: { + scene->_fieldAF8 = 160; + Common::Point pt(160, 73); + NpcMover *mover = new NpcMover(); + scene->_actor8.addMover(mover, &pt, NULL); + + scene->_fieldB9E = 160 - (_field1E * 2 * 160); + Common::Point pt2(scene->_fieldB9E, 73); + NpcMover *mover2 = new NpcMover(); + scene->_actor9.addMover(mover2, &pt2, this); + _actionIndex = 6; + } + break; + case 11: { + scene->_actor8.setStrip(2); + scene->_actor8.setPosition(Common::Point(160, 73)); + scene->_fieldAF8 = 160 - (_field1E * 2 * 160); + Common::Point pt(scene->_fieldAF8, 73); + NpcMover *mover = new NpcMover(); + scene->_actor8.addMover(mover, &pt, NULL); + scene->_actor8.fixPriority(11); + if (_field20 == 0) + scene->_actor9.setStrip(1); + else + scene->_actor9.setStrip(2); + scene->_actor9.setPosition(Common::Point(160 - (_field1E * 2 * 160), 73)); + scene->_fieldB9E = 160; + Common::Point pt2(scene->_fieldB9E, 73); + NpcMover *mover2 = new NpcMover(); + scene->_actor9.addMover(mover2, &pt2, this); + scene->_actor9.fixPriority(1); + _actionIndex = 5; + } + break; + default: + break; + } +} + +void Scene3500::Action1::dispatch() { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + Action::dispatch(); + if ((_actionIndex == 1) && (scene->_field126E <= 4)) { + scene->_rotation->_idxChange = 0; + signal(); + } +} + +void Scene3500::Action2::sub10831F(int arg1) { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + _field1E = arg1; + if (_field1E == -1) + scene->_actor3.setFrame2(3); + else + scene->_actor3.setFrame2(1); + + setActionIndex(0); +} + +void Scene3500::Action2::signal() { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + int si; + int di; + + switch (_actionIndex++) { + case 0: { + if (scene->_actor8._mover) { + si = scene->_fieldAF8; + di = scene->_fieldB9E; + } else { + scene->_fieldAF8 = scene->_actor8._position.x; + si = scene->_fieldAF8; + scene->_fieldB9E = scene->_actor9._position.y; + di = scene->_fieldB9E; + } + + scene->_actor8._moveDiff.y = 9 - (scene->_field126E / 2); + Common::Point pt(si, 73 - (_field1E * 12)); + NpcMover *mover = new NpcMover(); + scene->_actor8.addMover(mover, &pt, NULL); + + scene->_actor9._moveDiff.y = 9 - (scene->_field126E / 2); + Common::Point pt2(di, 73 - (_field1E * 12)); + NpcMover *mover2 = new NpcMover(); + scene->_actor9.addMover(mover2, &pt2, NULL); + scene->_field126E = (scene->_field126E / 2) + (scene->_field126E % 2); + setDelay(17 - scene->_field126E); + } + break; + case 1: { + R2_GLOBALS._sound2.play(339); + if (scene->_actor8._mover) { + si = scene->_fieldAF8; + di = scene->_fieldB9E; + } else { + si = scene->_actor8._position.x; + di = scene->_actor9._position.x; + } + + scene->_actor7.sub1094ED(); + + scene->_actor8._moveDiff.y = 9 - (scene->_field126E / 2); + Common::Point pt(si, 73); + NpcMover *mover = new NpcMover(); + scene->_actor8.addMover(mover, &pt, NULL); + + scene->_actor9._moveDiff.y = 9 - (scene->_field126E / 2); + Common::Point pt2(di, 73); + NpcMover *mover2 = new NpcMover(); + scene->_actor9.addMover(mover2, &pt2, NULL); + + scene->_actor3.setFrame2(2); + } + break; + default: + break; + } +} + +bool Scene3500::Item4::startAction(CursorType action, Event &event) { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + if (scene->_field1286 == 0) + return true; + + if (scene->_field1286 != 4) + return SceneHotspot::startAction(action, event); + + R2_GLOBALS._sound2.play(14); + scene->sub107F71(_field34); + + return true; +} + +void Scene3500::Actor7::process(Event &event) { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + if (scene->_field1286 == 0) + return; + + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos))) { + _fieldAE = 1 + event.mousePos.y - _position.y; + event.eventType = EVENT_NONE; + } + + if ((event.eventType == EVENT_BUTTON_UP) && (_fieldAE != 0)) { + _fieldAE = 0; + event.handled = true; + if (scene->_action1._field24 == 0) + sub1094ED(); + } + + if (_fieldAE == 0) + return; + + R2_GLOBALS._sound2.play(338); + event.handled = true; + + int cx = event.mousePos.y - _fieldAE + 1; + if (_fieldA6 >= cx) { + if (_fieldA6 - _fieldAA <= cx) + sub109693(Common::Point(((_fieldA6 - cx) / 2) + _fieldA4 + ((_fieldA6 - cx) % 2), cx)); + else + sub109693(Common::Point(_fieldA4 + _fieldA8, _fieldA6 - _fieldAA)); + } else { + sub109693(Common::Point(_fieldA4, _fieldA6)); + } +} + +bool Scene3500::Actor7::startAction(CursorType action, Event &event) { + Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; + + if (scene->_field1286 == 0) + return true; + + if (scene->_field1286 == 4) + return false; + + return SceneActor::startAction(action, event); +} + +void Scene3500::postInit(SceneObjectList *OwnerList) { + byte tmpPal[768]; + Rect tmpRect; + + loadScene(1050); + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._v5589E.set(0, 0, 320, 200); + R2_GLOBALS._sound1.play(305); + R2_GLOBALS._player._characterIndex = R2_QUINN; + R2_GLOBALS._player._characterScene[1] = 3500; + R2_GLOBALS._player._characterScene[2] = 3500; + R2_GLOBALS._player._characterScene[3] = 3500; + _field1284 = 0; + _field1282 = 0; + _field1278 = 0; + _field1272 = 1; + _field1270 = 4; + _field126E = 4; + _field127A = 860; + _field127C = 891; + _rotation = R2_GLOBALS._scenePalette.addRotation(240, 254, -1); + _rotation->setDelay(0); + _rotation->_idxChange = 1; + + for (int i = 240; i <= 254; i++) { + int tmpIndex = _rotation->_currIndex - 240; + + if (tmpIndex > 254) + tmpIndex--; + + tmpPal[3 * i] = R2_GLOBALS._scenePalette._palette[3 * tmpIndex]; + tmpPal[(3 * i) + 1] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 1]; + tmpPal[(3 * i) + 2] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 2]; + } + + for (int i = 240; i <= 254; i++) { + R2_GLOBALS._scenePalette._palette[3 * i] = tmpPal[3 * i]; + R2_GLOBALS._scenePalette._palette[(3 * i) + 1] = tmpPal[(3 * i) + 1]; + R2_GLOBALS._scenePalette._palette[(3 * i) + 2] = tmpPal[(3 * i) + 2]; + } + + _actor7.sub109466(38, 165, 16, 32, _field1270); + _actor7.setDetails(3500, 6, 7, -1, 1, (SceneItem *)NULL); + R2_GLOBALS._sound1.play(276); + + _item4._field34 = 88; + _item4.setDetails(88, 3500, 18, 10, -1); + + _item5._field34 = 112; + _item5.setDetails(112, 3500, 9, 10, -1); + + _item6._field34 = 104; + _item6.setDetails(104, 3500, 15, 10, -1); + + _item7._field34 = 96; + _item7.setDetails(96, 3500, 12, 10, -1); + + _actor8.postInit(); + _actor8.setup(10501, 1, 1); + _actor8.setPosition(Common::Point(160, 73)); + _actor8.fixPriority(1); + + _actor9.postInit(); + _actor9.setup(1050, 2, 1); + _actor9.setPosition(Common::Point(-160, 73)); + _actor9.fixPriority(11); + _actor9.hide(); + + _item2.setDetails(27, 3500, 21, -1, -1); + _item3.setDetails(Rect(160, 89, 299, 182), 3500, 3, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 3500, 0, -1, 2, 1, NULL); + + _actor1.postInit(); + _field1276 = 1; + _actor1.setup(1004, 1, _field1276); + _actor1.setPosition(Common::Point(230, 135)); + _actor1.fixPriority(200); + _actor1._frameChange = 1; + + _actor5.postInit(); + _actor5.setup(1004, 3, 1); + _actor5.setPosition(Common::Point(117, 163)); + _actor5.fixPriority(200); + _actor5.hide(); + + _actor4.postInit(); + _actor4.setup(1004, 3, 2); + _actor4.setPosition(Common::Point(126, 163)); + _actor4.fixPriority(200); + + _actor6.postInit(); + _actor6.setup(1004, 3, 3); + _actor6.setPosition(Common::Point(135, 163)); + _actor6.fixPriority(200); + _actor6.hide(); + + _actor2.postInit(); + _actor2.setup(1004, 4, _field126E + 1); + _actor2.setPosition(Common::Point(126, 137)); + _actor2.fixPriority(200); + + _actor3.postInit(); + _actor3.setup(1004, 5, 2); + _actor3.setPosition(Common::Point(126, 108)); + _actor3.fixPriority(200); + + tmpRect.set(160, 89, 299, 182); + _unkObj1.sub9EDE8(tmpRect); + _unkObj1.sub51AE9(2); + _unkObj1.sub51AFD(Common::Point(_field127A, _field127C)); + + _action1._field24 = 0; + warning("gfx_set_pane_p()"); + _unkObj1.sub51B02(); + warning("gfx_set_pane_p()"); + _field1286 = 1; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._uiEnabled = false; + R2_GLOBALS._player._canWalk = false; +} + +void Scene3500::remove() { + _rotation->remove(); + R2_GLOBALS._sound2.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene3500::signal() { + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + _field1286 = 1; +} + +void Scene3500::process(Event &event) { + if (_field1286 == 0) + return; + + if (event.eventType == EVENT_KEYPRESS) { + switch (event.kbd.keycode) { + case Common::KEYCODE_1: + warning("FIXME: keycode = 0x4700"); + R2_GLOBALS._sound2.play(338); + sub107F71(16); + event.handled = true; + break; + case Common::KEYCODE_2: + warning("FIXME: keycode = 0x4800"); + R2_GLOBALS._sound2.play(14, NULL, 63); + sub107F71(88); + event.handled = true; + break; + case Common::KEYCODE_3: + warning("FIXME: keycode = 0x4900"); + if (_field1270 < 16) + R2_GLOBALS._sound2.play(338); + sub107F71(1); + event.handled = true; + break; + case Common::KEYCODE_4: + warning("FIXME: keycode = 0x4B00"); + R2_GLOBALS._sound2.play(14, NULL, 63); + sub107F71(112); + event.handled = true; + break; + case Common::KEYCODE_5: + warning("FIXME: keycode = 0x4D00"); + R2_GLOBALS._sound2.play(14, NULL, 63); + sub107F71(96); + event.handled = true; + break; + case Common::KEYCODE_6: + warning("FIXME: keycode = 0x4F00"); + R2_GLOBALS._sound2.play(338); + sub107F71(0); + event.handled = true; + break; + case Common::KEYCODE_7: + warning("FIXME: keycode = 0x5000"); + R2_GLOBALS._sound2.play(14, NULL, 63); + sub107F71(104); + event.handled = true; + break; + case Common::KEYCODE_8: + warning("FIXME: keycode = 0x5100"); + if (_field1270 != 0) + R2_GLOBALS._sound2.play(338); + sub107F71(-1); + event.handled = true; + break; + case Common::KEYCODE_9: + warning("FIXME: keycode = 0x5200"); + R2_GLOBALS._sound2.play(338); + sub107F71(8); + event.handled = true; + break; + case Common::KEYCODE_0: + warning("FIXME: keycode = 0x5300"); + R2_GLOBALS._sound2.play(338); + sub107F71(4); + event.handled = true; + break; + default: + break; + } + } + + if (!event.handled) + _actor7.process(event); + + if (!event.handled) + _item4.process(event); + + if (!event.handled) + _item5.process(event); + + if (!event.handled) + _item6.process(event); + + if (!event.handled) + _item7.process(event); + + Scene::process(event); +} + +void Scene3500::dispatch() { + Rect tmpRect; + Scene::dispatch(); + if (((_actor1._frame % 2) == 0) && (_action1._field24 == 0)) { + _actor1.setFrame(_actor1.changeFrame()); + _field1276 = _actor1._frame; + } + int oldField1278; + if ((_field1278 != 0) && (_action1._field24 == 0)) { + oldField1278 = _field1278; + _field1278 = 0; + sub107F71(oldField1278); + } + + if (!_rotation) + return; + + int var_field127A = 0; + int di = 0; + int var_4 = 0; + int var_6 = 0; + int var_8 = 0; + int var_a = 0; + int dx = 0; + int tmpVar = 0; + + if ((_field126E == 0) && (_field1282 == 0)) { + if (_field1284 == 2) + R2_GLOBALS._sceneManager.changeScene(1000); + } else { + _field1282 = 0; + tmpRect.set(160, 89, 299, 182); + + var_field127A = _field127A; + di = _field127C; + var_4 = _unkObj1.sub1097C9(70) - 70; + var_6 = _unkObj1.sub1097EF(_field127C + 46) - 46; + var_8 = abs(var_4 - var_field127A); + var_a = abs(var_6 - di); + dx = 0; + + switch (_field1276) { + case 0: + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, 46)); + if ( ((tmpVar == 2) || (tmpVar == 3) || (tmpVar == 6) || (tmpVar == 1)) + || (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5) || (tmpVar == 14) || (tmpVar == 15)) && (var_8 > 3)) ) { + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_6 = _unkObj1.sub1097EF(di + 46) - 46; + di = _field127C - _field126E; + dx = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4)) && (tmpVar != dx)) { + di = var_6; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 11) && (tmpVar != dx)) { + di = var_6 + 3; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_6 = _unkObj1.sub1097EF(di + 46) - 46; + var_a = abs(var_6 - di); + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + + if ( (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4)) && (di <= var_6) && (_field127C>= var_6)) + || (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5) || (tmpVar == 14) || (tmpVar == 15)) && (_field126E >= var_a) && (_field126E > 3) && (_action1._field24 != 0)) ) { + di = var_6; + if ((tmpVar != 25) && (tmpVar != 26) && (tmpVar != 5) && (tmpVar != 14) && (tmpVar == 15)) + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 11) && (var_6 + 3 >= di) && (_field127C >= var_6 + 3)) { + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5) || (tmpVar == 14) || (tmpVar == 15)) && (var_8 != 0) && (var_8 <= 3)) { + var_field127A = var_4; + R2_GLOBALS._sound2.play(339); + } else { + // Nothing + } + } + } + break; + case 2: + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if ( ((tmpVar == 12) || (tmpVar == 13) || (tmpVar == 11) || (tmpVar == 16) || (tmpVar == 31)) + || (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4)) && (var_a > 3)) ) { + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_4 = _unkObj1.sub1097C9(var_field127A + 70) - 70; + var_field127A = _field127A + _field126E; + dx = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if (((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15)) && (tmpVar != dx)) { + var_field127A = var_4; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 6) && (tmpVar != dx)) { + var_field127A = var_4 - 5; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_4 = _unkObj1.sub1097C9(var_field127A + 70) - 70; + var_8 = abs(var_field127A - var_4); + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, tmpVar + 46)); + if ( (((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15)) && (var_field127A >= var_4) && (_field127A <= var_4)) + || (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4)) && (_field126E >= var_8) && (_field126E <= 3) && (_action1._field24 != 0)) ) { + var_field127A = var_4; + if ((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4)) + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 6) && (var_4 - 5 <= var_field127A) && (_field127A <= var_4 - 5)) { + var_field127A = var_4 - 5; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4)) && (var_a != 0) && (var_a <= 3)) { + di = var_6; + R2_GLOBALS._sound2.play(339); + } else { + // Nothing + } + } + } + break; + case 4: + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if ( ((tmpVar == 2) || (tmpVar == 3) || (tmpVar == 6) || (tmpVar == 1)) + || (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4) || (tmpVar == 14) || (tmpVar == 15)) && (var_8 > 3)) ) { + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_6 = _unkObj1.sub1097EF(di + 46) - 46; + di = _field127C + _field126E; + dx = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5)) && (tmpVar == dx)) { + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 16) && (tmpVar == dx)) { + di = var_6 - 3; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 31) && (tmpVar == dx)) { + di = var_6 + 4; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_6 = _unkObj1.sub1097EF(di + 46) - 46; + var_a = abs(di - var_6); + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if ( (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5)) && (di >= var_6) && (_field127C <= var_6)) + || (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4) || (tmpVar == 14) || (tmpVar == 15)) && (_field126E >= var_a) && (_field126E <= 3) && (_action1._field24 != 0)) ){ + if ((tmpVar != 23) && (tmpVar != 24) && (tmpVar != 4) && (tmpVar != 14) && (tmpVar != 15)) + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 16) && (var_6 - 3 <= di) && (_field127C <= var_6 - 3)) { + di = var_6 - 3; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 31) && (var_6 + 4 <= di) && (_field127C <= var_6 + 4)) { + di = var_6 + 4; + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + if ((var_field127A == 660) && (_field126E + 306 <= di) && (di <= 307)) + ++_field1284; + else + R2_GLOBALS._sound2.play(339); + } else if (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4) || (tmpVar == 14) || (tmpVar == 15)) && (var_8 != 0) && (var_8 <= 3)) { + var_field127A = var_4; + R2_GLOBALS._sound2.play(339); + } else { + // Nothing + } + } + } + break; + case 6: + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if ( ((tmpVar == 12) || (tmpVar == 13) || (tmpVar == 11) || (tmpVar == 16) || (tmpVar == 31)) + || (((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15) || (tmpVar == 5) || (tmpVar == 4)) && (var_a > 3)) ) { + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_4 = _unkObj1.sub1097C9(var_field127A + 70) - 70; + var_field127A = _field127A - _field126E; + dx = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14)) && (tmpVar != dx)) { + var_field127A = var_4; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 1) && (tmpVar != dx)) { + var_field127A = var_4 + 5; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else { + var_4 = _unkObj1.sub1097C9(var_field127A + 70) - 70; + var_8 = abs(var_4 - var_field127A); + tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); + if ( (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14)) && (var_field127A <= var_4) && (_field127A >= var_4)) + || (((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15) || (tmpVar == 5) || (tmpVar == 4)) && (_field126E >= var_8) && (_field126E <= 3) && (_action1._field24 != 0)) ) { + var_field127A = var_4; + if ((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15) || (tmpVar == 5) || (tmpVar == 4)) + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if ((tmpVar == 1) && (var_field127A >= var_4 + 5) && (_field127A >= var_4 + 5)) { + var_field127A = var_4 + 5; + R2_GLOBALS._sound2.play(339); + _rotation->_idxChange = 0; + _field1270 = 0; + _field126E = 0; + _field1272 = 0; + if (_action1._field24 == 0) + _actor8.hide(); + } else if (((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15) || (tmpVar == 5) || (tmpVar == 4)) && (var_a != 0) && (var_a <= 3)) { + di = var_6; + R2_GLOBALS._sound2.play(339); + } else { + // Nothing + } + } + } + break; + default: + break; + } + + if (_field1284 < 2) { + _field127A = var_field127A; + _field127C = di; + if (_unkObj1.sub109C5E(_field127A, _field127C) != 0) { + _field1272 = 0; + _field126E = 0; + _field1270 = 0; + _rotation->setDelay(0); + _rotation->_idxChange = 0; + } + warning("gfx_set_pane_p"); + _unkObj1.sub51B02(); + if (_field1284 != 0) + ++_field1284; + } + } + + if (_field1272 == 0) { + if (_field126E != _field1270) { + if (_field126E >= _field1270) { + if (_field126E == 1) { + if (_action1._field24 != 0) { + if ( ((_field1276 == 1) && (var_8 == 0) && (var_a != 0) && (var_a <= 3) && ((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5) || (tmpVar == 14) || (tmpVar == 15))) + || ((_field1276 == 3) && (var_a == 0) && (var_8 != 0) && (var_8 <= 3) && ((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4))) + || ((_field1276 == 5) && (var_8 == 0) && (var_a != 0) && (var_a <= 3) && ((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4) || (tmpVar == 14) || (tmpVar == 15))) + || ((_field1276 == 7) && (var_a == 0) && (var_8 != 0) && (var_8 <= 3) && ((tmpVar == 26) || (tmpVar == 24) || (tmpVar == 15) || (tmpVar == 5) || (tmpVar == 4))) ){ + _field126E = 1; + } else + _field126E--; + } else + _field126E--; + } else + _field126E--; + } else + ++_field126E; + _field1272 = 1; + } + _actor2.setFrame2(_field126E); + } + + if (_field1272 == 1) { + if (_field126E == 0) + _rotation->_idxChange = 0; + else if (_field126E > 8) + _rotation->_idxChange = 2; + else + _rotation->_idxChange = 1; + } + + if (_field1272 != 0) + _field1272--; + + if (_field126E != 0) { + R2_GLOBALS._player._uiEnabled = false; + if (_field126E != _field1270) + _aSound1.play(276); + } else { + R2_GLOBALS._player._uiEnabled = true; + _aSound1.fadeOut2(NULL); + } + + if (_rotation->_currIndex != _field1274) + _field1274 = _rotation->_currIndex; +} + /*-------------------------------------------------------------------------- * Scene 3600 - * diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 8a51aa5251..6088c88479 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -571,6 +571,126 @@ public: virtual void synchronize(Serializer &s); }; +class Scene3500 : public SceneExt { + class Action1: public Action { + public: + int _field1E; + int _field20; + int _field22; + int _field24; + + Action1(); + virtual void synchronize(Serializer &s); + void sub108670(int arg1); + void sub108732(int arg1); + virtual void signal(); + virtual void dispatch(); + }; + class Action2: public Action { + public: + int _field1E; + + Action2(); + virtual void synchronize(Serializer &s); + void sub10831F(int arg1); + + virtual void signal(); + }; + + class Item4 : public NamedHotspot { + public: + int _field34; + + Item4(); + virtual void synchronize(Serializer &s); + + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor7 : public SceneActor { + public: + int _fieldA4; + int _fieldA6; + int _fieldA8; + int _fieldAA; + int _fieldAC; + int _fieldAE; + + Actor7(); + virtual void synchronize(Serializer &s); + + void sub109466(int arg1, int arg2, int arg3, int arg4, int arg5); + void sub1094ED(); + void sub109663(int arg1); + void sub109693(Common::Point Pt); + + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor8 : public SceneActor { + public: + // TODO: double check if nothing specific is present, then remove this class + }; + + class UnkObject3500 : public UnkObject1200 { + public: + int sub1097C9(int arg1); + int sub1097EF(int arg1); + int sub109C09(Common::Point pt); + int sub109C5E(int &x, int &y); + }; +public: + Action1 _action1; + Action2 _action2; + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + Item4 _item4; + Item4 _item5; + Item4 _item6; + Item4 _item7; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + SceneActor _actor5; + SceneActor _actor6; + Actor7 _actor7; + Actor8 _actor8; + Actor8 _actor9; + ASoundExt _aSound1; + UnkObject3500 _unkObj1; + SequenceManager _sequenceManager; + + int _fieldAF8; + int _fieldB9E; + PaletteRotation *_rotation; + int _field126E; + int _field1270; + int _field1272; + int _field1274; + int _field1276; + int _field1278; + int _field127A; + int _field127C; + int _field127E; + int _field1280; + int _field1282; + int _field1284; + int _field1286; + + Scene3500(); + void sub107F71(int arg1); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + class Scene3600 : public SceneExt { class Action3600: public ActionExt { public: -- cgit v1.2.3 From c1352a1ae582a092263f37604557906ae2346bc4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 Jan 2012 17:17:30 +0100 Subject: TSAGE - R2R: Implement scene 1750 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 302 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 64 +++++ engines/tsage/ringworld2/ringworld2_scenes3.cpp | 2 +- 4 files changed, 368 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 8df0a5bda2..7fca363350 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -132,7 +132,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1700: return new Scene1700(); case 1750: - error("Missing scene %d from group 1", sceneNumber); + return new Scene1750(); case 1800: return new Scene1800(); case 1850: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 9a9112e3fc..b7ed9aa264 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -5448,6 +5448,308 @@ void Scene1700::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 1750 - + * + *--------------------------------------------------------------------------*/ +Scene1750::Actor4::Actor4() { + _fieldA4 = 0; + _fieldA6 = 0; + _fieldA8 = 0; + _fieldAA = 0; + _fieldAC = 0; + _fieldAE = 0; +} + +void Scene1750::Actor4::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_fieldA6); + s.syncAsSint16LE(_fieldA8); + s.syncAsSint16LE(_fieldAA); + s.syncAsSint16LE(_fieldAC); + s.syncAsSint16LE(_fieldAE); +} + +Scene1750::Actor5::Actor5() { + _fieldA4 = 0; +} + +void Scene1750::Actor5::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); +} + +Scene1750::Scene1750() { + _field412 = 0; + _field413 = 0; + _field415 = 0; + _field417 = 0; + _field419 = 0; + _field41B = 0; + _field41D = 0; +} + +void Scene1750::synchronize(Serializer &s) { + SceneExt::synchronize(s); + SYNC_POINTER(_rotation); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field413); + s.syncAsSint16LE(_field415); + s.syncAsSint16LE(_field417); + s.syncAsSint16LE(_field419); + s.syncAsSint16LE(_field41B); + s.syncAsSint16LE(_field41D); +} + +void Scene1750::Actor4::subB1A76(int arg1, int arg2, int arg3, int arg4, int arg5) { + _fieldA4 = arg1; + _fieldAE = 0; + _fieldA6 = arg2; + _fieldA8 = arg3; + _fieldAA = arg4; + _fieldAC = arg5; + + postInit(); + setup(1750, 1, 1); + fixPriority(255); + setPosition(Common::Point(_fieldA6, _fieldA8 + ((_fieldAA * (arg1 - 1)) / (_fieldAC - 1)))); +} + +void Scene1750::Actor4::subB1B27() { + Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene; + + int tmpVar = (_fieldAA / (_fieldAC - 1)) / 2; + int tmpVar2 = ((_position.y - _fieldA8 + tmpVar) * _fieldAC) / (_fieldAA + 2 * tmpVar); + + setPosition(Common::Point(_fieldA6, _fieldA8 + ((_fieldAA * tmpVar2) / (_fieldAC - 1)))); + scene->_field415 = scene->_field412 * tmpVar2; +} + +void Scene1750::Actor4::remove() { + // Function kept to match IDA. Could be removed. + SceneActor::remove(); +} + +void Scene1750::Actor4::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos))) { + _fieldAE = 1; + event.eventType = EVENT_NONE; + } + + if ((event.eventType == EVENT_BUTTON_UP) && (_fieldAE != 0)) { + _fieldAE = 0; + event.handled = true; + addMover(NULL); + subB1B27(); + } + + if (_fieldAE != 0) { + event.handled = true; + if (event.mousePos.y >= _fieldA8) { + if (_fieldA8 + _fieldAA >= event.mousePos.y) + setPosition(Common::Point(_fieldA6, event.mousePos.y)); + else + setPosition(Common::Point(_fieldA6, _fieldA8 + _fieldAA)); + } else { + setPosition(Common::Point(_fieldA6, _fieldA8)); + } + } +} + +bool Scene1750::Actor4::startAction(CursorType action, Event &event) { + if (action == CURSOR_USE) + return SceneActor::startAction(action, event); + + return false; +} + +bool Scene1750::Actor5::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene; + + switch (_fieldA4) { + case 1: + show(); + scene->_actor6.hide(); + if (scene->_field415 < 0) + scene->_field415 ^= 0xFFFE; + scene->_field412 = 1; + break; + case 2: + show(); + scene->_actor5.hide(); + if (scene->_field415 > 0) + scene->_field415 ^= 0xFFFE; + scene->_field412 = -1; + break; + case 3: + if (scene->_rotation->_idxChange == 0) { + show(); + R2_GLOBALS._sceneManager.changeScene(1700); + } else { + scene->_field415 = 0; + scene->_actor4._moveRate = 20; + scene->_actor5._moveDiff.y = 1; + Common::Point pt(286, 143); + NpcMover *mover = new NpcMover(); + scene->_actor4.addMover(mover, &pt, NULL); + } + default: + break; + } + + return true; +} + +void Scene1750::postInit(SceneObjectList *OwnerList) { + loadScene(1750); + R2_GLOBALS._sound1.play(115); + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._v5589E.set(0, 0, 320, 200); + SceneExt::postInit(); + + R2_GLOBALS._player._characterScene[1] = 1750; + R2_GLOBALS._player._characterScene[2] = 1750; + R2_GLOBALS._player._oldCharacterScene[1] = 1750; + R2_GLOBALS._player._oldCharacterScene[2] = 1750; + + _rotation = R2_GLOBALS._scenePalette.addRotation(224, 254, 1); + _rotation->setDelay(0); + _rotation->_idxChange = 0; + _rotation->_countdown = 2; + + switch ((R2_GLOBALS._v565F6 + 2) % 4) { + case 0: + _rotation->_currIndex = 247; + break; + case 1: + _rotation->_currIndex = 235; + break; + case 2: + _rotation->_currIndex = 239; + break; + case 3: + _rotation->_currIndex = 243; + break; + default: + break; + } + + byte tmpPal[768]; + + for (int i = 224; i < 255; i++) { + int tmpIndex = _rotation->_currIndex - 224; + if (tmpIndex > 254) + tmpIndex -= 31; + tmpPal[3 * i] = R2_GLOBALS._scenePalette._palette[3 * tmpIndex]; + tmpPal[(3 * i) + 1] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 1]; + tmpPal[(3 * i) + 2] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 2]; + } + + for (int i = 224; i < 255; i++) { + R2_GLOBALS._scenePalette._palette[3 * i] = tmpPal[3 * i]; + R2_GLOBALS._scenePalette._palette[(3 * i) + 1] = tmpPal[(3 * i) + 1]; + R2_GLOBALS._scenePalette._palette[(3 * i) + 2] = tmpPal[(3 * i) + 2]; + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.enableControl(); + + _actor3.postInit(); + _actor3.setup(1750, 3, 1); + _actor3.setPosition(Common::Point(49, 185)); + _actor3.fixPriority(7); + _actor3.setDetails(1750, 30, -1, -1, 1, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(1750, 2, 1); + _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._v565F6 % 800) * 4) - 1440)); + _actor1.fixPriority(8); + + _actor2.postInit(); + _actor2.setup(1750, 1, 4); + + int tmpVar = abs(_actor1._position.y - 158) / 100; + + if (tmpVar >= 8) + _actor2.hide(); + else if (_actor1._position.y <= 158) + _actor2.setPosition(Common::Point(137, (tmpVar * 7) + 122)); + else + _actor2.setPosition(Common::Point(148, (tmpVar * 7) + 122)); + + _actor4.subB1A76(1, 286, 143, 41, 15); + _actor4.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL); + + _actor5.postInit(); + _actor5._fieldA4 = 1; + _actor5.setup(1750, 1, 2); + _actor5.setPosition(Common::Point(192, 140)); + _actor5.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); + + _actor6.postInit(); + _actor6._fieldA4 = 2; + _actor6.setup(1750, 1, 3); + _actor6.setPosition(Common::Point(192, 163)); + _actor6.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); + _actor6.hide(); + + _actor7.postInit(); + _actor7._fieldA4 = 3; + _actor7.setup(1750, 1, 5); + _actor7.setPosition(Common::Point(230, 183)); + _actor7.setDetails(1750, 27, 1, -1, 1, (SceneItem *) NULL); + + _field412 = 1; + _field417 = 0; + _field413 = 0; + _field415 = 0; + _field419 = ((_rotation->_currIndex - 218) / 4) % 4; + + _item2.setDetails(Rect(129, 112, 155, 175), 1750, 21, -1, -1, 1, NULL); + _item3.setDetails(Rect(93, 122, 126, 172), 1750, 15, -1, -1, 1, NULL); + _item4.setDetails(Rect(3, 3, 157, 99), 1750, 9, -1, -1, 1, NULL); + _item5.setDetails(Rect(162, 3, 316, 99), 1750, 12, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 1750, 6, 1, -1, 1, NULL); +} + +void Scene1750::remove() { + _rotation->remove(); + + if (R2_GLOBALS._v565F6 == 2400) + R2_GLOBALS._v565F6 = 2399; + + if (R2_GLOBALS._v565F6 == -2400) + R2_GLOBALS._v565F6 = -2399; + + R2_GLOBALS._v565FA = R2_GLOBALS._v565F6; + + SceneExt::remove(); + R2_GLOBALS._sound1.fadeOut2(NULL); + R2_GLOBALS._v5589E.top = 3; + R2_GLOBALS._v5589E.bottom = 168; + R2_GLOBALS._v58CE2 = 1; +} + +void Scene1750::signal() { + R2_GLOBALS._player.enableControl(); +} + +void Scene1750::process(Event &event) { + Scene::process(event); + if (!event.handled) + _actor4.process(event); +} + +void Scene1750::dispatch() {} + /*-------------------------------------------------------------------------- * Scene 1800 - * diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index da68bffcab..be4f32ac3f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -561,6 +561,70 @@ public: virtual void signal(); }; +class Scene1750 : public SceneExt { + class Actor4 : public SceneActor { + public: + int _fieldA4; + int _fieldA6; + int _fieldA8; + int _fieldAA; + int _fieldAC; + int _fieldAE; + + Actor4(); + virtual void synchronize(Serializer &s); + void subB1A76(int arg1, int arg2, int arg3, int arg4, int arg5); + void subB1B27(); + + virtual void remove(); + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor5 : public SceneActor { + public: + int _fieldA4; + + Actor5(); + virtual void synchronize(Serializer &s); + + virtual bool startAction(CursorType action, Event &event); + }; + +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Actor4 _actor4; + Actor5 _actor5; + Actor5 _actor6; + Actor5 _actor7; + SequenceManager _sequenceManager; + PaletteRotation *_rotation; + + int _field412; + int _field413; + int _field415; + int _field417; + int _field419; + int _field41B; + int _field41D; + + Scene1750(); + virtual void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + class Scene1800 : public SceneExt { class Hotspot5 : public NamedHotspot { public: diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index d462cb11f5..e627d9cbf5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -3092,10 +3092,10 @@ Scene3500::Scene3500() { void Scene3500::synchronize(Serializer &s) { SceneExt::synchronize(s); + SYNC_POINTER(_rotation); s.syncAsSint16LE(_fieldAF8); s.syncAsSint16LE(_fieldB9E); - _rotation->synchronize(s); s.syncAsSint16LE(_field126E); s.syncAsSint16LE(_field1270); s.syncAsSint16LE(_field1272); -- cgit v1.2.3 From d34cf096081dd3f5b12d129e9d50172cf76e6179 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 Jan 2012 17:23:43 +0100 Subject: TSAGE: R2R - Implement scene 525 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 ++ engines/tsage/ringworld2/ringworld2_scenes0.cpp | 26 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 10 ++++++++++ 3 files changed, 38 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 7fca363350..f5bbd2eee5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -81,6 +81,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Lander Bay 2 Storage return new Scene500(); case 525: + // Cutscene - Walking in hall + return new Scene525(); case 600: case 700: error("Missing scene %d from group 0", sceneNumber); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 784968b5cb..dcebd3c906 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -4440,6 +4440,32 @@ void Scene500::signal() { } } + +/*-------------------------------------------------------------------------- + * Scene 525 - Cutscene - Walking in hall + * + *--------------------------------------------------------------------------*/ +void Scene525::postInit(SceneObjectList *OwnerList) { + loadScene(525); + R2_GLOBALS._v58CE2 = 0; + SceneExt::postInit(); + + R2_GLOBALS._sound1.play(105); + + _actor1.postInit(); + _actor1._effect = 1; + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + setAction(&_sequenceManager, this, 525, &R2_GLOBALS._player, &_actor1, NULL); +} + +void Scene525::signal() { + R2_GLOBALS._sceneManager.changeScene(1525); +} + /*-------------------------------------------------------------------------- * Scene 800 - Sick Bay * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index c7b0ecfc83..581958975d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -521,6 +521,16 @@ public: virtual void signal(); }; +class Scene525: public SceneExt { +public: + SceneActor _actor1; + SequenceManager _sequenceManager; + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void signal(); + +}; + class Scene800: public SceneExt { /* Items */ class Button: public NamedHotspot { -- cgit v1.2.3 From 3e8547ebc1d24fc4a120792e3d1b99c982cf1c37 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 Jan 2012 23:51:37 +0100 Subject: TSAGE: R2R - Implement scene 600 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 464 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 62 ++++ 3 files changed, 527 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f5bbd2eee5..16fc460a11 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -84,6 +84,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Walking in hall return new Scene525(); case 600: + return new Scene600(); case 700: error("Missing scene %d from group 0", sceneNumber); case 800: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index dcebd3c906..51f7cd8804 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -4466,6 +4466,470 @@ void Scene525::signal() { R2_GLOBALS._sceneManager.changeScene(1525); } +/*-------------------------------------------------------------------------- + * Scene 600 - + * + *--------------------------------------------------------------------------*/ +Scene600::Scene600() { + _field412 = 0; + for (int i = 0; i < 256; i++) + _fieldAD2[i] = 0; +} + +void Scene600::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + for (int i = 0; i < 256; i++) + s.syncAsByte(_fieldAD2[i]); +} + +bool Scene600::Item1::startAction(CursorType action, Event &event) { + if ((action != R2_NEGATOR_GUN) || (!R2_GLOBALS.getFlag(5)) || (R2_GLOBALS.getFlag(8))) + return SceneHotspot::startAction(action, event); + + SceneItem::display(600, 32, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; +} + +bool Scene600::Item4::startAction(CursorType action, Event &event) { + if ((action != R2_NEGATOR_GUN) || (!R2_GLOBALS.getFlag(1))) + return SceneHotspot::startAction(action, event); + + if ((R2_GLOBALS.getFlag(5)) && (!R2_GLOBALS.getFlag(8))) { + SceneItem::display(600, 32, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + } + + if (R2_GLOBALS.getFlag(5)) { + SceneItem::display(600, 30, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + } + + if ((!R2_GLOBALS.getFlag(8)) || (R2_GLOBALS.getFlag(9))) + return SceneHotspot::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; + + scene->_object1.setup2(603, 3, 1, 239, 54, 10, 0); + scene->_actor3.postInit(); + scene->_actor2.postInit(); + + scene->_sceneMode = 612; + setAction(&scene->_sequenceManager1, this, 612, &scene->_actor3, &scene->_actor2, R2_GLOBALS._player, NULL); + return true; +} + +void Scene600::Actor4::signal() { + Common::Point pt(36, 177 + R2_GLOBALS._randomSource.getRandomNumber(5)); + NpcMover *mover = new NpcMover(); + addMover(mover, &pt, this); +} + +bool Scene600::Actor4::startAction(CursorType action, Event &event) { + if ((action >= CURSOR_WALK) && (action < R2CURSORS_START)) + // Only action cursors + return SceneActor::startAction(action, event); + + return false; +} + +void Scene600::Actor4::draw() { + warning("TODO: Actor4::draw()"); + SceneActor::draw(); +} + +bool Scene600::Actor5::startAction(CursorType action, Event &event) { + if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) + return false; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; + + if ((R2_INVENTORY.getObjectScene(R2_CLAMP) == 600) && (!R2_GLOBALS.getFlag(6))) { + R2_GLOBALS._player.disableControl(); + scene->_actor6.setDetails(600, 11, -1, -1, 3, (SceneItem *) NULL); + R2_GLOBALS.setFlag(6); + scene->_sceneMode = 609; + scene->setAction(&scene->_sequenceManager1, scene, 609, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor6, &scene->_actor1, NULL); + return true; + } + + if (_frame != 1) + return false; + + if (!R2_GLOBALS.getFlag(6)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 616; + scene->setAction(&scene->_sequenceManager1, scene, 616, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor6, NULL); + return true; + } + + if ((R2_GLOBALS.getFlag(9)) && (R2_INVENTORY.getObjectScene(R2_9) == 600)) + SceneItem::display(600, 31, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 601; + scene->setAction(&scene->_sequenceManager1, scene, 601, &R2_GLOBALS._player, &scene->_actor5, NULL); + } + return true; +} + +bool Scene600::Actor6::startAction(CursorType action, Event &event) { + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; + + if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) { + switch (action) { + case R2_9: + if (R2_GLOBALS.getFlag(6)) { + if (R2_GLOBALS.getFlag(8)) { + SceneItem::display(600, 29, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + } else { + R2_GLOBALS._player.disableControl(); + scene->_actor8.postInit(); + scene->_actor8.setDetails(600, 20, -1, -1, 4, &scene->_actor6); + scene->_sceneMode = 607; + scene->setAction(&scene->_sequenceManager1, scene, 607, &R2_GLOBALS._player, &scene->_actor8, NULL); + return true; + } + } else { + return SceneActor::startAction(action, event); + } + break; + case R2_AEROSOL: + if (R2_GLOBALS.getFlag(5)) { + SceneItem::display(600, 28, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + } else { + R2_GLOBALS._player.disableControl(); + scene->_actor7.postInit(); + scene->_actor7.setDetails(600, 27, -1, -1, 5, &scene->_actor6); + + scene->_actor4.postInit(); + scene->_actor4.setup(601, 3, 1); + scene->_actor4._effect = 3; + scene->_actor4._moveDiff = Common::Point(1, 1); + scene->_actor4._moveRate = 2; + scene->_actor4._numFrames = 3; + scene->_actor4.setDetails(600, 24, 25, 26, 5, &scene->_actor7); + + scene->_sceneMode = 605; + + scene->setAction(&scene->_sequenceManager1, scene, 605, &R2_GLOBALS._player, &scene->_actor7, &scene->_actor4, &scene->_actor5, NULL); + return true; + } + break; + case R2_CLAMP: + if (R2_GLOBALS.getFlag(5)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 606; + scene->setAction(&scene->_sequenceManager1, scene, 606, &R2_GLOBALS._player, &scene->_actor6, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } + break; + default: + return false; + break; + } + } else if (action != CURSOR_USE) { + if (R2_GLOBALS.getFlag(5)) { + return SceneActor::startAction(action, event); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 610; + scene->setAction(&scene->_sequenceManager1, scene, 610, &scene->_actor1, &R2_GLOBALS._player, NULL); + return true; + } + } else + return SceneActor::startAction(action, event); +} + +bool Scene600::Actor7::startAction(CursorType action, Event &event) { + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; + + if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) { + return false; + } else if (action == CURSOR_USE) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 614; + scene->setAction(&scene->_sequenceManager1, scene, 614, &R2_GLOBALS._player, &scene->_actor7, NULL); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +bool Scene600::Actor8::startAction(CursorType action, Event &event) { + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; + + if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(9) == 600)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 615; + scene->setAction(&scene->_sequenceManager1, scene, 615, &R2_GLOBALS._player, &scene->_actor8, NULL); + } else if ((action == R2_SONIC_STUNNER) && (R2_INVENTORY.getObjectScene(9) == 600) && (R2_GLOBALS._v565F1[1] == 2) && (!R2_GLOBALS.getFlag(8))){ + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 608; + scene->setAction(&scene->_sequenceManager1, scene, 608, &R2_GLOBALS._player, &scene->_actor4, NULL); + } else { + return SceneActor::startAction(action, event); + } + + return true; +} + +void Scene600::postInit(SceneObjectList *OwnerList) { + loadScene(600); + SceneExt::postInit(); + R2_GLOBALS.setFlag(39); + R2_GLOBALS._walkRegions.enableRegion(3); + _field412 = 0; + + warning("FIXME: loop to initialize _fieldAD2[]"); + + _actor5.postInit(); + _actor5.setVisage(600); + _actor5.setPosition(Common::Point(29, 147)); + _actor5.fixPriority(10); + _actor5.setDetails(300, 3, -1, -1, 1, (SceneItem *) NULL); + + _actor6.postInit(); + _actor6.setPosition(Common::Point(246, 41)); + + if (R2_INVENTORY.getObjectScene(9) == 600) { + _actor8.postInit(); + _actor8.setup(602, 5, 1); + _actor8.setPosition(Common::Point(246, 41)); + _actor8.setDetails(600, 20, -1, -1, 1, (SceneItem *) NULL); + switch (R2_GLOBALS._v565F1[1] - 2) { + case 0: + R2_GLOBALS._sound4.play(45); + break; + case 1: + R2_GLOBALS._sound4.play(4); + break; + case 2: + R2_GLOBALS._sound4.play(5); + break; + case 3: + R2_GLOBALS._sound4.play(6); + break; + default: + break; + } + } + + if (R2_GLOBALS.getFlag(6)) { + _actor6.setup(602, 7, 1); + _actor6.setDetails(600, 11, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor6.setup(600, 2, 1); + _actor6.setDetails(600, 10, -1, -1, 1, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(600, 3, 5); + _actor1.setPosition(Common::Point(223, 51)); + _actor1.fixPriority(200); + } + + if (! R2_GLOBALS.getFlag(9)) + _object1.setup2(603, 1, 1, 244, 50, 10, 0); + + if (R2_GLOBALS.getFlag(5)) { + if (R2_INVENTORY.getObjectScene(12) == 600) { + _actor7.postInit(); + _actor7.setup(602, 2, 2); + _actor7.setPosition(Common::Point(189, 95)); + _actor7.setDetails(600, 27, -1, -1, 1, (SceneItem *) NULL); + } + + if (R2_GLOBALS.getFlag(8)) { + if (R2_GLOBALS.getFlag(9)) { + _actor2.postInit(); + _actor2.setup(603, 2, 1); + _actor2.setPosition(Common::Point(233, 45)); + _actor2.animate(ANIM_MODE_2, NULL);_actor2.fixPriority(11); + } + } else { + _actor4.postInit(); + _actor4.setup(601, 1, 1); + _actor4.setPosition(Common::Point(180, 110)); + _actor4._moveDiff = Common::Point(1, 1); + _actor4._moveRate = 2; + _actor4._numFrames = 3; + _actor4.animate(ANIM_MODE_2, NULL); + _actor4.fixPriority(130); + _actor4._effect = 3; + _actor4.setDetails(600, 24, 25, 26, 1, (SceneItem *) NULL); + _actor4.signal(); + } + } + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(10); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.disableControl(); + + _item2.setDetails(12, 600, 17, -1, 19); + _item3.setDetails(11, 600, 14, -1, -1); + + if (R2_GLOBALS.getFlag(9)) { + _item1.setDetails(Rect(159, 3, 315, 95), 600, 7, -1, -1, 1, NULL); + } else { + _item4.setDetails(Rect(173, 15, 315, 45), 600, 21, -1, 23, 1, NULL); + _item1.setDetails(Rect(159, 3, 315, 95), 600, 6, -1, -1, 1, NULL); + } + _item5.setDetails(Rect(0, 0, 320, 200), 600, 0, -1, -1, 1, NULL); + + _sceneMode = 600; + if (R2_GLOBALS._sceneManager._previousScene == 700) { + if (R2_GLOBALS.getFlag(6)) { + setAction(&_sequenceManager1, this, 600, &R2_GLOBALS._player, &_actor5, NULL); + } else if (R2_GLOBALS.getFlag(5)) { + setAction(&_sequenceManager1, this, 603, &R2_GLOBALS._player, &_actor5, &_actor6, &_actor1, NULL); + } else { + setAction(&_sequenceManager1, this, 602, &R2_GLOBALS._player, &_actor5, &_actor6, &_actor1, NULL); + } + } else if (R2_GLOBALS.getFlag(5)) { + R2_GLOBALS._player.setPosition(Common::Point(50, 140)); + R2_GLOBALS._player.setStrip(3); + _actor6.setFrame(_actor6.getFrameCount()); + signal(); + } else { + _actor5.setFrame(7); + _actor6.setFrame(7); + R2_GLOBALS._player.setPosition(Common::Point(28, 140)); + R2_GLOBALS._player.setStrip(5); + signal(); + } +} + +void Scene600::remove() { + if (R2_INVENTORY.getObjectScene(9) == 600) + R2_GLOBALS._sound4.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene600::signal() { + switch (_sceneMode) { + case 601: + // No break on purpose + case 613: + // No break on purpose + case 616: + R2_GLOBALS._sceneManager.changeScene(700); + break; + case 605: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._walkRegions.enableRegion(6); + R2_GLOBALS._walkRegions.enableRegion(7); + R2_GLOBALS._walkRegions.enableRegion(9); + R2_GLOBALS._walkRegions.enableRegion(10); + + R2_INVENTORY.setObjectScene(12, 600); + R2_GLOBALS.setFlag(5); + + _actor4._effect = 3; + _actor4.signal(); + break; + case 606: + R2_INVENTORY.setObjectScene(15, 600); + R2_GLOBALS._player.enableControl(); + break; + case 607: + R2_INVENTORY.setObjectScene(9, 600); + R2_GLOBALS._player.enableControl(); + break; + case 608: + R2_GLOBALS.setFlag(8); + _actor4.remove(); + R2_GLOBALS._walkRegions.disableRegion(6); + R2_GLOBALS._walkRegions.disableRegion(9); + R2_GLOBALS._walkRegions.disableRegion(10); + R2_GLOBALS._player.enableControl(); + break; + case 612: + R2_GLOBALS.setFlag(9); + _actor3.remove(); + R2_GLOBALS._sceneItems.remove(&_item4); + _actor2.setDetails(600, 21, -1, 23, 4, &_item4); + _item1.setDetails(600, 7, -1, -1, 3, (SceneItem *) NULL); + R2_GLOBALS._player.enableControl(CURSOR_USE); + break; + case 614: + R2_GLOBALS._player.enableControl(); + _actor7.remove(); + R2_INVENTORY.setObjectScene(12, 1); + R2_GLOBALS._walkRegions.disableRegion(7); + break; + case 615: + _actor8.remove(); + R2_INVENTORY.setObjectScene(9, 1); + R2_GLOBALS._player.enableControl(); + break; + default: + _field412 = 0; + _sceneMode = 0; + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene600::process(Event &event) { + if ((!R2_GLOBALS._player._canWalk) && (!R2_GLOBALS.getFlag(6)) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN)) { + if (!_actor5.contains(event.mousePos) || (_actor5._frame <= 1)) { + if (R2_GLOBALS.getFlag(5)) { + _field412 += 10; + } else { + R2_GLOBALS._player.disableControl(); + _sceneMode = 604; + setAction(&_sequenceManager1, this, 604, &_actor1, &R2_GLOBALS._player, NULL); + event.handled = true; + } + } else { + R2_GLOBALS._player.disableControl(); + _sceneMode = 613; + setAction(&_sequenceManager1, this, 613, &R2_GLOBALS._player, &_actor6, NULL); + event.handled = true; + } + } else if ((!R2_GLOBALS.getFlag(6)) && (R2_GLOBALS._player._mover) && (_field412 < 10)){ + _field412 += 10; + } + + Scene::process(event); +} + +void Scene600::dispatch() { + if ((_field412 != 0) && (_sceneMode != 600) && (_sceneMode != 603) && (_sceneMode != 602)) { + if ( ((_actor6._strip == 4) && (_actor6._frame > 1)) + || (_sceneMode == 601) + || ((_sceneMode == 616) && (_actor5._frame > 1)) ) + _field412 = 0; + else { + _field412--; + if (_field412 % 10 == 0) { + _actor1.setAction(&_sequenceManager2, NULL, 611, &_actor1, NULL); + } + if ((_field412 == 0) && (R2_GLOBALS._player._mover)) + _field412 = 10; + } + } + + if (_actor1._frame == 2) + _aSound1.play(40); + + Scene::dispatch(); + if ((_actor4._strip == 3) && (_actor4._frame == 3)) { + _actor1.setStrip(4); + _actor1.setFrame(1); + } +} /*-------------------------------------------------------------------------- * Scene 800 - Sick Bay * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 581958975d..25940e78b5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -531,6 +531,68 @@ public: }; +class Scene600 : public SceneExt { + class Item1 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item4 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor4 : public SceneActor { + public: + virtual void signal(); + virtual bool startAction(CursorType action, Event &event); + virtual void draw(); + }; + class Actor5 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor6 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor7 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor8 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _field412; + Item1 _item1; + Item1 _item2; + Item1 _item3; + Item4 _item4; + Item1 _item5; + BackgroundSceneObject _object1; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Actor4 _actor4; + Actor5 _actor5; + Actor6 _actor6; + Actor7 _actor7; + Actor8 _actor8; + ASoundExt _aSound1; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + byte _fieldAD2[256]; + + Scene600(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void Scene600::remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + class Scene800: public SceneExt { /* Items */ class Button: public NamedHotspot { -- cgit v1.2.3 From 4dffd4c1db122553795390ffed9d7776e20bc329 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 31 Jan 2012 01:02:37 +0100 Subject: TSAGE: R2R - Fix a couple of compilation errors not detected by MSVC Thanks Kirben for pointing those --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 51f7cd8804..65fd762bbc 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -4518,7 +4518,7 @@ bool Scene600::Item4::startAction(CursorType action, Event &event) { scene->_actor2.postInit(); scene->_sceneMode = 612; - setAction(&scene->_sequenceManager1, this, 612, &scene->_actor3, &scene->_actor2, R2_GLOBALS._player, NULL); + setAction(&scene->_sequenceManager1, this, 612, &scene->_actor3, &scene->_actor2, &R2_GLOBALS._player, NULL); return true; } diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 25940e78b5..518e876ce6 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -586,7 +586,7 @@ public: Scene600(); virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void Scene600::remove(); + virtual void remove(); virtual void signal(); virtual void process(Event &event); virtual void dispatch(); -- cgit v1.2.3 From d1db4a48ed18bc4d411860c06b90151f37875ae8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 31 Jan 2012 22:23:55 +1100 Subject: TSAGE: Implement R2R Scene 205 - Star-field Credits --- engines/tsage/ringworld2/ringworld2_logic.cpp | 22 +- engines/tsage/ringworld2/ringworld2_logic.h | 14 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 357 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 47 ++++ 4 files changed, 439 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 16fc460a11..463df46681 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -64,7 +64,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Deck #2 - By Lift return new Scene200(); case 205: - error("Missing scene %d from group 0", sceneNumber); + // Star-field Credits + return new Scene205(); case 250: // Lift return new Scene250(); @@ -1442,6 +1443,25 @@ void Scene1200::sub9DAD6(int indx) { } } +/*--------------------------------------------------------------------------*/ + +ActionObject::ActionObject(): EventHandler() { + _endAction = NULL; +} + +void ActionObject::synchronize(Serializer &s) { + EventHandler::synchronize(s); + + SYNC_POINTER(_endAction); +} + +void ActionObject::remove() { + if (_endAction) + _endAction->signal(); + + _endAction = NULL; +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index dbb740d9fd..24b8ba07fc 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -321,6 +321,20 @@ public: int sub9EE22(int &arg1, int &arg2); virtual Common::String getClassName() { return "UnkObject1200"; } }; + +class ActionObject: public EventHandler { +public: + EventHandler *_endAction; + Rect _rect1, _screenBounds; + int _field3A, _field3C; + int _field58, _field5A; +public: + ActionObject(); + + virtual void synchronize(Serializer &s); + virtual void remove(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 65fd762bbc..887ff17d3b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1615,6 +1615,363 @@ void Scene200::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 205 - Star-field Credits + * + *--------------------------------------------------------------------------*/ + +void Scene205::Action1::signal() { + Scene205 *scene = (Scene205 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + setDelay(2); + break; + + case 1: + scene->_yp = 100 - (scene->_fontHeight * 3 / 2); + scene->handleText(); + + for (int idx = 1; idx <= 2; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + setDelay(240); + break; + + case 2: + case 4: + case 6: + case 8: + case 10: + case 12: + case 14: + case 16: + case 18: + case 20: + textLoop(); + setDelay(120); + break; + + case 3: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 2) / 2); + scene->handleText(); + + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + setDelay(240); + break; + + case 5: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 7) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 6; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(480); + break; + + case 7: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 6) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 5; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(300); + break; + + case 9: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 8) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 7; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(480); + break; + + case 11: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 3) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 2; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(240); + break; + + case 13: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 3) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 2; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(240); + break; + + case 15: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 5) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 4; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(240); + break; + + case 17: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 5) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 4; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(360); + break; + + case 19: + scene->_textIndex = 1; + scene->_yp = 100 - ((scene->_fontHeight * 3) / 2); + scene->handleText(); + + for (int idx = 1; idx <= 2; ++idx) { + ++scene->_textIndex; + scene->_yp += scene->_fontHeight; + scene->handleText(); + } + + setDelay(480); + break; + + case 21: + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._sceneManager._previousScene); + + default: + break; + } +} + +void Scene205::Action1::textLoop() { + Scene205 *scene = (Scene205 *)R2_GLOBALS._sceneManager._scene; + + for (int idx = 1; idx <= 14; ++idx) { + if (R2_GLOBALS._sceneObjects->contains(&scene->_textList[idx])) { + scene->_textList[idx].remove(); + } + } +} + +/*--------------------------------------------------------------------------*/ + +Scene205::Object::Object(): SceneObject() { + _x100 = _y100 = 0; +} + +void Scene205::Object::synchronize(Serializer &s) { + EventHandler::synchronize(s); + + s.syncAsSint32LE(_x100); + s.syncAsSint32LE(_y100); +} + +/*--------------------------------------------------------------------------*/ + +Scene205::Scene205(): SceneExt() { + _yp = 0; + _textIndex = 1; + _lineNum = -1; + + GfxFont font; + font.setFontNumber(4); + _fontHeight = font.getHeight(); +} + +void Scene205::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(4000); + R2_GLOBALS._player._uiEnabled = false; + + R2_GLOBALS._sound1.play(337); + R2_GLOBALS._scenePalette.loadPalette(0); + R2_GLOBALS._player.disableControl(); + + setup(); + setAction(&_action1); +} + +void Scene205::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + for (int idx = 0; idx < 3; ++idx) + SYNC_POINTER(_objList1[idx]); + for (int idx = 0; idx < 3; ++idx) + SYNC_POINTER(_objList2[idx]); + for (int idx = 0; idx < 4; ++idx) + SYNC_POINTER(_objList3[idx]); + + s.syncAsSint16LE(_textIndex); + s.syncAsSint16LE(_lineNum); +} + +void Scene205::remove() { + R2_GLOBALS._sound1.fadeOut2(NULL); + SceneExt::remove(); +} + +void Scene205::process(Event &event) { + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { + event.handled = true; + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._sceneManager._previousScene); + } else { + Scene::process(event); + } +} + +void Scene205::dispatch() { + processList(_objList3, 4, Common::Rect(0, 0, 319, 200), 1, 1, 160, 100); + processList(_objList2, 3, Common::Rect(0, 0, 319, 200), 2, 2, 160, 100); + processList(_objList1, 3, Common::Rect(0, 0, 319, 200), 4, 3, 160, 100); + + Scene::dispatch(); +} + +void Scene205::setup() { + const Common::Point pointList1[3] = { Common::Point(2, 50), Common::Point(100, 28), Common::Point(53, 15) }; + const Common::Point pointList2[3] = { Common::Point(289, 192), Common::Point(125, 60), Common::Point(130, 40) }; + const Common::Point pointList3[4] = { + Common::Point(140, 149), Common::Point(91, 166), Common::Point(299, 46), Common::Point(314, 10) + }; + + // Set up the first object list + for (int idx = 0; idx < 3; ++idx) { + Object *obj = new Object(); + _objList1[idx] = obj; + + obj->postInit(); + obj->_flags |= OBJFLAG_CLONED; + obj->setVisage(205); + obj->_strip = 1; + obj->_frame = 1; + obj->setPosition(pointList1[idx]); + obj->_x100 = obj->_position.x * 100; + obj->_y100 = obj->_position.y * 100; + obj->fixPriority(12); + } + + // Setup the second object list + for (int idx = 0; idx < 3; ++idx) { + Object *obj = new Object(); + _objList2[idx] = obj; + + obj->postInit(); + obj->_flags |= OBJFLAG_CLONED; + obj->setVisage(205); + obj->_strip = 1; + obj->_frame = 2; + obj->setPosition(pointList2[idx]); + obj->_x100 = obj->_position.x * 100; + obj->_y100 = obj->_position.y * 100; + obj->fixPriority(11); + } + + // Setup the third object list + for (int idx = 0; idx < 4; ++idx) { + Object *obj = new Object(); + _objList3[idx] = obj; + + obj->postInit(); + obj->_flags |= OBJFLAG_CLONED; + obj->setVisage(205); + obj->_strip = 1; + obj->_frame = 3; + obj->setPosition(pointList3[idx]); + obj->_x100 = obj->_position.x * 100; + obj->_y100 = obj->_position.y * 100; + obj->fixPriority(10); + } +} + +/** + * Handles moving a group of stars in the scene background + */ +void Scene205::processList(Object **ObjList, int count, const Common::Rect &bounds, + int xMultiply, int yMultiply, int xCenter, int yCenter) { + for (int idx = 0; idx < count; ++idx) { + Object *obj = ObjList[idx]; + Common::Point pt(obj->_position.x - xCenter, obj->_position.y - yCenter); + + if ((obj->_position.x <= 319) && (obj->_position.x >= 0) && + (obj->_position.y <= 199) && (obj->_position.y >= 0)) { + if (!pt.x && !pt.y) { + pt.x = pt.y = 1; + } + + pt.x *= xMultiply; + pt.y *= yMultiply; + obj->_x100 += pt.x; + obj->_y100 += pt.y; + } else { + obj->_x100 = (bounds.left + R2_GLOBALS._randomSource.getRandomNumber(bounds.right)) * 100; + obj->_y100 = (bounds.top + R2_GLOBALS._randomSource.getRandomNumber(bounds.bottom)) * 100; + } + + obj->setPosition(Common::Point(obj->_x100 / 100, obj->_y100 / 100)); + } +} + +void Scene205::handleText() { + _message = g_resourceManager->getMessage(205, ++_lineNum); + _messageP = _message.c_str(); + + _textList[_textIndex]._fontNumber = 4; + _textList[_textIndex]._color1 = 0; + _textList[_textIndex]._color2 = 10; + _textList[_textIndex]._color3 = 7; + _textList[_textIndex]._width = 400; + _textList[_textIndex].setup(_message); + _textList[_textIndex].fixPriority(199); + + GfxFont font; + font.setFontNumber(4); + int width = font.getStringWidth(_message.c_str()); + + _textList[_textIndex].setPosition(Common::Point(160 - (width / 2), _yp)); +} + /*-------------------------------------------------------------------------- * Scene 250 - Lift * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 518e876ce6..da2e0b3a52 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -226,6 +226,53 @@ public: virtual void signal(); }; +class Scene205: public SceneExt { + /* Actions */ + class Action1: public Action { + private: + void textLoop(); + public: + virtual void signal(); + }; + + /* Objects */ + class Object: public SceneObject { + public: + int _x100, _y100; + public: + Object(); + + virtual void synchronize(Serializer &s); + }; +private: + void setup(); + void processList(Object **ObjList, int count, const Common::Rect &bounds, + int xMultiply, int yMultiply, int xCenter, int yCenter); + void handleText(); +public: + ActionObject _actionObject; + int _fontHeight; + SceneText _textList[15]; + Object *_objList1[3]; + Object *_objList2[3]; + Object *_objList3[4]; + ASound _sound1; + Action1 _action1; + int _yp; + int _textIndex, _lineNum; + Common::String _message; + const char *_messageP; +public: + Scene205(); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void process(Event &event); + virtual void dispatch(); +}; + + class Scene250: public SceneExt { class Button: public SceneActor { public: -- cgit v1.2.3 From 23a497f7922e3078dd1be44fddbab41a5646c971 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 31 Jan 2012 22:41:36 +1100 Subject: TSAGE: Minor cleanups for R2R scene 180 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 887ff17d3b..84f05656f4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1845,6 +1845,7 @@ void Scene205::synchronize(Serializer &s) { s.syncAsSint16LE(_textIndex); s.syncAsSint16LE(_lineNum); + s.syncAsSint16BE(_yp); } void Scene205::remove() { @@ -1955,7 +1956,6 @@ void Scene205::processList(Object **ObjList, int count, const Common::Rect &boun void Scene205::handleText() { _message = g_resourceManager->getMessage(205, ++_lineNum); - _messageP = _message.c_str(); _textList[_textIndex]._fontNumber = 4; _textList[_textIndex]._color1 = 0; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index da2e0b3a52..19bded3c5c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -261,7 +261,6 @@ public: int _yp; int _textIndex, _lineNum; Common::String _message; - const char *_messageP; public: Scene205(); -- cgit v1.2.3 From 81bc7226050f00010c57c159ea3a85af580b2ffb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 31 Jan 2012 23:36:19 +0100 Subject: TSAGE: R2R - Implement scene 900 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 367 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 36 +++ 3 files changed, 404 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 463df46681..a35a78e4db 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -98,7 +98,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Deck #5 - By Lift return new Scene850(); case 900: - error("Missing scene %d from group 0", sceneNumber); + return new Scene900(); /* Scene group #1 */ // case 1000: diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 84f05656f4..1a80142694 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -6118,6 +6118,373 @@ void Scene850::signal() { } } +/*-------------------------------------------------------------------------- + * Scene 900 - + * + *--------------------------------------------------------------------------*/ +Scene900::Actor4::Actor4() { + _fieldA4 = 0; +} + +void Scene900::Actor4::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_fieldA4); +} + +void Scene900::Actor4::sub96135(int arg1) { + _fieldA4 = arg1; + setDetails(900, -1, -1, -1, 2, (SceneItem *) NULL); +} + +Scene900::Scene900() { + _field412 = 0; + _field414 = 0; + _field416 = 0; +} + +void Scene900::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); +} + +bool Scene900::Actor4::startAction(CursorType action, Event &event) { + Scene900 *scene = (Scene900 *)R2_GLOBALS._sceneManager._scene; + + if (action == CURSOR_USE) { + R2_GLOBALS._sound2.play(14); + switch (_fieldA4) { + case 2: + if (scene->_field412 == 1) { + scene->_sceneMode = 2; + scene->signal(); + } else if (scene->_field412 == 2) { + if (R2_GLOBALS._v565E5 == 0) { + scene->_aSound1.play(30); + setup(900, 3, 11); + R2_GLOBALS._v565E5 = 1; + if ((R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16 == 700)) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70) && (scene->_actor2._animateMode != ANIM_MODE_6)) { + scene->_actor2.animate(ANIM_MODE_6, NULL); + } else { + if (((scene->_actor3._percent * 49) / 100) + scene->_actor3._position.x == scene->_actor2._position.x) { + if (scene->_actor2._position.x == 166 - (R2_GLOBALS._v565E3 / 15)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 4; + scene->_actor2._moveDiff.y = (scene->_actor2._position.y - (scene->_actor3._position.y + ((scene->_actor3._percent * 3) / 10) - 2)) / 9; + Common::Point pt(scene->_actor3._position.x + ((scene->_actor3._percent * 49) / 100), scene->_actor3._position.y + ((scene->_actor3._percent * 3) / 10) - 2); + NpcMover *mover = new NpcMover(); + scene->_actor2.addMover(mover, &pt, this); + scene->_actor2.animate(ANIM_MODE_6, NULL); + } + } + } + } else { + scene->_aSound1.play(53); + setup(900, 3, 9); + R2_GLOBALS._v565E5 = 0; + + if ((R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (scene->_actor2._frame < 8) && (scene->_actor2._animateMode != ANIM_MODE_5)) { + scene->_actor2.animate(ANIM_MODE_5, NULL); + } else if ((R2_INVENTORY.getObjectScene(R2_8) == 700) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (scene->_actor2._frame < 8)) { + R2_GLOBALS._v565E7 = 0; + if (scene->_actor2._animateMode != 5) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 5; + scene->_actor2.animate(ANIM_MODE_5, NULL); + scene->_actor2._moveDiff.y = (166 - scene->_actor2._position.y) / 9; + Common::Point pt(scene->_actor2._position.x, 166 - (R2_GLOBALS._v565E3 / 15)); + NpcMover *mover = new NpcMover(); + scene->_actor2.addMover(mover, &pt, this); + } + } + } + } + return true; + break; + case 3: + if (scene->_field412 == 1) { + scene->_sceneMode = 3; + scene->signal(); + } + return true; + break; + case 4: + if ((scene->_field416 == 0) && (scene->_field414 == 0) && (R2_GLOBALS._v565E3 != 0)) { + scene->_aSound1.play(38); + scene->_field416 = -5; + } + return true; + break; + case 5: + if ((scene->_field416 == 0) && (scene->_field414 == 0) && (R2_GLOBALS._v565E3 < 135)) { + scene->_aSound1.play(38); + scene->_field416 = 5; + } + return true; + break; + case 6: + if ((scene->_field416 == 0) && (scene->_field414 == 0) && (R2_GLOBALS._v565E1 > -10)) { + scene->_aSound1.play(38); + scene->_field414 = -5; + } + return true; + break; + case 7: + if ((scene->_field416 == 0) && (scene->_field414 == 0) && (R2_GLOBALS._v565E1 < 20)) { + scene->_aSound1.play(38); + scene->_field414 = 5; + } + return true; + break; + case 8: + SceneItem::display(5, 11, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + break; + case 9: + SceneItem::display(5, 12, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + break; + default: + if (scene->_field412 == 1) { + R2_GLOBALS._player.disableControl(); + scene->_actor5.remove(); + scene->_actor6.remove(); + scene->_actor7.remove(); + scene->_actor8.remove(); + scene->_actor9.remove(); + scene->_actor10.remove(); + R2_GLOBALS._sound2.play(37); + scene->_sceneMode = 901; + scene->setAction(&scene->_sequenceManager1, scene, 901, &scene->_actor1, this ,NULL); + } else if ((scene->_field412 == 2) || (scene->_field412 == 3)) { + scene->_sceneMode = 1; + scene->signal(); + } + + return true; + break; + } + } else if (action == CURSOR_LOOK) { + if ((_fieldA4 == 2) && (scene->_field412 == 2)) + SceneItem::display(900, 21, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + else + SceneItem::display(900, _fieldA4, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + } else { + return SceneActor::startAction(action, event); + } +} + +void Scene900::postInit(SceneObjectList *OwnerList) { + g_globals->gfxManager()._bounds.moveTo(Common::Point(0, 0)); + loadScene(900); + SceneExt::postInit(); + R2_GLOBALS._sound1.play(34); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + R2_GLOBALS._player.disableControl(); + + _actor1.postInit(); + _actor1.setDetails(900, 3, -1, -1, 1, (SceneItem *) NULL); + + _field414 = 0; + _field416 = 0; + + _actor3.postInit(); + _actor3.fixPriority(1); + // useless, the original use it for debugging purposes: strcpy(_actor3._actorName, "Crane"); + _actor3.setup(900, 1, 2); + _actor3.setPosition(Common::Point(89, 0)); + _actor3._effect = 1; + _actor3.setDetails(900, 6, -1, 8, 1, (SceneItem *) NULL); + + if ((R2_INVENTORY.getObjectScene(R2_8) != 1) && (R2_INVENTORY.getObjectScene(R2_16) != 1)) { + _actor2.postInit(); + _actor2.setPosition(Common::Point(0, 0)); + _actor2.fixPriority(1); + + if (R2_INVENTORY.getObjectScene(R2_8) == 0) { + if (R2_INVENTORY.getObjectScene(R2_16) != 700) { + _actor2.setup(901, 3, 2); + } else if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) { + _actor2.setup(901, 2, 1); + } else { + _actor2.setup(901, 2, 8); + } + _actor2.setPosition(Common::Point(171, 145)); + _actor2.setDetails(700, -1, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor2.setDetails(700, -1, -1, -1, 1, (SceneItem *) NULL); + if (R2_GLOBALS._v565E7 == 0) { + _actor2.setup(901, 1, 8); + // Original set two times the same values: skipped + _actor2.setPosition(Common::Point((((100 - ((R2_GLOBALS._v565EB * 350) / 100)) * 49) / 100) + ((R2_GLOBALS._v565E9 * _actor3._percent * 6) / 100) + 89, 166 - (R2_GLOBALS._v565EB / 3))); + _actor2.changeZoom(((100 - ((R2_GLOBALS._v565EB * 350) / 100) + 52) / 10) * 10); + } + } + } + _item1.setDetails(Rect(0, 0, 320, 200), 900, 0, -1, -1, 1, NULL); + _sceneMode = 900; + setAction(&_sequenceManager1, this, 900, &_actor1, NULL); +} + +void Scene900::remove() { + if (_sceneMode != 901) + R2_GLOBALS._sound1.play(10); + + SceneExt::remove(); +} + +void Scene900::signal() { + switch (_sceneMode) { + case 1: + _field412 = 1; + R2_GLOBALS._sound2.play(37); + + _actor5.remove(); + _actor6.remove(); + _actor7.remove(); + _actor8.remove(); + _actor9.remove(); + _actor10.remove(); + + _actor5.sub96135(2); + _actor5.setup(900, 2, 1); + _actor5.setPosition(Common::Point(36, 166)); + + _actor6.sub96135(3); + _actor6.setup(900, 2, 5); + _actor6.setPosition(Common::Point(117, 166)); + break; + case 2: + _field412 = 2; + + _actor5.remove(); + _actor6.remove(); + + _actor5.sub96135(2); + if (R2_GLOBALS._v565E5 == 0) + _actor5.setup(900, 3, 9); + else + _actor5.setup(900, 3, 11); + _actor5.setPosition(Common::Point(36, 166)); + + _actor7.sub96135(5); + _actor7.setup(900, 3, 3); + _actor7.setPosition(Common::Point(76, 134)); + + _actor8.sub96135(4); + _actor8.setup(900, 3, 7); + _actor8.setPosition(Common::Point(76, 156)); + + _actor9.sub96135(6); + _actor9.setup(900, 3, 1); + _actor9.setPosition(Common::Point(55, 144)); + + _actor10.sub96135(7); + _actor10.setup(900, 3, 5); + _actor10.setPosition(Common::Point(99, 144)); + + break; + case 3: + _field412 = 3; + + _actor5.remove(); + _actor6.remove(); + _actor7.remove(); + _actor8.remove(); + _actor9.remove(); + _actor10.remove(); + + _actor5.sub96135(8); + _actor5.setup(900, 4, 1); + _actor5.setPosition(Common::Point(36, 166)); + + _actor6.sub96135(9); + _actor6.setup(900, 4, 5); + _actor6.setPosition(Common::Point(117, 166)); + break; + case 4: + _sceneMode = 0; + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + R2_GLOBALS._v565E7 = 1; + break; + case 900: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + + _actor1.setup(900, 1, 1); + + _actor4.sub96135(1); + _actor4.setup(900, 1, 3); + _actor4.setPosition(Common::Point(77, 168)); + + _sceneMode = 1; + signal(); + break; + case 901: + R2_GLOBALS._sceneManager.changeScene(700); + break; + case 5: + _sceneMode = 0; + // No break on purpose + default: + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + break; + } +} + +void Scene900::dispatch() { + if (_field416 != 0) { + if (_field416 < 0) { + R2_GLOBALS._v565E3--; + ++_field416; + } else { + ++R2_GLOBALS._v565E3; + _field416--; + } + } + + if (_field414 != 0) { + R2_GLOBALS._v565E1--; + ++_field414; + } else { + ++R2_GLOBALS._v565E1; + _field414++; + } + + if (R2_GLOBALS._sceneObjects->contains(&_actor2)) { + if ((R2_GLOBALS._v565E5 != 0) && (R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) { + if ((_actor2._frame > 1) && (_actor2._animateMode != ANIM_MODE_6)) + _actor2.animate(ANIM_MODE_6, NULL); + } else { + if ((_actor2._frame < 8) && (_actor2._animateMode != ANIM_MODE_5) && (R2_GLOBALS._v565E7 == 0) && (R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (_sceneMode != 4)) + _actor2.animate(ANIM_MODE_5, NULL); + } + } + + _actor3.changeZoom(100 - ((R2_GLOBALS._v565E3 * 70) / 100)); + _actor3.setPosition(Common::Point(((_actor3._percent * R2_GLOBALS._v565E1 * 6) / 100) + 89, R2_GLOBALS._v565E3)); + + if ((R2_GLOBALS._sceneObjects->contains(&_actor2)) && (R2_GLOBALS._v565E7 != 0) && (!_actor2._mover) && (_actor2._animateMode == ANIM_MODE_NONE)) { + _actor2.setPosition(Common::Point(_actor3._position.x + ((_actor3._percent * 49) / 100), _actor3._position.y + ((_actor3._percent * 3) / 10))); + if (R2_GLOBALS._v565E3 >= 75) { + _actor2.setup(901, 1, 1); + _actor2.changeZoom(((_actor3._percent + 52) / 10) * 10); + } else { + _actor2.setup(901, 5, 1); + _actor2.changeZoom(((_actor3._percent / 10) * 10) + 30); + } + } + Scene::dispatch(); +} + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 19bded3c5c..5d5e531d80 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -764,6 +764,42 @@ public: virtual void signal(); }; +class Scene900 : public SceneExt { + class Actor4 : public SceneActor { + public: + int _fieldA4; + + Actor4(); + void sub96135(int arg1); + virtual void synchronize(Serializer &s); + virtual bool startAction(CursorType action, Event &event); + }; +public: + int _field412; + int _field414; + int _field416; + NamedHotspot _item1; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + Actor4 _actor4; + Actor4 _actor5; + Actor4 _actor6; + Actor4 _actor7; + Actor4 _actor8; + Actor4 _actor9; + Actor4 _actor10; + ASoundExt _aSound1; + SequenceManager _sequenceManager1; + + Scene900(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void dispatch(); + virtual void synchronize(Serializer &s); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 4aa494c19b987974d571bfda90b7a20de1cd0e26 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 1 Feb 2012 22:10:59 +0100 Subject: TSAGE: R2R - Implement scene 700 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 466 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 63 ++++ 3 files changed, 530 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index a35a78e4db..44953abfd2 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -87,7 +87,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 600: return new Scene600(); case 700: - error("Missing scene %d from group 0", sceneNumber); + return new Scene700(); case 800: // Sick bay return new Scene800(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 1a80142694..a4c2fe5256 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -5287,6 +5287,472 @@ void Scene600::dispatch() { _actor1.setFrame(1); } } + +/*-------------------------------------------------------------------------- + * Scene 700 - + * + *--------------------------------------------------------------------------*/ +Scene700::Scene700() { + _rotation = NULL; +} + +void Scene700::synchronize(Serializer &s) { + SceneExt::synchronize(s); + SYNC_POINTER(_rotation); +} + +bool Scene700::Item11::startAction(CursorType action, Event &event) { + if ((action == CURSOR_USE) && (R2_GLOBALS._player._position.x < 100)) + return false; + + return NamedHotspot::startAction(action, event); +} + +bool Scene700::Item12::startAction(CursorType action, Event &event) { + Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case R2_8: + R2_GLOBALS._player.disableControl(); + scene->_actor5.postInit(); + scene->_actor5.setup(701, 3, 2); + scene->_actor5.setPosition(Common::Point(243, 98)); + scene->_actor5.setDetails(700, 37, -1, -1, 2, (SceneItem *) NULL); + scene->_actor5.hide(); + scene->_sceneMode = 20; + break; + case R2_16: + R2_GLOBALS._player.disableControl(); + scene->_actor5.postInit(); + scene->_actor5.setup(701, 2, 8); + scene->_actor5.setPosition(Common::Point(243, 98)); + scene->_actor5.setDetails(700, 38, -1, -1, 2, (SceneItem *) NULL); + scene->_actor5.hide(); + scene->_sceneMode = 21; + break; + default: + return NamedHotspot::startAction(action, event); + break; + } + + scene->setAction(&scene->_sequenceManager, this, 707, &R2_GLOBALS._player, &scene->_actor5, NULL); + return true; +} + +bool Scene700::Actor2::startAction(CursorType action, Event &event) { + Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._position.y <= 100) + return false; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 701; + scene->setAction(&scene->_sequenceManager, scene, 701, &R2_GLOBALS._player, this, NULL); + + return true; +} + +bool Scene700::Actor3::startAction(CursorType action, Event &event) { + Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._position.y <= 100) + return false; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 702; + scene->setAction(&scene->_sequenceManager, scene, 702, &R2_GLOBALS._player, this, NULL); + + return true; +} + +bool Scene700::Actor4::startAction(CursorType action, Event &event) { + Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; + + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); + + if (R2_GLOBALS._player._position.y <= 100) + return false; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 704; + scene->setAction(&scene->_sequenceManager, scene, 704, &R2_GLOBALS._player, this, NULL); + + return true; +} + +bool Scene700::Actor5::startAction(CursorType action, Event &event) { + Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + switch (R2_INVENTORY.getObjectScene(R2_8)) { + case 0: + if ((_strip == 2) && (_frame == 1)) { + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._position.x <= 100) { + scene->_sceneMode = 710; + scene->setAction(&scene->_sequenceManager, scene, 710, &R2_GLOBALS._player, this, NULL); + } else { + scene->_sceneMode = 709; + scene->setAction(&scene->_sequenceManager, scene, 709, &R2_GLOBALS._player, this, NULL); + } + } else { + return SceneActor::startAction(action, event); + } + break; + case 700: { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 10; + Common::Point pt(_position.x - 12, _position.y + 1); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } + break; + default: + break; + } + break; + case R2_ATTRACTOR_UNIT: + R2_GLOBALS._player.disableControl(); + if (R2_INVENTORY.getObjectScene(R2_8) == 700) { + scene->_sceneMode = 706; + scene->setAction(&scene->_sequenceManager, scene, 706, &R2_GLOBALS._player, &scene->_actor5, NULL); + } else { + scene->_sceneMode = 15; + Common::Point pt(_position.x - 12, _position.y + 1); + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + } + break; + default: + return SceneActor::startAction(action, event); + break; + } + + return true; +} + +bool Scene700::Actor6::startAction(CursorType action, Event &event) { + Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; + + if ((action != CURSOR_USE) || (R2_GLOBALS._player._position.y >= 100)) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1; + Common::Point pt(_position.x, 69); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, scene); + + return true; +} + +void Scene700::postInit(SceneObjectList *OwnerList) { + if (R2_GLOBALS._sceneManager._previousScene == 900) + g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); + + loadScene(700); + R2_GLOBALS._v558B6.set(60, 0, 260, 200); + SceneExt::postInit(); + + _rotation = R2_GLOBALS._scenePalette.addRotation(237, 246, -1); + _rotation->setDelay(5); + _rotation->_countdown = 1; + + _actor2.postInit(); + _actor2.setVisage(700); + _actor2.setPosition(Common::Point(21, 128)); + _actor2.fixPriority(10); + _actor2.setDetails(700, 3, -1, -1, 1, (SceneItem *) NULL); + + _actor3.postInit(); + _actor3.setup(700, 2, 1); + _actor3.setPosition(Common::Point(217, 120)); + _actor3.fixPriority(10); + _actor3.setDetails(700, 15, -1, -1, 1, (SceneItem *) NULL); + + _actor1.postInit(); + _actor1.setup(700, 4, 1); + _actor1.setPosition(Common::Point(355 - ((R2_GLOBALS._v565E3 * 8) / 5), ((R2_GLOBALS._v565E1 + 20 ) / 5) - 12)); + _actor1.fixPriority(10); + _actor1.setDetails(700, 12, -1, 14, 1, (SceneItem *) NULL); + + _actor6.postInit(); + _actor6.setup(700, 8, 1); + _actor6.setPosition(Common::Point(85, 53)); + _actor6.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); + + _actor7.postInit(); + _actor7.setup(700, 8, 1); + _actor7.setPosition(Common::Point(164, 53)); + _actor7.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); + + _actor8.postInit(); + _actor8.setup(700, 8, 1); + _actor8.setPosition(Common::Point(243, 53)); + _actor8.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); + + _actor9.postInit(); + _actor9.setup(700, 8, 1); + _actor9.setPosition(Common::Point(324, 53)); + _actor9.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); + + if ((R2_INVENTORY.getObjectScene(R2_8) != 1) && (R2_INVENTORY.getObjectScene(R2_16) != 1)) { + _actor5.postInit(); + _actor5.fixPriority(10); + switch (R2_INVENTORY.getObjectScene(R2_16)) { + case 0: + switch (R2_INVENTORY.getObjectScene(R2_8)) { + case 0: + _actor5.setup(701, 3, 2); + _actor5.setPosition(Common::Point(243, 98)); + _actor5.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); + break; + case 700: + _actor5.setup(701, 3, 1); + _actor5.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + _actor5.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); + break; + default: + break; + } + break; + case 700: + switch (R2_INVENTORY.getObjectScene(R2_8)) { + case 0: + if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) + _actor5.setup(701, 2, 1); + else + _actor5.setup(701, 2, 8); + _actor5.setPosition(Common::Point(243, 98)); + _actor5.fixPriority(77); + _actor5.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); + break; + case 700: + _actor5.setup(701, 1, 8); + if (R2_GLOBALS._v565E7 == 0) { + _actor5.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + } else { + _actor5.setup(701, 1, 1); + _actor5.setPosition(Common::Point(_actor1._position.x + 1, _actor1._position.y + 120)); + } + _actor5.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); + break; + default: + break; + } + default: + break; + } + } + + _actor4.postInit(); + _actor4.setup(700, 3, 1); + _actor4.setPosition(Common::Point(454, 117)); + _actor4.setDetails(700, 27, -1, -1, 1, (SceneItem *) NULL); + + _item12.setDetails(Rect(234, 90, 252, 110), 700, 39, -1, -1, 1, NULL); + _item6.setDetails(Rect(91, 158, 385, 167), 700, 6, -1, 8, 1, NULL); + _item2.setDetails(Rect(47, 115, 149, 124), 700, 40, -1, 41, 1, NULL); + _item3.setDetails(Rect(151, 108, 187, 124), 700, 40, -1, 41, 1, NULL); + _item4.setDetails(Rect(247, 108, 275, 124), 700, 40, -1, 41, 1, NULL); + _item5.setDetails(Rect(300, 105, 321, 124), 700, 40, -1, 41, 1, NULL); + _item7.setDetails(Rect(255, 74, 368, 115), 700, 9, -1, 11, 1, NULL); + _item8.setDetails(Rect(69, 74, 182, 115), 700, 9, -1, 11, 1, NULL); + _item9.setDetails(Rect(370, 58, 475, 103), 700, 18, -1, -1, 1, NULL); + _item10.setDetails(Rect(17, 11, 393, 31), 700, 24, -1, -1, 1, NULL); + _item11.setDetails(Rect(42, 32, 368, 66), 700, 30, -1, 32, 1, NULL); + _item1.setDetails(Rect(0, 0, 480, 200), 700, 0, -1, -1, 1, NULL); + + R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.setVisage(11); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player._moveDiff.x = 2; + R2_GLOBALS._player.disableControl(); + + R2_GLOBALS._sound1.play(34); + + _sceneMode = 700; + + switch (R2_GLOBALS._sceneManager._previousScene) { + case 250: + setAction(&_sequenceManager, this, 700, &R2_GLOBALS._player, &_actor2, NULL); + break; + case 500: + setAction(&_sequenceManager, this, 703, &R2_GLOBALS._player, &_actor3, NULL); + break; + case 600: { + _sceneMode = 4; + _actor7.setFrame(5); + R2_GLOBALS._player.setPosition(Common::Point(164, 74)); + R2_GLOBALS._player.setStrip2(3); + Common::Point pt(164, 69); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 900: + setAction(&_sequenceManager, this, 705, &R2_GLOBALS._player, &_actor4, NULL); + break; + default: + if (R2_GLOBALS.getFlag(41)) + R2_GLOBALS._player.setPosition(Common::Point(107, 67)); + else + R2_GLOBALS._player.setPosition(Common::Point(60, 140)); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + } +} + +void Scene700::remove() { + R2_GLOBALS._sound1.play(10); + _rotation->remove(); + SceneExt::remove(); +} + +void Scene700::signal() { + switch (_sceneMode) { + case 1: + _sceneMode = 2; + R2_GLOBALS._player.setStrip(4); + if (R2_GLOBALS._player._position.x != 164) { + SceneItem::display(700, 36, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + R2_GLOBALS._player.enableControl(); + } else { + R2_GLOBALS._sound2.play(19); + _actor7.animate(ANIM_MODE_5, this); + } + break; + case 2: { + _sceneMode = 3; + R2_GLOBALS._player.setStrip2(4); + Common::Point pt(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 5); + NpcMover *mover = new NpcMover(); + R2_GLOBALS._player.addMover(mover, &pt, this); + } + break; + case 3: + R2_INVENTORY.setObjectScene(5, 600); + R2_INVENTORY.setObjectScene(16, 700); + R2_GLOBALS._player.enableControl(); + break; + case 4: + _sceneMode = 5; + R2_GLOBALS._player.setStrip2(-1); + R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + R2_GLOBALS._sound2.play(19); + _actor7.animate(ANIM_MODE_6, this); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS.setFlag(41); + break; + case 10: + _sceneMode = 11; + R2_GLOBALS._player.setup(16, 7, 1); + R2_GLOBALS._player.changeZoom(50); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 11: + _sceneMode = 12; + _actor5.remove(); + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 12: + R2_GLOBALS._player.setVisage(11); + R2_GLOBALS._player.changeZoom(100); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + R2_GLOBALS._player._strip = 7; + if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_UNIT) == 0) { + R2_INVENTORY.setObjectScene(R2_16, 1); + R2_INVENTORY.setObjectScene(R2_8, 0); + } else { + R2_INVENTORY.setObjectScene(R2_8, 1); + } + R2_GLOBALS._player.enableControl(); + break; + case 15: + _sceneMode = 16; + R2_GLOBALS._player.setup(16, 7, 1); + R2_GLOBALS._player.changeZoom(50); + R2_GLOBALS._player.animate(ANIM_MODE_5, this); + break; + case 16: + _sceneMode = 17; + _actor5.setup(701, 1, 8); + _actor5.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); + if ((R2_GLOBALS._v565E5 != 0) && (_actor5._position.x == _actor1._position.x + 1) && (_actor5._position.x == 148 - (((R2_GLOBALS._v565E1 + 10) / 5) * 4))) { + _actor5.animate(ANIM_MODE_6, NULL); + Common::Point pt(_actor5._position.x, _actor1._position.y + 120); + NpcMover *mover = new NpcMover(); + _actor5.addMover(mover, &pt, NULL); + R2_GLOBALS._v565E7 = 1; + } + R2_GLOBALS._player.animate(ANIM_MODE_6, this); + break; + case 17: + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); + R2_INVENTORY.setObjectScene(R2_16, 700); + R2_GLOBALS._player.setVisage(11); + R2_GLOBALS._player.changeZoom(100); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); + R2_GLOBALS._player._strip = 7; + R2_GLOBALS._player.enableControl(); + break; + case 20: + R2_INVENTORY.setObjectScene(R2_8, 0); + R2_GLOBALS._player.enableControl(); + break; + case 21: + _actor5.fixPriority(77); + if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) + _actor5.animate(ANIM_MODE_6, NULL); + + R2_INVENTORY.setObjectScene(R2_16, 700); + R2_GLOBALS._player.enableControl(); + break; + case 701: + R2_GLOBALS._sceneManager.changeScene(250); + break; + case 702: + R2_GLOBALS._sceneManager.changeScene(500); + break; + case 704: + R2_GLOBALS._sceneManager.changeScene(900); + break; + case 706: + _actor5.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); + _actor5.fixPriority(77); + if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) + _actor5.animate(ANIM_MODE_6, NULL); + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); + R2_INVENTORY.setObjectScene(R2_16, 700); + R2_GLOBALS._player.enableControl(); + break; + case 709: + R2_GLOBALS.setFlag(41); + R2_GLOBALS._player.enableControl(); + break; + case 710: + R2_GLOBALS.clearFlag(41); + R2_GLOBALS._player.enableControl(); + break; + case 5: + // No break on purpose + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + /*-------------------------------------------------------------------------- * Scene 800 - Sick Bay * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 5d5e531d80..0ebcf09da7 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -639,6 +639,69 @@ public: virtual void synchronize(Serializer &s); }; +class Scene700: public SceneExt { + class Item11 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Item12 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor2 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor3 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor4 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor5 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor6 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; +public: + NamedHotspot _item1; + NamedHotspot _item2; + NamedHotspot _item3; + NamedHotspot _item4; + NamedHotspot _item5; + NamedHotspot _item6; + NamedHotspot _item7; + NamedHotspot _item8; + NamedHotspot _item9; + NamedHotspot _item10; + Item11 _item11; + Item12 _item12; + SceneActor _actor1; + Actor2 _actor2; + Actor3 _actor3; + Actor4 _actor4; + Actor5 _actor5; + Actor6 _actor6; + Actor6 _actor7; + Actor6 _actor8; + Actor6 _actor9; + SequenceManager _sequenceManager; + PaletteRotation *_rotation; + int _field100E; + + Scene700(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void synchronize(Serializer &s); +}; + class Scene800: public SceneExt { /* Items */ class Button: public NamedHotspot { -- cgit v1.2.3 From c222afc933aaf9f04d15c4bcc4dd4f6c38bae17a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 2 Feb 2012 00:31:25 +0100 Subject: TSAGE: R2R - Avoid a crash in scene 700 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index a4c2fe5256..39bc41e408 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -5614,7 +5614,11 @@ void Scene700::postInit(SceneObjectList *OwnerList) { void Scene700::remove() { R2_GLOBALS._sound1.play(10); - _rotation->remove(); +// CHECKME: Present in the original... But it crashes badly. +// The instruction was removed as it's not used in other scene coded the same way +// and reversed by dreammaster. A double check is required in order to verify it doesn't hide +// a memory leak +// _rotation->remove(); SceneExt::remove(); } -- cgit v1.2.3 From 27360d20717ae3302f68dc7a171f29624e4c9e11 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 5 Feb 2012 13:20:18 +1100 Subject: TSAGE: Initial implementation of R2R Scene 180 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 17 +- engines/tsage/ringworld2/ringworld2_logic.h | 15 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 515 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 37 ++ engines/tsage/ringworld2/ringworld2_speakers.cpp | 56 +++ engines/tsage/ringworld2/ringworld2_speakers.h | 15 + 6 files changed, 654 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 44953abfd2..1d39169d87 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -59,7 +59,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Empty Bedroom #2 return new Scene175(); case 180: - error("Missing scene %d from group 0", sceneNumber); + // Title Screen + return new Scene180(); case 200: // Deck #2 - By Lift return new Scene200(); @@ -1462,6 +1463,20 @@ void ActionObject::remove() { _endAction = NULL; } +bool ActionObject::load(int rlbNum, Action *endAction) { + warning("TODO ActionOjbect::load"); + return true; +} + +/*--------------------------------------------------------------------------*/ + +void ActionObjectExt::synchronize(Serializer &s) { + ActionObject::synchronize(s); + s.syncAsSint16LE(_v1); +} + + + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 24b8ba07fc..22bea5c216 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -102,6 +102,7 @@ public: virtual void loadScene(int sceneNum); virtual void refreshBackground(int xAmount, int yAmount); virtual void saveCharacter(int characterIndex); + virtual void restore() {} bool display(CursorType action, Event &event); void fadeOut(); @@ -327,12 +328,26 @@ public: EventHandler *_endAction; Rect _rect1, _screenBounds; int _field3A, _field3C; + int _field56; int _field58, _field5A; + ScenePalette _palette; + byte _palData[256 * 3]; public: ActionObject(); virtual void synchronize(Serializer &s); virtual void remove(); + + bool load(int rlbNum, Action *endAction = NULL); + bool proc1() { return false; } + void proc2() {} +}; + +class ActionObjectExt: public ActionObject { +public: + int _v1; + + virtual void synchronize(Serializer &s); }; } // End of namespace Ringworld2 diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 39bc41e408..cacd0745cd 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1461,6 +1461,521 @@ void Scene160::process(Event &event) { SceneExt::process(event); } +/*-------------------------------------------------------------------------- + * Scene 180 - Title Screen + * + *--------------------------------------------------------------------------*/ + +void Scene180::Action1::signal() { + Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + case 1: + case 2: + scene->_object5.setStrip((_actionIndex == 1) ? 1 : 2); + scene->_object5.setFrame(1); + scene->_object5.animate(ANIM_MODE_5, this); + break; + case 4: + scene->_object5.setStrip(3); + scene->_object5.setFrame(1); + scene->_object5.animate(ANIM_MODE_5, this); + _actionIndex = 0; + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene180::Scene180(): SceneExt(), _webbsterSpeaker(27) { + _field412 = 0; + _frameInc = 0; + _frameNumber = R2_GLOBALS._events.getFrameNumber(); + _field480 = 1; + _field482 = -1; + _fontNumber = R2_GLOBALS.gfxManager()._font._fontNumber; + + GfxFont font; + font.setFontNumber(7); + _fontHeight = font.getHeight(); + + _sceneMode = (R2_GLOBALS._sceneManager._previousScene == 205) ? 10 : 0; + _gameTextSpeaker._displayMode = 9; + _stripManager.addSpeaker(&_gameTextSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + _stripManager.addSpeaker(&_tealSpeaker); + _stripManager.addSpeaker(&_dutyOfficerSpeaker); + + signal(); +} + +void Scene180::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(); + loadScene(9999); + + R2_GLOBALS._player._uiEnabled = false; + R2_GLOBALS._player.disableControl(); + +} + +void Scene180::remove() { + _stripManager._field2E8 = -1; +// _stripManager._field2EA = -1; + SceneExt::remove(); + + R2_GLOBALS._events.setCursor(CURSOR_WALK); + // word_575F7 = 0; + R2_GLOBALS._playStream.stop(); + R2_GLOBALS._sound2.fadeOut2(NULL); + R2_GLOBALS._sound1.fadeOut2(NULL); +} + +void Scene180::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_frameNumber); + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field480); + s.syncAsSint16LE(_field482); + s.syncAsSint16LE(_frameInc); + s.syncAsSint16LE(_fontNumber); + s.syncAsSint16LE(_fontHeight); +} + +void Scene180::signal() { + R2_GLOBALS._playStream.stop(); + + switch (_sceneMode) { + case 0: + setFrameInc(6); + break; + + case 1: + _field412 = 1; + R2_GLOBALS._sceneManager._hasPalette = true; + _actionObject._field3C = 2; + _actionObject._v1 = 1; + _actionObject._field56 = 1; + R2_GLOBALS._scene180Mode = 1; + + _actionObject.load(1, NULL); + R2_GLOBALS._scenePalette.loadPalette(_actionObject._palData, 0, 256); + + R2_GLOBALS._sound1.play(1); + break; + + case 2: + R2_GLOBALS._scene180Mode = 1; + R2_GLOBALS._paneRefreshFlag[0] = 3; + + if (R2_GLOBALS._sound1.isPlaying()) { + setFrameInc(1); + } else { + setFrameInc(180); + } + break; + + case 3: + R2_GLOBALS._scene180Mode = 1; + + if (R2_GLOBALS._sound1.isPlaying()) + _sceneMode = 3; + + setFrameInc(1); + break; + + case 4: + case 8: + case 30: + case 43: + case 47: + _field412 = 0; + _palette.loadPalette(0); + _palette.loadPalette(9998); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 8, this); + break; + + case 5: + _actionObject._field3C = 2; + _actionObject._v1 = 1; + _actionObject._field56 = 1; + R2_GLOBALS._scene180Mode = 2; + _actionObject.load(2); + + _field412 = 1; + R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 6, NULL); + R2_GLOBALS._sound1.play(2); + break; + + case 6: + R2_GLOBALS._scene180Mode = 2; + R2_GLOBALS._paneRefreshFlag[0] = 3; + + if (R2_GLOBALS._sound1.isPlaying()) { + setFrameInc(1); + } else { + setFrameInc(180); + } + break; + + case 7: + R2_GLOBALS._scene180Mode = 2; + if (R2_GLOBALS._sound1.isPaused()) + _sceneMode = 7; + setFrameInc(1); + break; + + case 9: + R2_GLOBALS._sound1.play(3); + setFrameInc(2); + break; + + case 10: + loadScene(4002); + R2_GLOBALS._scenePalette.loadPalette(0); + setFrameInc(6); + break; + + case 11: + _field412 = 1; + _object4.postInit(); + _object5.postInit(); + setAction(&_sequenceManager, this, 4000, &_object4, &_object5, NULL); + break; + + case 12: + case 14: + case 16: + case 18: + case 20: + case 22: + case 24: + case 26: + case 46: + setFrameInc((R2_GLOBALS._speechSubtitles & 1) ? 1 : 18); + break; + + case 13: + setAction(&_sequenceManager, this, 4001, &_object4, &_object5, NULL); + break; + + case 15: + setAction(&_sequenceManager, this, 4002, &_object4, &_object5, NULL); + break; + + case 17: + setAction(&_sequenceManager, this, 4003, &_object4, &_object5, NULL); + break; + + case 19: + setAction(&_sequenceManager, this, 4004, &_object4, &_object5, NULL); + break; + + case 21: + setAction(&_sequenceManager, this, 4005, &_object4, &_object5, NULL); + break; + + case 23: + setAction(&_sequenceManager, this, 4006, &_object4, &_object5, NULL); + break; + + case 25: + setAction(&_sequenceManager, this, 4007, &_object4, &_object5, NULL); + break; + + case 27: + _field412 = 0; + _object4.remove(); + _object5.remove(); + setFrameInc(2); + break; + + case 28: + _field412 = 0; + _palette.loadPalette(0); + _palette.loadPalette(9998); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 100, this); + break; + + case 29: + _field412 = 1; + _actionObject._field3C = 0; + _actionObject._v1 = 1; + _actionObject._field56 = 42; + R2_GLOBALS._scene180Mode = 3; + _actionObject.load(3); + break; + + case 31: + R2_GLOBALS._sound2.play(7); + + _object4.postInit(); + _object4.setVisage(76); + _object4.setStrip(1); + _object4.setFrame(1); + _object4.setPosition(Common::Point(288, 143)); + _object4.fixPriority(210); + + loadScene(75); + + R2_GLOBALS._scenePalette.loadPalette(0); + R2_GLOBALS._scenePalette.loadPalette(75); + + if (R2_GLOBALS._sceneManager._hasPalette) + R2_GLOBALS._scenePalette.refresh(); + setFrameInc(6); + break; + + case 32: + _field412 = 1; + + _object2.postInit(); + _object2.setPosition(Common::Point(161, 97)); + _object2.hide(); + + _object3.postInit(); + _object3.setPosition(Common::Point(60, 96)); + _object3.hide(); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 11, this); + break; + + case 33: + _object2.hide(); + + _object3.setup(76, 4, 1); + _object3.setFrame(_object3.getFrameCount()); + + _object5.postInit(); + _object5.setup(75, 1, 1); + _object5.setPosition(Common::Point(221, 125)); + _object5.fixPriority(210); + _object5.setAction(&_action1); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 12, this); + break; + + case 34: + _object2.hide(); + _object3.hide(); + + _object1.postInit(); + _object1.setup(76, 2, 1); + _object1.setPosition(Common::Point(287, 135)); + _object1.fixPriority(200); + + _sound1.play(19); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); + break; + + case 35: + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 13, this); + break; + + case 36: + _object2.remove(); + _sound1.play(19); + + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 6, this); + break; + + case 37: + _field412 = 0; + _object1.remove(); + _palette.loadPalette(9998); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 8, this); + break; + + case 38: + _object4.remove(); + _object5.setAction(NULL); + _object5.remove(); + + R2_GLOBALS._sound2.fadeOut2(NULL); + R2_GLOBALS._sound1.fadeOut2(NULL); + break; + + case 39: + R2_GLOBALS._sound1.changeSound(8); + setFrameInc(1); + break; + + case 40: + _actionObject._field3C = 2; + _actionObject._field56 = 1; + R2_GLOBALS._scene180Mode = 4; + if (_actionObject.load(4)) { + _actionObject.dispatch(); + R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 8, this); + } else { + _sceneMode = 43; + setFrameInc(1); + } + break; + + case 41: + _field412 = 1; + _actionObject._v1 = 1; + break; + + case 42: + R2_GLOBALS._scene180Mode = 4; + R2_GLOBALS._paneRefreshFlag[0] = 3; + setFrameInc(1); + break; + + case 44: + loadScene(9997); + R2_GLOBALS._scenePalette.loadPalette(9997); + if (R2_GLOBALS._sceneManager._hasPalette) + R2_GLOBALS._scenePalette.refresh(); + + setFrameInc(6); + break; + + case 45: + R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 28, this); + break; + + case 48: + _field412 = 1; + _actionObject._field3C = 2; + _actionObject._v1 = 1; + _actionObject._field56 = 1; + R2_GLOBALS._scene180Mode = 15; + _actionObject.load(15, NULL); + + R2_GLOBALS._sound1.play(9); + R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 6, NULL); + break; + + case 49: + R2_GLOBALS._scene180Mode = 15; + R2_GLOBALS._paneRefreshFlag[0] = 3; + setFrameInc(1); + break; + + case 50: + R2_GLOBALS._scene180Mode = 0; + _field412 = 0; + R2_GLOBALS._sceneManager.changeScene(100); + break; + } +} + +void Scene180::setFrameInc(int v) { + _frameInc = v; + _frameNumber = R2_GLOBALS._events.getFrameNumber(); +} + +void Scene180::process(Event &event) { + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { + event.handled = 1; + if (!_field412) { + if (R2_GLOBALS._scenePalette._listeners.size() == 0) { + HelpDialog::show(); + } + } + } + + if (!event.handled) + SceneExt::process(event); +} + +void Scene180::dispatch() { + if (_frameInc) { + uint32 frameNumber = R2_GLOBALS._events.getFrameNumber(); + + if (frameNumber >= frameNumber) { + _frameInc = frameNumber - _frameNumber; + _frameNumber = frameNumber; + + if (_frameInc <= 0) { + _frameInc = 0; + signal(); + } + } + } + + if (_actionObject._v1) { + if (_actionObject.proc1()) { + _actionObject._v1 = 0; + _actionObject.proc2(); + _actionObject.remove(); + + signal(); + } else { + _actionObject.dispatch(); + } + } + + Scene::dispatch(); +} + +void Scene180::restore() { + R2_GLOBALS._gfxColors.background = 0; + R2_GLOBALS._gfxColors.foreground = 0xff; + R2_GLOBALS._fontColors.background = 0; + R2_GLOBALS._fontColors.foreground = 0xff; + + switch (R2_GLOBALS._scene180Mode) { + case 0: + R2_GLOBALS._events.setCursor(SHADECURSOR_HAND); + + R2_GLOBALS._gfxColors.foreground = 4; + R2_GLOBALS._gfxColors.background = 3; + R2_GLOBALS._fontColors.background = 3; + R2_GLOBALS._frameEdgeColour = 3; + break; + + case 1: + R2_GLOBALS._events.setCursor(R2_CURSOR_20); + + R2_GLOBALS._gfxColors.foreground = 25; + R2_GLOBALS._gfxColors.background = 43; + R2_GLOBALS._fontColors.background = 48; + R2_GLOBALS._frameEdgeColour = 48; + break; + + case 2: + R2_GLOBALS._events.setCursor(R2_CURSOR_21); + + R2_GLOBALS._gfxColors.foreground = 106; + R2_GLOBALS._gfxColors.background = 136; + R2_GLOBALS._fontColors.background = 48; + R2_GLOBALS._fontColors.foreground = 253; + R2_GLOBALS._frameEdgeColour = 48; + break; + + case 3: + R2_GLOBALS._events.setCursor(R2_CURSOR_22); + + R2_GLOBALS._gfxColors.foreground = 84; + R2_GLOBALS._gfxColors.background = 118; + R2_GLOBALS._fontColors.background = 47; + R2_GLOBALS._frameEdgeColour = 48; + break; + + case 14: + R2_GLOBALS._events.setCursor(R2_CURSOR_23); + + R2_GLOBALS._fontColors.background = 38; + R2_GLOBALS._fontColors.foreground = 38; + R2_GLOBALS._gfxColors.foreground = 192; + R2_GLOBALS._gfxColors.background = 30; + R2_GLOBALS._frameEdgeColour = 48; + break; + + default: + R2_GLOBALS._gfxColors.background = 0; + R2_GLOBALS._gfxColors.foreground = 59; + R2_GLOBALS._fontColors.background = 4; + R2_GLOBALS._fontColors.foreground = 15; + + R2_GLOBALS._events.setCursor(CURSOR_ARROW); + break; + } +} + /*-------------------------------------------------------------------------- * Scene 200 - Ship Corridor * diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index 0ebcf09da7..f3c8b0bccf 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -189,6 +189,43 @@ public: class Scene175: public Scene150 { }; +class Scene180: public SceneExt { + class Action1: public Action { + public: + void signal(); + }; +private: + void setFrameInc(int v); +public: + SpeakerWebbster _webbsterSpeaker; + SpeakerDutyOfficer _dutyOfficerSpeaker; + SpeakerTeal _tealSpeaker; + SpeakerGameText _gameTextSpeaker; + SceneActor _object1, _object2, _object3, _object4, _object5; + ScenePalette _palette; + SceneText _textList[20]; + ActionObjectExt _actionObject; + SequenceManager _sequenceManager; + Action1 _action1; + ASoundExt _sound1; + + int _frameNumber; + int _field412, _field480; + int _field482, _frameInc; + int _fontNumber, _fontHeight; + int _scene180Mode; +public: + Scene180(); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void synchronize(Serializer &s); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void restore(); +}; + class Scene200: public SceneExt { /* Objects */ class NorthDoor: public SceneActor { diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index 01db39de2f..f729881e8f 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -192,6 +192,17 @@ void VisualSpeaker::setDelay(int delay) { _frameNumber = R2_GLOBALS._events.getFrameNumber(); } +//---------------------------------------------------------------------------- + +SpeakerGameText::SpeakerGameText(): VisualSpeaker() { + _speakerName = "GAMETEXT"; + _color1 = 8; + _color2 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; +} + //---------------------------------------------------------------------------- // Classes related to CAPTAIN //---------------------------------------------------------------------------- @@ -2908,5 +2919,50 @@ void SpeakerWebbster3400::proc15() { } } +//---------------------------------------------------------------------------- + +SpeakerDutyOfficer::SpeakerDutyOfficer(): VisualSpeaker() { + _speakerName = "DUTYOFFICER"; + _color1 = 5; + _color2 = 0; + _fieldF6 = 0; + _textWidth = 300; + _hideObjects = false; + _object2 = NULL; + _displayMode = 1; + _numFrames = 0; +} + +void SpeakerDutyOfficer::proc15() { + Scene180 *scene = (Scene180 *)R2_GLOBALS._sceneManager._scene; + + int v = _fieldF6; + + if (!_object2) { + _object2 = &scene->_object2; + _object2->hide(); + _object1.postInit(); + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + switch (v) { + case 0: + _object1.animate(ANIM_MODE_2, NULL); + break; + case 1: + _action = NULL; + _object1.setup(76, 2, 1); + _object1.animate(ANIM_MODE_5, this); + break; + default: + signal(); + break; + } +} + + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index a229ace16a..e336564c5f 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -63,6 +63,13 @@ public: void setDelay(int delay); }; +class SpeakerGameText : public VisualSpeaker { +public: + SpeakerGameText(); + + virtual Common::String getClassName() { return "SpeakerGameText"; } +}; + // Classes related to Captain class SpeakerCaptain3210 : public VisualSpeaker { @@ -616,6 +623,14 @@ public: virtual void proc15(); }; +class SpeakerDutyOfficer: public VisualSpeaker { +public: + SpeakerDutyOfficer(); + + virtual Common::String getClassName() { return "SpeakerDutyOfficer"; } + virtual void proc15(); +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- cgit v1.2.3 From 4b2938c9d0691afb3d718998b185a7669050b267 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 9 Feb 2012 22:59:33 +0100 Subject: TSAGE: R2R - Very preliminary implementation of scene 1337 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2639 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 174 ++ 3 files changed, 2815 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 1d39169d87..6a986d58c4 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -114,7 +114,8 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1200: return new Scene1200(); case 1330: - error("Missing scene %d from group 1", sceneNumber); + // Card Game + return new Scene1337(); case 1500: // Cutscene: Ship landing return new Scene1500(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index b7ed9aa264..bf25c148f8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1607,6 +1607,2645 @@ void Scene1200::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } +/*-------------------------------------------------------------------------- + * Scene 1337 - Card game + * + *--------------------------------------------------------------------------*/ + +Scene1337::unkObj1337sub1::unkObj1337sub1() { + _field34 = 0; + _field36 = Common::Point(0, 0); +} + +void Scene1337::unkObj1337sub1::synchronize(Serializer &s) { + warning("STUBBED: unkObj1337sub1::synchronize()"); +} + +Scene1337::unkObj1337_1::unkObj1337_1() { + _fieldB94 = Common::Point(0, 0); + _fieldB98 = Common::Point(0, 0); + _fieldB9C = Common::Point(0, 0); + _fieldBA0 = Common::Point(0, 0); + _fieldBA4 = 0; +} + +void Scene1337::unkObj1337_1::synchronize(Serializer &s) { + warning("STUBBED: unkObj1337_1::synchronize()"); +} + +Scene1337::Scene1337() { + _fieldA30 = 0; + _field3E24 = 0; + _field3E26 = 0; + + for (int i = 0; i < 100; i++) + _field3E28[i] = 0; + + _field423C = 0; + _field423E = 0; + _field4240 = 0; + _field4242 = 0; + _field4244 = 0; + _field4246 = 0; + _field4248 = 0; + _field424A = 0; + _field424C = 0; + _field424E = 0; +} + +void Scene1337::synchronize(Serializer &s) { + warning("STUBBED: Scene1337::synchronize()"); +} + +void Scene1337::Action1337::subD18B5(int arg1, int arg2, int arg3) { + warning("STUBBED: Action1337::sub53CD5()"); +} + +void Scene1337::Action1337::skipFrames(int32 skipCount) { + uint32 firstFrameNumber = g_globals->_events.getFrameNumber(); + uint32 tmpFrameNumber = firstFrameNumber; + + while (tmpFrameNumber < firstFrameNumber + skipCount) + tmpFrameNumber = g_globals->_events.getFrameNumber(); + + warning("_eventManager.waitEvent(-1)"); +} + +void Scene1337::Action1::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 1: { + scene->actionDisplay(1331, 6, 159, 10, 1, 200, 0, 7, 0, 154, 154); + R2_GLOBALS._sceneObjects->draw(); + scene->actionDisplay(1331, 7, 159, 10, 1, 200, 0, 7, 0, 154, 154); + scene->actionDisplay(1331, 8, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + scene->_arrunkObj1337[1]._arr2[0]._field34 = 2; + scene->_arrunkObj1337[1]._arr2[0]._object1.postInit(); + scene->_arrunkObj1337[1]._arr2[0]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr2[0]._object1.setPosition(scene->_arrunkObj1337[1]._arr2[0]._field36, 0); + scene->_arrunkObj1337[1]._arr2[0]._object1.setStrip(2); + scene->_arrunkObj1337[1]._arr2[0]._object1.setFrame(scene->_arrunkObj1337[1]._arr2[0]._field34); + scene->_arrunkObj1337[1]._arr2[0]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[1]._arr2[0]); + + scene->_arrunkObj1337[1]._arr2[1]._field34 = 3; + scene->_arrunkObj1337[1]._arr2[1]._object1.postInit(); + scene->_arrunkObj1337[1]._arr2[1]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr2[1]._object1.setPosition(scene->_arrunkObj1337[1]._arr2[1]._field36, 0); + scene->_arrunkObj1337[1]._arr2[1]._object1.setStrip(2); + scene->_arrunkObj1337[1]._arr2[1]._object1.setFrame(scene->_arrunkObj1337[1]._arr2[1]._field34); + scene->_arrunkObj1337[1]._arr2[1]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[1]._arr2[1]); + + scene->_arrunkObj1337[2]._arr2[0]._field34 = 4; + scene->_arrunkObj1337[2]._arr2[0]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[0]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[0]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[0]._field36, 0); + scene->_arrunkObj1337[2]._arr2[0]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[0]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[0]._field34); + scene->_arrunkObj1337[2]._arr2[0]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[0]); + + scene->_arrunkObj1337[3]._arr2[0]._field34 = 5; + scene->_arrunkObj1337[3]._arr2[0]._object1.postInit(); + scene->_arrunkObj1337[3]._arr2[0]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr2[0]._object1.setPosition(scene->_arrunkObj1337[3]._arr2[0]._field36, 0); + scene->_arrunkObj1337[3]._arr2[0]._object1.setStrip(2); + scene->_arrunkObj1337[3]._arr2[0]._object1.setFrame(scene->_arrunkObj1337[3]._arr2[0]._field34); + scene->_arrunkObj1337[3]._arr2[0]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[3]._arr2[0]); + + scene->_arrunkObj1337[3]._arr2[1]._field34 = 6; + scene->_arrunkObj1337[3]._arr2[1]._object1.postInit(); + scene->_arrunkObj1337[3]._arr2[1]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr2[1]._object1.setPosition(scene->_arrunkObj1337[3]._arr2[1]._field36, 0); + scene->_arrunkObj1337[3]._arr2[1]._object1.setStrip(2); + scene->_arrunkObj1337[3]._arr2[1]._object1.setFrame(scene->_arrunkObj1337[3]._arr2[1]._field34); + scene->_arrunkObj1337[3]._arr2[1]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[3]._arr2[1]); + + scene->_arrunkObj1337[3]._arr2[2]._field34 = 7; + scene->_arrunkObj1337[3]._arr2[2]._object1.postInit(); + scene->_arrunkObj1337[3]._arr2[2]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr2[2]._object1.setPosition(scene->_arrunkObj1337[3]._arr2[2]._field36, 0); + scene->_arrunkObj1337[3]._arr2[2]._object1.setStrip(2); + scene->_arrunkObj1337[3]._arr2[2]._object1.setFrame(scene->_arrunkObj1337[3]._arr2[2]._field34); + scene->_arrunkObj1337[3]._arr2[2]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[3]._arr2[2]); + + scene->_arrunkObj1337[0]._arr2[0]._field34 = 8; + scene->_arrunkObj1337[0]._arr2[0]._object1.postInit(); + scene->_arrunkObj1337[0]._arr2[0]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr2[0]._object1.setPosition(scene->_arrunkObj1337[0]._arr2[0]._field36, 0); + scene->_arrunkObj1337[0]._arr2[0]._object1.setStrip(2); + scene->_arrunkObj1337[0]._arr2[0]._object1.setFrame(scene->_arrunkObj1337[0]._arr2[0]._field34); + scene->_arrunkObj1337[0]._arr2[0]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[0]._arr2[0]); + + scene->_arrunkObj1337[0]._arr2[1]._field34 = 9; + scene->_arrunkObj1337[0]._arr2[1]._object1.postInit(); + scene->_arrunkObj1337[0]._arr2[1]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr2[1]._object1.setPosition(scene->_arrunkObj1337[0]._arr2[1]._field36, 0); + scene->_arrunkObj1337[0]._arr2[1]._object1.setStrip(2); + scene->_arrunkObj1337[0]._arr2[1]._object1.setFrame(scene->_arrunkObj1337[0]._arr2[1]._field34); + scene->_arrunkObj1337[0]._arr2[1]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[0]._arr2[1]); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(60); + scene->actionDisplay(1331, 9, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + scene->_arrunkObj1337[2]._arr2[1]._field34 = 2; + scene->_arrunkObj1337[2]._arr2[1]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[1]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[1]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[1]._field36, 0); + scene->_arrunkObj1337[2]._arr2[1]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[1]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[1]._field34); + scene->_arrunkObj1337[2]._arr2[1]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[1]); + + scene->_arrunkObj1337[2]._arr2[2]._field34 = 3; + scene->_arrunkObj1337[2]._arr2[2]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[2]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[2]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[2]._field36, 0); + scene->_arrunkObj1337[2]._arr2[2]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[2]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[2]._field34); + scene->_arrunkObj1337[2]._arr2[2]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[2]); + + scene->_arrunkObj1337[2]._arr2[3]._field34 = 5; + scene->_arrunkObj1337[2]._arr2[3]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[3]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[3]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[3]._field36, 0); + scene->_arrunkObj1337[2]._arr2[3]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[3]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[3]._field34); + scene->_arrunkObj1337[2]._arr2[3]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[3]); + + scene->_arrunkObj1337[2]._arr2[4]._field34 = 6; + scene->_arrunkObj1337[2]._arr2[4]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[4]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[4]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[4]._field36, 0); + scene->_arrunkObj1337[2]._arr2[4]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[4]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[4]._field34); + scene->_arrunkObj1337[2]._arr2[4]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[4]); + + scene->_arrunkObj1337[2]._arr2[5]._field34 = 7; + scene->_arrunkObj1337[2]._arr2[5]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[5]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[5]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[5]._field36, 0); + scene->_arrunkObj1337[2]._arr2[5]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[5]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[5]._field34); + scene->_arrunkObj1337[2]._arr2[5]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[5]); + + scene->_arrunkObj1337[2]._arr2[6]._field34 = 8; + scene->_arrunkObj1337[2]._arr2[6]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[6]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[6]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[6]._field36, 0); + scene->_arrunkObj1337[2]._arr2[6]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[6]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[6]._field34); + scene->_arrunkObj1337[2]._arr2[6]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[6]); + + scene->_arrunkObj1337[2]._arr2[7]._field34 = 9; + scene->_arrunkObj1337[2]._arr2[7]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[7]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[7]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[7]._field36, 0); + scene->_arrunkObj1337[2]._arr2[7]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr2[7]._object1.setFrame(scene->_arrunkObj1337[2]._arr2[7]._field34); + scene->_arrunkObj1337[2]._arr2[7]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[7]); + + scene->_aSound1.play(62); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(120); + scene->_arrunkObj1337[2]._arr2[0]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[1]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[2]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[3]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[4]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[5]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[6]._object1.remove(); + scene->_arrunkObj1337[2]._arr2[7]._object1.remove(); + + scene->_arrunkObj1337[1]._arr2[0]._object1.remove(); + scene->_arrunkObj1337[1]._arr2[1]._object1.remove(); + + scene->_arrunkObj1337[3]._arr2[0]._object1.remove(); + scene->_arrunkObj1337[3]._arr2[1]._object1.remove(); + scene->_arrunkObj1337[3]._arr2[2]._object1.remove(); + + scene->_arrunkObj1337[0]._arr2[0]._object1.remove(); + scene->_arrunkObj1337[0]._arr2[1]._object1.remove(); + + scene->_background2.setup2(1332, 5, 1, 165, 95, 110, 1); + + scene->_arrunkObj1337[1]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[1]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[1]._arr1[0]._field36, 0); + scene->_arrunkObj1337[1]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[1]._arr1[0]._object1.setFrame(4); + scene->_arrunkObj1337[1]._arr1[0]._object1.fixPriority(170); + + scene->_arrunkObj1337[1]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[1]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[1]._arr1[1]._field36, 0); + scene->_arrunkObj1337[1]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[1]._arr1[1]._object1.setFrame(4); + scene->_arrunkObj1337[1]._arr1[1]._object1.fixPriority(170); + + scene->_arrunkObj1337[1]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[1]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[1]._arr1[2]._field36, 0); + scene->_arrunkObj1337[1]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[1]._arr1[2]._object1.setFrame(4); + scene->_arrunkObj1337[1]._arr1[2]._object1.fixPriority(170); + + scene->_arrunkObj1337[2]._arr1[0]._field34 = 30; + scene->_arrunkObj1337[2]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[0]._field36, 0); + scene->_arrunkObj1337[2]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[2]._arr1[0]._object1.setFrame(2); + scene->_arrunkObj1337[2]._arr1[0]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr1[0]); + + scene->_arrunkObj1337[2]._arr1[1]._field34 = 16; + scene->_arrunkObj1337[2]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[1]._field36, 0); + scene->_arrunkObj1337[2]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[2]._arr1[1]._object1.setFrame(2); + scene->_arrunkObj1337[2]._arr1[1]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr1[1]); + + scene->_arrunkObj1337[2]._arr1[2]._field34 = 1; + scene->_arrunkObj1337[2]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[2]._field36, 0); + scene->_arrunkObj1337[2]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[2]._arr1[2]._object1.setFrame(2); + scene->_arrunkObj1337[2]._arr1[2]._object1.fixPriority(170); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr1[2]); + + scene->_arrunkObj1337[3]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[3]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[3]._arr1[0]._field36, 0); + scene->_arrunkObj1337[3]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[3]._arr1[0]._object1.setFrame(3); + scene->_arrunkObj1337[3]._arr1[0]._object1.fixPriority(170); + + scene->_arrunkObj1337[3]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[3]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[3]._arr1[1]._field36, 0); + scene->_arrunkObj1337[3]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[3]._arr1[1]._object1.setFrame(3); + scene->_arrunkObj1337[3]._arr1[1]._object1.fixPriority(170); + + scene->_arrunkObj1337[3]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[3]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[3]._arr1[2]._field36, 0); + scene->_arrunkObj1337[3]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[3]._arr1[2]._object1.setFrame(3); + scene->_arrunkObj1337[3]._arr1[2]._object1.fixPriority(170); + + scene->_arrunkObj1337[0]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[0]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[0]._arr1[0]._field36, 0); + scene->_arrunkObj1337[0]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[0]._arr1[0]._object1.setFrame(2); + scene->_arrunkObj1337[0]._arr1[0]._object1.fixPriority(170); + + scene->_arrunkObj1337[0]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[0]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[0]._arr1[1]._field36, 0); + scene->_arrunkObj1337[0]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[0]._arr1[1]._object1.setFrame(2); + scene->_arrunkObj1337[0]._arr1[1]._object1.fixPriority(170); + + scene->_arrunkObj1337[0]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[0]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[0]._arr1[2]._field36, 0); + scene->_arrunkObj1337[0]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[0]._arr1[2]._object1.setFrame(2); + scene->_arrunkObj1337[0]._arr1[2]._object1.fixPriority(170); + + R2_GLOBALS._sceneObjects->draw(); + + scene->actionDisplay(1331, 10, 159, 10, 1, 200, 0, 7, 0, 154, 154); + scene->_item2._object1.setPosition(Common::Point(162, 95), 0); + scene->_item2._object1.show(); + scene->_aSound2.play(61); + + Common::Point pt(91, 174); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + } + break; + case 2: { + scene->_arrunkObj1337[2]._arr1[3]._field34 = 2; + scene->_arrunkObj1337[2]._arr1[3]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[3]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[3]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[3]._field36, 0); + scene->_arrunkObj1337[2]._arr1[3]._object1.setStrip(1); + scene->_arrunkObj1337[2]._arr1[3]._object1.setFrame(2); + scene->_arrunkObj1337[2]._arr1[3]._object1.fixPriority(170); + + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr1[3]); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(60); + scene->actionDisplay(1331, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + scene->actionDisplay(1331, 12, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + scene->_arrunkObj1337[2]._arr2[1]._field34 = 1; + scene->_arrunkObj1337[2]._arr2[1]._object1.postInit(); + scene->_arrunkObj1337[2]._arr2[1]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr2[1]._object1.setPosition(scene->_arrunkObj1337[2]._arr2[1]._field36, 0); + scene->_arrunkObj1337[2]._arr2[1]._object1.hide(); + + scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[2]._object1._strip); + scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[2]._object1._frame); + scene->_item2._object1.animate(ANIM_MODE_NONE, NULL); + + scene->_arrunkObj1337[2]._arr1[2]._field34 = 0; + scene->_arrunkObj1337[2]._arr1[2]._object1.remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr1[2]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[2]._arr2[1]._field36, this); + } + break; + case 3: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[1]); + scene->_aSound1.play(59); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(60); + scene->actionDisplay(1331, 13, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + scene->_arrunkObj1337[2]._arr2[1]._field34 = scene->_arrunkObj1337[2]._arr1[3]._field34; + + scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[3]._object1._strip); + scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[3]._object1._frame); + + scene->_arrunkObj1337[2]._arr1[3]._field34 = 0; + scene->_arrunkObj1337[2]._arr1[3]._object1.remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr1[3]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[2]._arr2[1]._field36, this); + } + break; + case 4: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr2[1]); + scene->_aSound1.play(59); + + scene->_item7._field34 = 1; + scene->_item7._object1.hide(); + + scene->_item2._object1.setStrip(5); + scene->_item2._object1.setFrame(1); + scene->_item2._object1.animate(ANIM_MODE_2, NULL); + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr2[1]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_item7._field36, this); + } + break; + case 5: { + scene->_item2._object1.hide(); + + scene->_item7._object1.postInit(); + scene->_item7._object1.setVisage(1332); + scene->_item7._object1.setPosition(scene->_item7._field36, 0); + scene->setAnimationInfo(&scene->_item7); + scene->_aSound2.play(61); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(60); + scene->actionDisplay(1331, 14, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + scene->_arrunkObj1337[2]._arr3[0]._object1.postInit(); + scene->_arrunkObj1337[2]._arr3[0]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr3[0]._object1.setPosition(scene->_arrunkObj1337[2]._arr3[0]._field36, 0); + scene->_arrunkObj1337[2]._arr3[0]._object1.hide(); + + scene->_arrunkObj1337[3]._arr1[2]._field34 = 0; + scene->_arrunkObj1337[3]._arr1[2].remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[3]._arr1[2]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[2]._arr3[0]._field36, this); + } + break; + case 6: { + scene->_item2._object1.hide(); + scene->_arrunkObj1337[2]._arr3[0]._field34 = 21; + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr3[0]); + scene->_aSound1.play(57); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(60); + scene->actionDisplay(1331, 15, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + int tmpVal = 15; + int i = -1; + + for (i = 0; i <= 7; i++) { + tmpVal += 29; + + scene->_arrObject1[i].postInit(); + scene->_arrObject1[i].setVisage(1332); + scene->_arrObject1[i].setPosition(Common::Point(tmpVal, 90), 0); + scene->_arrObject1[i].setStrip(3); + scene->_arrObject1[i].fixPriority(190); + + scene->_arrObject2[i].postInit(); + scene->_arrObject2[i].setVisage(1332); + scene->_arrObject2[i].setPosition(Common::Point(tmpVal, 90), 0); + scene->_arrObject2[i].setStrip(7); + scene->_arrObject2[i].setFrame(1); + scene->_arrObject2[i].fixPriority(180); + } + + scene->_arrObject1[0].setFrame(1); + scene->_arrObject1[1].setFrame(3); + scene->_arrObject1[2].setFrame(6); + scene->_arrObject1[3].setFrame(8); + scene->_arrObject1[4].setFrame(9); + scene->_arrObject1[5].setFrame(10); + scene->_arrObject1[6].setFrame(11); + scene->_arrObject1[7].setFrame(12); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(240); + + scene->_arrObject1[0].remove(); + scene->_arrObject1[1].remove(); + scene->_arrObject1[2].remove(); + scene->_arrObject1[3].remove(); + scene->_arrObject1[4].remove(); + scene->_arrObject1[5].remove(); + scene->_arrObject1[6].remove(); + scene->_arrObject1[7].remove(); + + scene->_arrObject2[0].remove(); + scene->_arrObject2[1].remove(); + scene->_arrObject2[2].remove(); + scene->_arrObject2[3].remove(); + scene->_arrObject2[4].remove(); + scene->_arrObject2[5].remove(); + scene->_arrObject2[6].remove(); + scene->_arrObject2[7].remove(); + + scene->_item7._field34 = scene->_arrunkObj1337[2]._arr3[0]._field34; + + scene->_arrunkObj1337[2]._arr3[0]._field34 = 0; + scene->_arrunkObj1337[2]._arr3[0]._object1.remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr3[0]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_item7._field36, this); + } + break; + case 7: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_item7); + scene->_aSound2.play(61); + + R2_GLOBALS._sceneObjects->draw(); + + scene->_arrunkObj1337[2]._arr3[0]._object1.postInit(); + scene->_arrunkObj1337[2]._arr3[0]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr3[0]._object1.setPosition(scene->_arrunkObj1337[2]._arr3[0]._field36, 0); + scene->_arrunkObj1337[2]._arr3[0]._object1.hide(); + + scene->_arrunkObj1337[3]._arr1[1]._field34 = 0; + scene->_arrunkObj1337[3]._arr1[1].remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[3]._arr1[1]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[2]._arr3[0]._field36, this); + } + break; + case 8: { + scene->_item2._object1.hide(); + scene->_arrunkObj1337[2]._arr3[0]._field34 = 14; + scene->setAnimationInfo(&scene->_arrunkObj1337[2]._arr3[0]); + scene->_aSound1.play(57); + + R2_GLOBALS._sceneObjects->draw(); + + scene->actionDisplay(1331, 16, 159, 10, 1, 200, 0, 7, 0, 154, 154); + int tmpVal = 72; + int i = -1; + + for (i = 0; i <= 3; i++) { + tmpVal += 29; + scene->_arrObject1[i].postInit(); + scene->_arrObject1[i].setVisage(1332); + scene->_arrObject1[i].setPosition(Common::Point(tmpVal, 71), 0); + scene->_arrObject1[i].setStrip(3); + scene->_arrObject1[i].fixPriority(190); + + scene->_arrObject2[i].postInit(); + scene->_arrObject2[i].setVisage(1332); + scene->_arrObject2[i].setPosition(Common::Point(tmpVal, 71), 0); + scene->_arrObject2[i].setStrip(7); + scene->_arrObject2[i].setFrame(1); + scene->_arrObject2[i].fixPriority(180); + } + + scene->_arrObject1[0].setFrame(2); + scene->_arrObject1[1].setFrame(5); + scene->_arrObject1[2].setFrame(7); + scene->_arrObject1[3].setFrame(15); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(240); + scene->actionDisplay(1331, 17, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + tmpVal = 72; + for (i = 4; i <= 7; i++) { + tmpVal += 29; + + scene->_arrObject1[i].postInit(); + scene->_arrObject1[i].setVisage(1332); + scene->_arrObject1[i].setPosition(Common::Point(tmpVal, 100), 0); + scene->_arrObject1[i].setStrip(4); + scene->_arrObject1[i].fixPriority(190); + + scene->_arrObject2[i].postInit(); + scene->_arrObject2[i].setVisage(1332); + scene->_arrObject2[i].setPosition(Common::Point(tmpVal, 100), 0); + scene->_arrObject2[i].setStrip(7); + scene->_arrObject2[i].setFrame(1); + scene->_arrObject2[i].fixPriority(180); + } + + scene->_arrObject1[4].setFrame(1); + scene->_arrObject1[5].setFrame(5); + scene->_arrObject1[6].setFrame(7); + scene->_arrObject1[7].setFrame(3); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(240); + + scene->_arrObject1[0].remove(); + scene->_arrObject1[1].remove(); + scene->_arrObject1[2].remove(); + scene->_arrObject1[3].remove(); + scene->_arrObject1[4].remove(); + scene->_arrObject1[5].remove(); + scene->_arrObject1[6].remove(); + scene->_arrObject1[7].remove(); + + scene->_arrObject2[0].remove(); + scene->_arrObject2[1].remove(); + scene->_arrObject2[2].remove(); + scene->_arrObject2[3].remove(); + scene->_arrObject2[4].remove(); + scene->_arrObject2[5].remove(); + scene->_arrObject2[6].remove(); + scene->_arrObject2[7].remove(); + + scene->_item7._field34 = scene->_arrunkObj1337[2]._arr1[0]._field34; + + scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[0]._object1._strip); + scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[0]._object1._frame); + scene->_item2._object1.animate(ANIM_MODE_NONE, NULL); + + scene->_arrunkObj1337[2]._arr1[0]._field34 = 0; + scene->_arrunkObj1337[2]._arr1[0]._object1.remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr1[0]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[2]._arr3[0]._field36, this); + } + break; + case 9: { + scene->_aSound1.play(58); + scene->_arrunkObj1337[2]._arr3[0]._field34 = 0; + scene->_arrunkObj1337[2]._arr3[0].remove(); + scene->_item2._object1.setStrip(5); + scene->_item2._object1.setFrame(1); + scene->_item2._object1.animate(ANIM_MODE_2, NULL); + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr3[0]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_item7._field36, this); + } + break; + case 10: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_item7); + scene->_aSound2.play(61); + + R2_GLOBALS._sceneObjects->draw(); + scene->actionDisplay(1331, 18, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + scene->_arrObject1[0].postInit(); + scene->_arrObject1[0].setVisage(1332); + scene->_arrObject1[0].setPosition(Common::Point(131, 71), 0); + scene->_arrObject1[0].fixPriority(190); + scene->_arrObject1[0].setStrip(3); + scene->_arrObject1[0].setFrame(4); + + scene->_arrObject2[0].postInit(); + scene->_arrObject2[0].setVisage(1332); + scene->_arrObject2[0].setPosition(Common::Point(131, 71), 0); + scene->_arrObject2[0].setStrip(7); + scene->_arrObject2[0].setFrame(1); + scene->_arrObject2[0].fixPriority(180); + + scene->_arrObject1[1].postInit(); + scene->_arrObject1[1].setVisage(1332); + scene->_arrObject1[1].setPosition(Common::Point(160, 71), 0); + scene->_arrObject1[1].fixPriority(190); + scene->_arrObject1[1].setStrip(3); + scene->_arrObject1[1].setFrame(16); + + scene->_arrObject2[1].postInit(); + scene->_arrObject2[1].setVisage(1332); + scene->_arrObject2[1].setPosition(Common::Point(160, 71), 0); + scene->_arrObject2[1].setStrip(7); + scene->_arrObject2[1].setFrame(1); + scene->_arrObject2[1].fixPriority(180); + + scene->_arrObject1[2].postInit(); + scene->_arrObject1[2].setVisage(1332); + scene->_arrObject1[2].setPosition(Common::Point(131, 100), 0); + scene->_arrObject1[2].fixPriority(190); + scene->_arrObject1[2].setStrip(4); + scene->_arrObject1[2].setFrame(4); + + scene->_arrObject2[2].postInit(); + scene->_arrObject2[2].setVisage(1332); + scene->_arrObject2[2].setPosition(Common::Point(131, 100), 0); + scene->_arrObject2[2].setStrip(7); + scene->_arrObject2[2].setFrame(1); + scene->_arrObject2[2].fixPriority(180); + + scene->_arrObject1[3].postInit(); + scene->_arrObject1[3].setVisage(1332); + scene->_arrObject1[3].setPosition(Common::Point(160, 100), 0); + scene->_arrObject1[3].fixPriority(190); + scene->_arrObject1[3].setStrip(4); + scene->_arrObject1[3].setFrame(2); + + scene->_arrObject2[3].postInit(); + scene->_arrObject2[3].setVisage(1332); + scene->_arrObject2[3].setPosition(Common::Point(160, 100), 0); + scene->_arrObject2[3].setStrip(7); + scene->_arrObject2[3].setFrame(1); + scene->_arrObject2[3].fixPriority(180); + + R2_GLOBALS._sceneObjects->draw(); + + skipFrames(240); + + scene->_arrObject1[0].remove(); + scene->_arrObject1[1].remove(); + scene->_arrObject1[2].remove(); + scene->_arrObject1[3].remove(); + + scene->_arrObject2[0].remove(); + scene->_arrObject2[1].remove(); + scene->_arrObject2[2].remove(); + scene->_arrObject2[3].remove(); + + scene->_object1.setFrame(1); + scene->_object1.show(); + scene->_object1.animate(ANIM_MODE_2, NULL); + + R2_GLOBALS._sceneObjects->draw(); + + scene->actionDisplay(1331, 19, 159, 10, 1, 220, 0, 7, 0, 154, 154); + + scene->_object1.hide(); + + scene->actionDisplay(1331, 20, 159, 10, 1, 220, 0, 7, 0, 154, 154); + scene->actionDisplay(1331, 21, 159, 10, 1, 220, 0, 7, 0, 154, 154); + + scene->_item7._field34 = scene->_arrunkObj1337[2]._arr1[1]._field34; + + scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[1]._object1._strip); + scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[1]._object1._frame); + scene->_item2._object1.animate(ANIM_MODE_NONE, NULL); + + scene->_arrunkObj1337[2]._arr1[1]._field34 = 0; + scene->_arrunkObj1337[2]._arr1[1]._object1.remove(); + + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr1[1]._field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_item7._field36, this); + } + break; + case 11: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_item7); + scene->_aSound2.play(61); + scene->_item2._object1.setStrip(5); + scene->_item2._object1.setFrame(1); + scene->_item2._object1.animate(ANIM_MODE_2, NULL); + + R2_GLOBALS._sceneObjects->draw(); + + scene->actionDisplay(1331, 22, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + int i = -1; + for (i = 0; i <= 3; i ++) { + scene->_arrunkObj1337[3]._arr1[i]._field34 = 0; + scene->_arrunkObj1337[3]._arr1[i]._object1.remove(); + + scene->_arrunkObj1337[2]._arr1[i]._field34 = 0; + scene->_arrunkObj1337[2]._arr1[i]._object1.remove(); + + scene->_arrunkObj1337[0]._arr1[i]._field34 = 0; + scene->_arrunkObj1337[0]._arr1[i]._object1.remove(); + + scene->_arrunkObj1337[1]._arr1[i]._field34 = 0; + scene->_arrunkObj1337[1]._arr1[i]._object1.remove(); + } + + for (i = 0; i <= 7; i++) { + scene->_arrunkObj1337[3]._arr2[i]._field34 = 0; + scene->_arrunkObj1337[3]._arr2[i]._object1.remove(); + + scene->_arrunkObj1337[2]._arr2[i]._field34 = 0; + scene->_arrunkObj1337[2]._arr2[i]._object1.remove(); + + scene->_arrunkObj1337[0]._arr2[i]._field34 = 0; + scene->_arrunkObj1337[0]._arr2[i]._object1.remove(); + + scene->_arrunkObj1337[1]._arr2[i]._field34 = 0; + scene->_arrunkObj1337[1]._arr2[i]._object1.remove(); + } + + scene->_arrunkObj1337[2]._arr3[0]._field34 = 0; + scene->_arrunkObj1337[2]._arr3[0]._object1.remove(); + + scene->_item7._field34 = 0; + scene->_item7._object1.remove(); + + scene->_background2.remove(); + } + // No break on purpose + case 0: + R2_GLOBALS._sceneObjects->draw(); + signal(); + break; + case 12: + scene->subCBB1E(); + remove(); + break; + default: + break; + } +} + +void Scene1337::Action2::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + scene->_item3._object1.postInit(); + scene->_item3._object1.setVisage(1332); + scene->_item3._object1.setStrip(8); + scene->_item3._object1.setFrame(1); + scene->_item3._object1.fixPriority(300); + scene->_item3._object1.setPosition(Common::Point(156, 108)); + + scene->_item7._object1.remove(); + scene->_item7._field34 = 0; + + scene->_aSound1.play(60); + scene->_item3._object1.animate(ANIM_MODE_5, this); + break; + case 1: + scene->_item3._object1.setFrame(1); + + scene->_aSound1.play(60); + scene->_item3._object1.animate(ANIM_MODE_5, this); + break; + case 2: { + Common::Point pt(156, 108); + NpcMover *mover = new NpcMover(); + scene->_item3._object1.addMover(mover, &pt, this); + } + break; + case 3: + scene->_item3._object1.remove(); + scene->_background2.setup2(1332, 5, 1, 162, 95, 110, 1); + scene->_field423C = 1; + break; + default: + break; + } +} + +void Scene1337::Action3::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + scene->_item2._object1.setPosition(Common::Point(162, 95), 0); + + switch (_actionIndex++) { + case 0: { + scene->_item2._object1._moveDiff = Common::Point(30, 30); + scene->_item2._object1.setVisage(1332); + scene->_item2._object1.setStrip(5); + scene->_item2._object1.setFrame(1); + scene->_item2._object1.fixPriority(400); + scene->_item2._object1.animate(ANIM_MODE_2, NULL); + scene->_aSound2.play(61); + + Common::Point pt(283, 146); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_item2._object1.show(); + scene->_arrunkObj1337[1]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 1: { + scene->_arrunkObj1337[1]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[1]._arr1[0]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[1]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[1]._arr1[0]._field36, 0); + scene->_arrunkObj1337[1]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[1]._arr1[0]._object1.setFrame(4); + scene->_arrunkObj1337[1]._arr1[0]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(10, 174); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[2]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 2: { + scene->_arrunkObj1337[2]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[0]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[2]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[0]._field36, 0); + scene->_arrunkObj1337[2]._arr1[0]._object1.fixPriority(170); + if (scene->_arrunkObj1337[2]._arr1[0]._field34 > 9) { + if (scene->_arrunkObj1337[2]._arr1[0]._field34 > 25) { + scene->_arrunkObj1337[2]._arr1[0]._object1.setStrip(4); + scene->_arrunkObj1337[2]._arr1[0]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[0]._field34 - 25); + } else { + scene->_arrunkObj1337[2]._arr1[0]._object1.setStrip(3); + scene->_arrunkObj1337[2]._arr1[0]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[0]._field34 - 9); + } + } else { + scene->_arrunkObj1337[2]._arr1[0]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr1[0]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[0]._field34); + } + scene->_aSound2.play(61); + + Common::Point pt(14, 14); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[3]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 3: { + scene->_arrunkObj1337[3]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[3]._arr1[0]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[3]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[3]._arr1[0]._field36, 0); + scene->_arrunkObj1337[3]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[3]._arr1[0]._object1.setFrame(3); + scene->_arrunkObj1337[3]._arr1[0]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(280, 5); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[0]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 4: { + scene->_arrunkObj1337[0]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[0]._arr1[0]._object1._moveDiff = Common::Point(30,30); + scene->_arrunkObj1337[0]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[0]._arr1[0]._field36, 0); + scene->_arrunkObj1337[0]._arr1[0]._object1.setStrip(5); + scene->_arrunkObj1337[0]._arr1[0]._object1.setFrame(1); + scene->_arrunkObj1337[0]._arr1[0]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(283, 124); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[1]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 5: { + scene->_arrunkObj1337[1]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[1]._arr1[1]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[1]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[1]._arr1[1]._field36, 0); + scene->_arrunkObj1337[1]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[1]._arr1[1]._object1.setFrame(4); + scene->_arrunkObj1337[1]._arr1[1]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(37, 174); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[2]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 6: { + scene->_arrunkObj1337[2]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[1]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[2]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[1]._field36, 0); + scene->_arrunkObj1337[2]._arr1[1]._object1.fixPriority(170); + + if (scene->_arrunkObj1337[2]._arr1[1]._field34 > 9) { + if (scene->_arrunkObj1337[2]._arr1[1]._field34 > 25) { + scene->_arrunkObj1337[2]._arr1[1]._object1.setStrip(4); + scene->_arrunkObj1337[2]._arr1[1]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[1]._field34 - 25); + } else { + scene->_arrunkObj1337[2]._arr1[1]._object1.setStrip(3); + scene->_arrunkObj1337[2]._arr1[1]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[1]._field34 - 9); + } + } else { + scene->_arrunkObj1337[2]._arr1[1]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr1[1]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[1]._field34); + } + + scene->_aSound2.play(61); + + Common::Point pt(14, 36); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[3]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 7: { + scene->_arrunkObj1337[3]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[3]._arr1[1]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[3]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[3]._arr1[1]._field36); + scene->_arrunkObj1337[3]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[3]._arr1[1]._object1.setFrame(3); + scene->_arrunkObj1337[3]._arr1[1]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(253, 5); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[0]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 8: { + scene->_arrunkObj1337[0]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[0]._arr1[1]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[0]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[0]._arr1[1]._field36, 0); + scene->_arrunkObj1337[0]._arr1[1]._object1.setStrip(5); + scene->_arrunkObj1337[0]._arr1[1]._object1.setFrame(1); + scene->_arrunkObj1337[0]._arr1[1]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(283, 102); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[1]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 9: { + scene->_arrunkObj1337[1]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[1]._arr1[2]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[1]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[1]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[1]._arr1[2]._field36, 0); + scene->_arrunkObj1337[1]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[1]._arr1[2]._object1.setFrame(4); + scene->_arrunkObj1337[1]._arr1[2]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(64, 174); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[2]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 10: { + scene->_arrunkObj1337[2]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[2]._arr1[2]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[2]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[2]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[2]._arr1[2]._field36, 0); + scene->_arrunkObj1337[2]._arr1[2]._object1.fixPriority(170); + + if (scene->_arrunkObj1337[2]._arr1[2]._field34 > 9) { + if (scene->_arrunkObj1337[2]._arr1[2]._field34 > 25) { + scene->_arrunkObj1337[2]._arr1[2]._object1.setStrip(4); + scene->_arrunkObj1337[2]._arr1[2]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[2]._field34 - 25); + } else { + scene->_arrunkObj1337[2]._arr1[2]._object1.setStrip(3); + scene->_arrunkObj1337[2]._arr1[2]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[2]._field34 - 9); + } + } else { + scene->_arrunkObj1337[2]._arr1[2]._object1.setStrip(2); + scene->_arrunkObj1337[2]._arr1[2]._object1.setFrame(scene->_arrunkObj1337[2]._arr1[2]._field34); + } + + scene->_aSound2.play(61); + + Common::Point pt(14, 58); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[3]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 11: { + scene->_arrunkObj1337[3]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[3]._arr1[2]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[3]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[3]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[3]._arr1[2]._field36, 0); + scene->_arrunkObj1337[3]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[3]._arr1[2]._object1.setFrame(3); + scene->_arrunkObj1337[3]._arr1[2]._object1.fixPriority(170); + scene->_aSound2.play(61); + + Common::Point pt(226, 5); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + + scene->_arrunkObj1337[0]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24]; + } + break; + case 12: + scene->_arrunkObj1337[0]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[0]._arr1[2]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[0]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[0]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[0]._arr1[2]._field36, 0); + scene->_arrunkObj1337[0]._arr1[2]._object1.setStrip(5); + scene->_arrunkObj1337[0]._arr1[2]._object1.setFrame(1); + scene->_arrunkObj1337[0]._arr1[2]._object1.fixPriority(170); + scene->_arrunkObj1337[0]._arr1[2]._object1.hide(); + default: + break; + } + + if (_actionIndex > 12) { + scene->_field423E = 0; + R2_GLOBALS._sceneObjects->draw(); + scene->actionDisplay(1330, 0, 159, 10, 1, 200, 0, 7, 0, 154, 154); + scene->subC20F9(); + } else if (_actionIndex >= 1) { + scene->_field3E28[scene->_field3E24] = 0; + scene->_field3E24--; + } +} + +void Scene1337::Action4::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + if ((scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34))) { + if (scene->_field3E24 < 0) + scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34); + scene->_item2._object1.setPosition(Common::Point(162, 95), 0); + scene->_item2._object1.show(); + scene->_aSound2.play(61); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, scene->_arrunkObj1337[scene->_field423E]._fieldB94, this); + + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; + scene->_field3E28[scene->_field3E24] = 0; + scene->_field3E24--; + + if (scene->_field3E24 < 0) + scene->_background2.remove(); + } else { + // Self call, forcing next actionIndex + signal(); + } + break; + case 1: + if ( ( scene->_item2._object1._position.x == scene->_arrunkObj1337[scene->_field423E]._fieldB94.x) + && ( scene->_item2._object1._position.y == scene->_arrunkObj1337[scene->_field423E]._fieldB94.y) ) { + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1.postInit(); + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1.setVisage(1332); + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1.setPosition(scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field36, 0); + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1.setStrip(1); + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1.setFrame(scene->_arrunkObj1337[scene->_field423E]._fieldBA4); + scene->_arrunkObj1337[scene->_field423E]._arr1[0]._object1.fixPriority(170); + } + + if ((scene->_field4248 == 1) || (scene->_field423E == 2)) + scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[0]); + + scene->_item2._object1.hide(); + if ((scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { + if (scene->_field3E24 < 0) + scene->subCBB7B(); + scene->_item2._object1.setPosition(Common::Point(162, 95)); + scene->_item2._object1.show(); + + scene->_aSound2.play(61); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB98, this); + + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24]; + scene->_field3E28[scene->_field3E24] = 0; + scene->_field3E24--; + if (scene->_field3E24 < 0) + scene->_background2.remove(); + } else + signal(); + break; + case 2: + if ( ( scene->_item2._object1._position.x == scene->_arrunkObj1337[scene->_field423E]._fieldB98.x) + && ( scene->_item2._object1._position.y == scene->_arrunkObj1337[scene->_field423E]._fieldB98.y) ) { + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1.postInit(); + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1.setVisage(1332); + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1.setPosition(scene->_arrunkObj1337[scene->_field423E]._arr1[1]._field36, 0); + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1.setStrip(1); + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1.setFrame(scene->_arrunkObj1337[scene->_field423E]._fieldBA4); + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._object1.fixPriority(170); + } + + if ((scene->_field4248 == 1) || (scene->_field423E == 2)) + scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[1]); + + scene->_item2._object1.hide(); + if ((scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { + if (scene->_field3E24 < 0) + scene->subCBB7B(); + scene->_item2._object1.setPosition(Common::Point(162, 95)); + scene->_item2._object1.show(); + + scene->_aSound2.play(61); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB9C, this); + + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24]; + scene->_field3E28[scene->_field3E24] = 0; + scene->_field3E24--; + if (scene->_field3E24 < 0) + scene->_background2.remove(); + } else + signal(); + break; + case 3: + if ( ( scene->_item2._object1._position.x == scene->_arrunkObj1337[scene->_field423E]._fieldB9C.x) + && ( scene->_item2._object1._position.y == scene->_arrunkObj1337[scene->_field423E]._fieldB9C.y) ) { + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1.postInit(); + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1.setVisage(1332); + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1.setPosition(scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field36, 0); + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1.setStrip(1); + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1.setFrame(scene->_arrunkObj1337[scene->_field423E]._fieldBA4); + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._object1.fixPriority(170); + } + + if ((scene->_field4248 == 1) || (scene->_field423E == 2)) + scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[2]); + + scene->_item2._object1.hide(); + if ((scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { + if (scene->_field3E24 < 0) + scene->subCBB7B(); + scene->_item2._object1.setPosition(Common::Point(162, 95)); + scene->_item2._object1.show(); + + scene->_aSound2.play(61); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldBA0, this); + + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 = scene->_field3E28[scene->_field3E24]; + scene->_field3E28[scene->_field3E24] = 0; + scene->_field3E24--; + if (scene->_field3E24 < 0) + scene->_background2.remove(); + } else + signal(); + break; + case 4: + if ( ( scene->_item2._object1._position.x == scene->_arrunkObj1337[scene->_field423E]._fieldBA0.x) + && ( scene->_item2._object1._position.y == scene->_arrunkObj1337[scene->_field423E]._fieldBA0.y) ) { + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1.postInit(); + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1._moveDiff = Common::Point(30, 30); + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1.setVisage(1332); + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1.setPosition(scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field36, 0); + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1.setStrip(1); + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1.setFrame(scene->_arrunkObj1337[scene->_field423E]._fieldBA4); + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._object1.fixPriority(170); + } + + if ((scene->_field4248 == 1) || (scene->_field423E == 2)) + scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[3]); + + scene->_item2._object1.hide(); + switch (scene->_field423E) { + case 0: + scene->subCF979(); + break; + case 1: + scene->subCF31D(); + break; + case 2: + scene->subD0281(); + break; + case 3: + scene->subC2C2F(); + break; + default: + break; + } + break; + default: + break; + } +} + +void Scene1337::Action5::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3E28[scene->_field3E26] = scene->_field3EF0->_field34; + scene->_field3E26--; + if (!g_globals->_sceneObjects->contains(&scene->_item7._object1)) { + scene->_item7._object1.postInit(); + scene->_item7._object1.hide(); + scene->_item7._object1.setVisage(1332); + scene->_item7._object1.setPosition(scene->_item7._field36, 0); + scene->_item7._object1.fixPriority(170); + } + + scene->_item7._field34 = scene->_field3EF0->_field34; + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + + if (scene->_field3EF0 == &scene->_item6) { + subD18B5(5, 1, 4); + scene->subC4CEC(); + } + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + Common::Point pt(128, 95); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &pt, this); + } + break; + case 1: + scene->_item2._object1.hide(); + scene->setAnimationInfo(&scene->_item7); + scene->_aSound2.play(61); + scene->subC20F9(); + break; + default: + break; + } +} + +void Scene1337::Action6::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3EF4->_field34 = 1; + scene->_field3EF4->_object1.postInit(); + scene->_field3EF4->_object1.hide(); + scene->_field3EF4->_object1.setVisage(1332); + scene->_field3EF4->_object1.setPosition(scene->_field3EF4->_field36); + scene->_field3EF4->_object1.fixPriority(170); + + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF0->_field36); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 1: + scene->_item2._object1.hide(); + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(59); + if (scene->_field3EF0 == &scene->_item6) { + subD18B5(5, 1, 4); + scene->subC4CEC(); + } + scene->subC20F9(); + break; + default: + break; + } +} + +void Scene1337::Action7::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3EF4->_field34 = scene->_field3EF0->_field34; + + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 1: + if (scene->_field3EF0 == &scene->_item6) { + subD18B5(5, 1, 4); + scene->subC4CEC(); + } + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(59); + scene->_item5._field34 = 1; + scene->_item5._field36.x = scene->_field3EF4->_field36.x; + scene->_item5._field36.y = scene->_field3EF4->_field36.y; + scene->_item5._object1.postInit(); + scene->_item5._object1.hide(); + scene->_item5._object1._flags = 0x200; + + scene->subC4A39(&scene->_item5); + break; + default: + break; + } +} + +void Scene1337::Action8::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3E28[scene->_field3E26] = scene->_field3EF4->_field34; + scene->_field3E26--; + + scene->_field3EF4->_field34 = scene->_field3EF0->_field34; + scene->_field3EF0->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 1: + scene->_item2._object1.hide(); + + if (scene->_field3EF0 == &scene->_item6) { + subD18B5(5, 1, 4); + scene->subC4CEC(); + } + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(58); + scene->subC4A39(scene->_field3EF4); + break; + default: + break; + } +} + +void Scene1337::Action9::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3EF4->_field34 = scene->_field3EF0->_field34; + scene->_field3EF4->_object1.postInit(); + scene->_field3EF4->_object1.hide(); + scene->_field3EF4->_object1.setVisage(1332); + scene->_field3EF4->_object1.setPosition(scene->_field3EF4->_field36, 0); + scene->_field3EF4->_object1.fixPriority(170); + + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 1: + scene->_item2._object1.hide(); + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(57); + + if (scene->_field3EF0 == &scene->_item6) { + subD18B5(5, 1, 4); + scene->subC4CEC(); + } + + scene->subC20F9(); + break; + default: + break; + } +} + +void Scene1337::Action10::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3EF8->_object1.postInit(); + scene->_field3EF8->_object1.hide(); + scene->_field3EF8->_object1.setVisage(1332); + scene->_field3EF8->_object1.setPosition(scene->_field3EF8->_field36, 0); + scene->_field3EF8->_object1.fixPriority(170); + scene->_field3EF8->_field34 = scene->_field3EF0->_field34; + + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + + if (scene->_field3EF0 == &scene->_item6) { + subD18B5(5, 1, 4); + scene->subC4CEC(); + } + + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF8->_field36, this); + } + break; + case 1: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(scene->_field3EF8); + scene->_aSound1.play(57); + + bool found = false; + int indexFound = -1; + + switch (scene->_field4240) { + case 0: + for (indexFound = 0; indexFound < 3; indexFound++) { + if (scene->_arrunkObj1337[0]._arr1[indexFound]._field34 == 29) { + found = true; + break; + } + } + break; + case 1: + for (indexFound = 0; indexFound < 3; indexFound++) { + if (scene->_arrunkObj1337[1]._arr1[indexFound]._field34 == 29) { + found = true; + break; + } + } + break; + case 2: + for (indexFound = 0; indexFound < 3; indexFound++) { + if (scene->_arrunkObj1337[2]._arr1[indexFound]._field34 == 29) { + found = true; + break; + } + } + break; + case 3: + for (indexFound = 0; indexFound < 3; indexFound++) { + if (scene->_arrunkObj1337[3]._arr1[indexFound]._field34 == 29) { + found = true; + break; + } + } + break; + default: + break; + } + + bool found2 = false; + + if (found) { + switch (scene->_field4240) { + case 0: + scene->subC51A0(&scene->_arrunkObj1337[0]._arr1[indexFound], scene->_field3EF8); + found2 = true; + break; + case 1: + scene->subC51A0(&scene->_arrunkObj1337[1]._arr1[indexFound], scene->_field3EF8); + found2 = true; + break; + case 2: + scene->subC4CD2(); + if (MessageDialog::show(USE_INTERCEPTOR, NO_MSG, YES_MSG) == 0) + scene->subC4CEC(); + else { + scene->subC51A0(&scene->_arrunkObj1337[2]._arr1[indexFound], scene->_field3EF8); + found2 = true; + } + break; + case 3: + scene->subC51A0(&scene->_arrunkObj1337[3]._arr1[indexFound], scene->_field3EF8); + found2 = true; + break; + default: + break; + } + } + + if (!found2) + break; + + if (scene->_field4240 == 2) { + int j = 0; + for (int i = 0; i <= 7; i++) { + if (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0) + ++j; + } + + if (j <= 1) { + for (int i = 0; i <= 7; i++) { + if (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0) { + scene->_field3EF4 = &scene->_arrunkObj1337[2]._arr2[i]; + break; + } + } + } else { + scene->subC4CD2(); + + found2 = false; + while (!found2) { + scene->actionDisplay(1330, 130, 159, 10, 1, 200, 0, 7, 0, 154, 154); + + // Wait for a mouse or keypress + Event event; + while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) { + g_globals->_scenePalette.signalListeners(); + R2_GLOBALS._sceneObjects->draw(); + g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); + } + + scene->_item6._field36 = event.mousePos; + + for (int i = 0; i <= 7; i++) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[2]._arr2[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0)) { + scene->_field3EF4 = &scene->_arrunkObj1337[2]._arr2[0]; + found2 = true; + break; + } + } + } + scene->subC4CEC(); + } + } + + scene->_field3E28[scene->_field3E26] = scene->_field3EF4->_field34; + scene->_field3E26--; + scene->_field3EF4->_field34 = 0; + scene->_field3EF4->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF4->_field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF8->_field36, this); + } + break; + case 2: + scene->_item2._object1.hide(); + scene->subC4A39(scene->_field3EF8); + break; + default: + break; + } +} + +void Scene1337::Action11::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + bool noAction = true; + + switch (_actionIndex++) { + case 0: { + scene->_field3EF4->_object1.postInit(); + scene->_field3EF4->_object1.hide(); + scene->_field3EF4->_object1.setVisage(1332); + scene->_field3EF4->_object1.setPosition(scene->_field3EF4->_field36, 0); + scene->_field3EF4->_object1.fixPriority(170); + scene->_field3EF4->_field34 = 25; + + if (scene->_field4240 == 2) { + scene->_item2._object1.setPosition(scene->_field3EF4->_field36, 0); + subD18B5(5, 1, 4); + } else { + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + } + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 1: { + scene->_item2._object1.hide(); + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(57); + + bool found = false; + int i = -1; + + switch (scene->_field4242) { + case 0: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[0]._arr1[i]._field34 == 27) { + found = true; + break; + } + } + + if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { + scene->_field3EF0 = &scene->_arrunkObj1337[0]._arr1[i]; + scene->_field3EF4 = &scene->_arrunkObj1337[0]._arr4[0]; + if (scene->_field4240 != 0) { + int tmpVal = scene->subC3E92(scene->_field4240); + scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4240]._arr1[tmpVal]; + } + scene->_item1.setAction(&scene->_action12); + noAction = false; + } + break; + case 1: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[1]._arr1[i]._field34 == 27) { + found = true; + break; + } + } + + if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { + scene->_field3EF0 = &scene->_arrunkObj1337[1]._arr1[i]; + scene->_field3EF4 = &scene->_arrunkObj1337[1]._arr4[0]; + if (scene->_field4240 != 1) { + int tmpVal = scene->subC3E92(scene->_field4240); + scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4240]._arr1[tmpVal]; + } + scene->_item1.setAction(&scene->_action12); + noAction = false; + } + break; + case 2: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[2]._arr1[i]._field34 == 27) { + found = true; + break; + } + } + + if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { + scene->subC4CD2(); + if (MessageDialog::show(USE_DOUBLE_AGENT, NO_MSG, YES_MSG) == 0) + scene->subC4CEC(); + else { + scene->subC4CEC(); + scene->_field3EF0 = &scene->_arrunkObj1337[2]._arr1[i]; + scene->_field3EF4 = &scene->_arrunkObj1337[2]._arr4[0]; + if (scene->_field4240 != 2) { + int tmpVal = scene->subC3E92(scene->_field4240); + scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4240]._arr1[tmpVal]; + } + scene->_item1.setAction(&scene->_action12); + noAction = false; + } + } + break; + case 3: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[3]._arr1[i]._field34 == 27) { + found = true; + break; + } + } + + if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { + scene->_field3EF0 = &scene->_arrunkObj1337[3]._arr1[i]; + scene->_field3EF4 = &scene->_arrunkObj1337[3]._arr4[0]; + if (scene->_field4240 != 3) { + int tmpVal = scene->subC3E92(scene->_field4240); + scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4240]._arr1[tmpVal]; + } + scene->_item1.setAction(&scene->_action12); + noAction = false; + } + break; + default: + break; + } + + if (!noAction) + return; + + if (scene->_field4240 == 2) { + int count = 0; + if (scene->_field4242 != 2) { + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[scene->_field4242]._arr1[i]._field34 == 0) + ++count; + } + } + + if (count > 1) { + scene->subC4CD2(); + + found = false; + while (!found) { + switch (scene->_field4242) { + case 0: + scene->actionDisplay(1330, 131, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 1: + scene->actionDisplay(1330, 132, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 3: + scene->actionDisplay(1330, 133, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + + Event event; + while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) { + g_globals->_scenePalette.signalListeners(); + R2_GLOBALS._sceneObjects->draw(); + g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); + } + + scene->_item6._field36 = event.mousePos; + + found = false; + + if (scene->_field4242 != 2) { + for (i = 0; i <= 3; i++) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[scene->_field4242]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[scene->_field4242]._arr1[i]._field34 != 0)) { + scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4242]._arr1[i]; + found = true; + break; + } + } + } + } // while + scene->_field4246 = 1; + scene->subC4CEC(); + } else { + if (scene->_field4242 != 2) { + int tmpVal = scene->subC3E92(scene->_field4242); + scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4242]._arr1[tmpVal]; + } + } + } + + scene->_field3EF0->_object1.postInit(); + scene->_field3EF0->_object1.hide(); + scene->_field3EF0->_object1.setVisage(1332); + scene->_field3EF0->_object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_field3EF0->_object1.fixPriority(170); + scene->_field3EF0->_object1.setStrip2(1); + scene->_field3EF0->_field34 = scene->_field3EF8->_field34; + + scene->_field3EF8->_field34 = 0; + scene->_field3EF8->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF8->_field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF0->_field36, this); + } + break; + case 2: + scene->_item2._object1.hide(); + switch (scene->_field4240) { + case 0: + scene->_field3EF0->_object1.setFrame(2); + scene->_field3EF0->_object1.show(); + scene->_field423E--; + scene->_field4244 = 0; + break; + case 1: + scene->_field3EF0->_object1.setFrame(4); + scene->_field3EF0->_object1.show(); + scene->_field423E--; + scene->_field4244 = 0; + break; + case 3: + scene->_field3EF0->_object1.setFrame(3); + scene->_field3EF0->_object1.show(); + scene->_field423E--; + scene->_field4244 = 0; + break; + default: + scene->setAnimationInfo(scene->_field3EF0); + break; + } + + scene->subC4A39(scene->_field3EF4); + break; + default: + break; + } +} + +void Scene1337::Action12::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: + signal(); + break; + case 1: { + scene->_field3E28[scene->_field3E26] = scene->_field3EF4->_field34; + scene->_field3EF4->_field34 = scene->_field3EF0->_field34; + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 2: + scene->_item2._object1.hide(); + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(58); + if (scene->_field4242 == 2) { + int count = 0; + int i = -1; + switch (scene->_field4240) { + case 0: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[0]._arr1[i]._field34 != 0) + ++count; + } + break; + case 1: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0) + ++count; + } + break; + case 3: + for (i = 0; i <= 3; i++) { + if (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0) + ++count; + } + break; + default: + break; + } + + if (count > 1) { + scene->subC4CD2(); + + bool found = false; + + while (!found) { + switch (scene->_field4240) { + case 0: + scene->actionDisplay(1330, 131, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 1: + scene->actionDisplay(1330, 132, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 3: + scene->actionDisplay(1330, 133, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + + Event event; + while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) { + g_globals->_scenePalette.signalListeners(); + R2_GLOBALS._sceneObjects->draw(); + g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); + } + + scene->_item6._field36 = event.mousePos; + + if (scene->_field4240 == 0) { + for (i = 0; i <= 3; i++) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[0]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[0]._arr1[i]._field34 != 0)) { + found = true; + scene->_field3EF8 = &scene->_arrunkObj1337[0]._arr1[i]; + break; + } + } + } + + if (scene->_field4240 == 3) { + for (i = 0; i <= 3; i++) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[3]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0)) { + found = true; + scene->_field3EF8 = &scene->_arrunkObj1337[3]._arr1[i]; + break; + } + } + } + + if (scene->_field4240 == 1) { + for (i = 0; i <= 3; i++) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[1]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[1]._arr1[i]._field34 != 0)) { + found = true; + scene->_field3EF8 = &scene->_arrunkObj1337[1]._arr1[i]; + break; + } + } + } + } + scene->subC4CEC(); + } else { + if (scene->_field4240 != 1) { + switch (scene->_field4240) { + case 0: + scene->_field3EF8 = &scene->_arrunkObj1337[0]._arr1[scene->subC3E92(0)]; + break; + case 3: + scene->_field3EF8 = &scene->_arrunkObj1337[3]._arr1[scene->subC3E92(3)]; + break; + default: + break; + } + } else { + scene->_field3EF8 = &scene->_arrunkObj1337[1]._arr1[scene->subC3E92(1)]; + } + } + + scene->_field3EF0->_object1.postInit(); + scene->_field3EF0->_object1.hide(); + scene->_field3EF0->_object1.setVisage(1332); + scene->_field3EF0->_object1.setPosition(scene->_field3EF0->_field36); + scene->_field3EF0->_object1.fixPriority(170); + scene->_field3EF0->_object1.setStrip2(1); + scene->_field3EF0->_field34 = scene->_field3EF8->_field34; + + scene->_field3EF8->_field34 = 0; + scene->_field3EF8->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF8->_field36); + scene->_item2._object1.show(); + scene->_aSound1.play(57); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF0->_field36, this); + } + break; + case 3: + scene->_item2._object1.hide(); + switch (scene->_field4242) { + case 0: + scene->_field3EF0->_object1.setFrame2(2); + scene->_field3EF0->_object1.show(); + break; + case 1: + scene->_field3EF0->_object1.setFrame2(4); + scene->_field3EF0->_object1.show(); + break; + case 3: + scene->_field3EF0->_object1.setFrame2(3); + scene->_field3EF0->_object1.show(); + break; + default: + scene->setAnimationInfo(scene->_field3EF0); + break; + } + scene->subC4A39(scene->_field3EF4); + break; + default: + break; + } +} + +void Scene1337::Action13::signal() { + Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; + + switch (_actionIndex++) { + case 0: { + scene->_field3E28[scene->_field3E26] = scene->_field3EF4->_field34; + scene->_field3E26--; + + scene->_field3EF4->_field34 = scene->_field3EF0->_field34; + + scene->_field3EF0->_field34 = 0; + scene->_field3EF0->_object1.remove(); + + scene->_item2._object1.setPosition(scene->_field3EF0->_field36, 0); + scene->_item2._object1.show(); + + NpcMover *mover = new NpcMover(); + scene->_item2._object1.addMover(mover, &scene->_field3EF4->_field36, this); + } + break; + case 1: + scene->_item2._object1.hide(); + scene->setAnimationInfo(scene->_field3EF4); + scene->_aSound1.play(58); + signal(); + break; + case 2: + scene->subC4A39(scene->_field3EF4); + break; + default: + break; + } +} + +void Scene1337::postInit(SceneObjectList *OwnerList) { +// In the original, may be found in subPostInit. +// Without it, enableControl asserts + loadScene(1330); + SceneExt::postInit(); +// + + R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + + _unkFctPtr412 = NULL; + + _field3EF0 = NULL; + _field3EF4 = NULL; + _field3EF8 = NULL; + + _arrunkObj1337[2]._arr1[0]._field36 = Common::Point(10, 174); + _arrunkObj1337[2]._arr1[1]._field36 = Common::Point(37, 174); + _arrunkObj1337[2]._arr1[2]._field36 = Common::Point(64, 174); + _arrunkObj1337[2]._arr1[3]._field36 = Common::Point(91, 174); + + _arrunkObj1337[2]._arr2[0]._field36 = Common::Point(119, 174); + _arrunkObj1337[2]._arr2[1]._field36 = Common::Point(119, 148); + _arrunkObj1337[2]._arr2[2]._field36 = Common::Point(119, 122); + _arrunkObj1337[2]._arr2[3]._field36 = Common::Point(145, 122); + _arrunkObj1337[2]._arr2[4]._field36 = Common::Point(171, 122); + _arrunkObj1337[2]._arr2[5]._field36 = Common::Point(171, 148); + _arrunkObj1337[2]._arr2[6]._field36 = Common::Point(171, 174); + _arrunkObj1337[2]._arr2[7]._field36 = Common::Point(145, 174); + + _arrunkObj1337[2]._arr3[0]._field36 = Common::Point(199, 174); + + _arrunkObj1337[2]._arr4[0]._field36 = Common::Point(145, 148); + + _arrunkObj1337[2]._fieldB94 = Common::Point(10, 174); + _arrunkObj1337[2]._fieldB98 = Common::Point(37, 174); + _arrunkObj1337[2]._fieldB9C = Common::Point(64, 174); + _arrunkObj1337[2]._fieldBA0 = Common::Point(91, 174); + _arrunkObj1337[2]._fieldBA4 = 2; + + _arrunkObj1337[3]._arr1[0]._field36 = Common::Point(14, 14); + _arrunkObj1337[3]._arr1[1]._field36 = Common::Point(14, 36); + _arrunkObj1337[3]._arr1[2]._field36 = Common::Point(14, 58); + _arrunkObj1337[3]._arr1[3]._field36 = Common::Point(14, 80); + + _arrunkObj1337[3]._arr2[0]._field36 = Common::Point(37, 66); + _arrunkObj1337[3]._arr2[1]._field36 = Common::Point(63, 66); + _arrunkObj1337[3]._arr2[2]._field36 = Common::Point(89, 66); + _arrunkObj1337[3]._arr2[3]._field36 = Common::Point(89, 92); + _arrunkObj1337[3]._arr2[4]._field36 = Common::Point(89, 118); + _arrunkObj1337[3]._arr2[5]._field36 = Common::Point(63, 118); + _arrunkObj1337[3]._arr2[6]._field36 = Common::Point(37, 118); + _arrunkObj1337[3]._arr2[7]._field36 = Common::Point(37, 92); + + _arrunkObj1337[3]._arr3[0]._field36 = Common::Point(37, 145); + + _arrunkObj1337[3]._arr4[0]._field36 = Common::Point(63, 92); + + _arrunkObj1337[3]._fieldB94 = Common::Point(14, 14); + _arrunkObj1337[3]._fieldB98 = Common::Point(14, 36); + _arrunkObj1337[3]._fieldB9C = Common::Point(14, 58); + _arrunkObj1337[3]._fieldBA0 = Common::Point(14, 80); + _arrunkObj1337[3]._fieldBA4 = 3; + + _arrunkObj1337[0]._arr1[0]._field36 = Common::Point(280, 5); + _arrunkObj1337[0]._arr1[1]._field36 = Common::Point(253, 5); + _arrunkObj1337[0]._arr1[2]._field36 = Common::Point(226, 5); + _arrunkObj1337[0]._arr1[3]._field36 = Common::Point(199, 5); + + _arrunkObj1337[0]._arr2[0]._field36 = Common::Point(171, 16); + _arrunkObj1337[0]._arr2[1]._field36 = Common::Point(171, 42); + _arrunkObj1337[0]._arr2[2]._field36 = Common::Point(171, 68); + _arrunkObj1337[0]._arr2[3]._field36 = Common::Point(145, 68); + _arrunkObj1337[0]._arr2[4]._field36 = Common::Point(119, 68); + _arrunkObj1337[0]._arr2[5]._field36 = Common::Point(119, 42); + _arrunkObj1337[0]._arr2[6]._field36 = Common::Point(119, 16); + _arrunkObj1337[0]._arr2[7]._field36 = Common::Point(145, 16); + + _arrunkObj1337[0]._arr3[0]._field36 = Common::Point(91, 16); + + _arrunkObj1337[0]._arr4[0]._field36 = Common::Point(145, 42); + + _arrunkObj1337[0]._fieldB94 = Common::Point(280, 5); + _arrunkObj1337[0]._fieldB98 = Common::Point(253, 5); + _arrunkObj1337[0]._fieldB9C = Common::Point(226, 5); + _arrunkObj1337[0]._fieldBA0 = Common::Point(199, 5); + _arrunkObj1337[0]._fieldBA4 = 2; + + _arrunkObj1337[1]._arr1[0]._field36 = Common::Point(283, 146); + _arrunkObj1337[1]._arr1[1]._field36 = Common::Point(283, 124); + _arrunkObj1337[1]._arr1[2]._field36 = Common::Point(283, 102); + _arrunkObj1337[1]._arr1[3]._field36 = Common::Point(283, 80); + + _arrunkObj1337[1]._arr2[0]._field36 = Common::Point(253, 122); + _arrunkObj1337[1]._arr2[1]._field36 = Common::Point(227, 122); + _arrunkObj1337[1]._arr2[2]._field36 = Common::Point(201, 122); + _arrunkObj1337[1]._arr2[3]._field36 = Common::Point(201, 96); + _arrunkObj1337[1]._arr2[4]._field36 = Common::Point(201, 70); + _arrunkObj1337[1]._arr2[5]._field36 = Common::Point(227, 70); + _arrunkObj1337[1]._arr2[6]._field36 = Common::Point(253, 70); + _arrunkObj1337[1]._arr2[7]._field36 = Common::Point(253, 96); + + _arrunkObj1337[1]._arr3[0]._field36 = Common::Point(253, 43); + + _arrunkObj1337[1]._arr4[0]._field36 = Common::Point(227, 96); + + _arrunkObj1337[1]._fieldB94 = Common::Point(283, 146); + _arrunkObj1337[1]._fieldB98 = Common::Point(283, 124); + _arrunkObj1337[1]._fieldB9C = Common::Point(283, 102); + _arrunkObj1337[1]._fieldBA0 = Common::Point(283, 80); + _arrunkObj1337[1]._fieldBA4 = 4; + + subPostInit(); +} + +void Scene1337::remove() { + if (R2_GLOBALS._v57709 > 1) { + subD1917(); + subD1940(false); + } + + R2_GLOBALS._v58CE2 = 1; + SceneExt::remove(); +} + +void Scene1337::process(Event &event) { + if (event.eventType == EVENT_BUTTON_DOWN) { + if (event.btnState != BTNSHIFT_RIGHT) { + subD183F(R2_GLOBALS._v5780E, 1); + event.handled = true; + } else if (_unkFctPtr412 != NULL) { + FunctionPtrType tmpFctPtr = _unkFctPtr412; + _unkFctPtr412 = NULL; + (this->*tmpFctPtr)(); + event.handled = true; + } + } else if (event.eventType == EVENT_KEYPRESS) { + if (event.kbd.keycode == Common::KEYCODE_SPACE) { + if (_unkFctPtr412 != NULL) { + FunctionPtrType tmpFctPtr = _unkFctPtr412; + _unkFctPtr412 = NULL; + (this->*tmpFctPtr)(); + event.handled = true; + } + } else + warning("Fixme: Find proper keycode value"); + } + + if (!event.handled) + Scene::process(event); +} + +void Scene1337::dispatch() { + if (_field424C == 0) { + ++_field424E; + if (_field424E == 4) { + _field424C = 1; + subCBB1E(); + } + } + Scene::dispatch(); +} + +void Scene1337::actionDisplay(int resNum, int lineNum, int x, int y, int arg5, int width, int textMode, int fontNum, int colFG, int colBGExt, int colFGExt) { + // TODO: Check if it's normal that arg5 is unused and replaced by an hardcoded 0 value + // May hide an original bug + + SceneItem::display(resNum, lineNum, SET_X, x, SET_Y, y, SET_KEEP_ONSCREEN, 0, SET_WIDTH, width, SET_POS_MODE, -1, SET_TEXT_MODE, textMode, SET_FONT, fontNum, SET_FG_COLOR, colFG, SET_EXT_BGCOLOR, colBGExt, SET_EXT_FGCOLOR, colFGExt, LIST_END); +} + +void Scene1337::setAnimationInfo(unkObj1337sub1 *subObj) { + if (!subObj) + return; + + if (subObj->_field34 > 9) { + if (subObj->_field34 > 25) { + subObj->_object1.setStrip2(4); + subObj->_object1.setFrame(subObj->_field34 - 25); + } else { + subObj->_object1.setStrip2(3); + subObj->_object1.setFrame(subObj->_field34 - 9); + } + } else { + subObj->_object1.setStrip2(2); + subObj->_object1.setFrame(subObj->_field34); + } + + subObj->_object1.show(); + R2_GLOBALS._sceneObjects->draw(); +} + +void Scene1337::subC20E5() { + warning("STUBBED lvl2 subC20E5()"); +} + +void Scene1337::subC20F9() { + switch (_field424A) { + case -1: + ++_field423E; + if (_field423E == 3) + _field423E = 0; + + if (_field4244 == 1) { + _object1.show(); + switch (_field423E) { + case 0: + _object1.setStrip(3); + break; + case 1: + _object1.setStrip(4); + break; + case 2: + subD1975(174, 107); + _object1.setStrip(1); + break; + case 3: + subC4CEC(); + _object1.setStrip(2); + break; + default: + break; + } + + if (_fieldA30 == 0) + _unkFctPtr412 = &Scene1337::subC20E5; + else + subC20E5(); + } else { + subC20E5(); + } + break; + case 0: + _aSound2.play(62); + actionDisplay(1330, 135, 159, 10, 1, 200, 0, 7, 0, 154, 154); + actionDisplay(1330, 121, 20, 99, 1, 136, 0, 7, 0, 172, 172); + actionDisplay(1330, 122, 300, 99, 1, 136, 0, 7, 0, 117, 117); + R2_GLOBALS._sceneObjects->draw(); + actionDisplay(1330, 123, 159, 134, 1, 200, 0, 7, 0, 105, 105); + break; + case 1: + _aSound2.play(62); + actionDisplay(1330, 151, 300, 99, 1, 136, 0, 7, 0, 117, 117); + actionDisplay(1330, 118, 20, 99, 1, 136, 0, 7, 0, 172, 172); + actionDisplay(1330, 119, 159, 10, 1, 200, 0, 7, 0, 154, 154); + R2_GLOBALS._sceneObjects->draw(); + actionDisplay(1330, 120, 159, 134, 1, 200, 0, 7, 0, 105, 105); + break; + case 2: + _aSound2.play(62); + actionDisplay(1330, 134, 159, 134, 1, 200, 0, 7, 0, 105, 105); + actionDisplay(1330, 124, 20, 99, 1, 136, 0, 7, 0, 172, 172); + actionDisplay(1330, 126, 159, 10, 1, 200, 0, 7, 0, 154, 154); + R2_GLOBALS._sceneObjects->draw(); + actionDisplay(1330, 125, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + case 3: + _aSound2.play(62); + actionDisplay(1330, 150, 20, 99, 1, 136, 0, 7, 0, 172, 172); + actionDisplay(1330, 115, 300, 99, 1, 136, 0, 7, 0, 117, 117); + actionDisplay(1330, 116, 159, 10, 1, 200, 0, 7, 0, 154, 154); + R2_GLOBALS._sceneObjects->draw(); + actionDisplay(1330, 117, 159, 134, 1, 200, 0, 7, 0, 105, 105); + break; + default: + break; + } + + if (_field424A != -1) + R2_GLOBALS._sceneManager.changeScene(125); + +} + +int Scene1337::subC264B(int arg1) { + warning("STUBBED Scene1337::subC264B()"); + return -1; +} + +int Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt) { + warning("STUBBED Scene1337::subC2BF8()"); + return -1; +} + +void Scene1337::subC2C2F() { + warning("STUBBED Scene1337::subC2C2F()"); +} + +int Scene1337::subC3E92(int arg1) { + warning("STUBBED Scene1337::subC3E92()"); + return -1; +} + +void Scene1337::subC4A39(unkObj1337sub1 *subObj) { + warning("STUBBED Scene1337::subC4A39()"); +} + +void Scene1337::subC4CD2() { + warning("STUBBED Scene1337::subC4CD2()"); +} + +void Scene1337::subC4CEC() { + warning("STUBBED Scene1337::subC4CEC()"); +} + +void Scene1337::subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { + warning("STUBBED Scene1337::subC51A0()"); +} + +void Scene1337::subPostInit() { + R2_GLOBALS._v57709 = 0; + R2_GLOBALS._v5780C = 0; + subD183F(1, 0); + subD1940(true); + subD18F5(); + +// loadScene(1330); +// SceneExt::postInit(); + + R2_GLOBALS._scenePalette.addRotation(224, 235, 1); + + _field3E28[0] = 1; + _field3E28[1] = 1; + _field3E28[2] = 1; + _field3E28[3] = 1; + _field3E28[4] = 1; + _field3E28[5] = 1; + _field3E28[6] = 1; + _field3E28[7] = 1; + _field3E28[8] = 26; + _field3E28[9] = 2; + _field3E28[10] = 2; + _field3E28[11] = 2; + _field3E28[12] = 2; + _field3E28[13] = 2; + _field3E28[14] = 26; + _field3E28[15] = 3; + _field3E28[16] = 3; + _field3E28[17] = 3; + _field3E28[18] = 3; + _field3E28[19] = 3; + _field3E28[20] = 28; + _field3E28[21] = 4; + _field3E28[22] = 4; + _field3E28[23] = 4; + _field3E28[24] = 4; + _field3E28[25] = 4; + _field3E28[26] = 28; + _field3E28[27] = 5; + _field3E28[28] = 5; + _field3E28[29] = 5; + _field3E28[30] = 5; + _field3E28[31] = 5; + _field3E28[32] = 30; + _field3E28[33] = 6; + _field3E28[34] = 6; + _field3E28[35] = 6; + _field3E28[36] = 6; + _field3E28[37] = 6; + _field3E28[38] = 30; + _field3E28[39] = 7; + _field3E28[40] = 7; + _field3E28[41] = 7; + _field3E28[42] = 7; + _field3E28[43] = 7; + _field3E28[44] = 32; + _field3E28[45] = 8; + _field3E28[46] = 8; + _field3E28[47] = 8; + _field3E28[48] = 8; + _field3E28[49] = 8; + _field3E28[50] = 32; + _field3E28[51] = 9; + _field3E28[52] = 9; + _field3E28[53] = 9; + _field3E28[54] = 9; + _field3E28[55] = 9; + _field3E28[56] = 10; + _field3E28[57] = 11; + _field3E28[58] = 12; + _field3E28[59] = 13; + _field3E28[60] = 13; + _field3E28[61] = 14; + _field3E28[62] = 15; + _field3E28[63] = 16; + _field3E28[64] = 17; + _field3E28[65] = 18; + _field3E28[66] = 19; + _field3E28[67] = 20; + _field3E28[68] = 21; + _field3E28[69] = 26; + _field3E28[70] = 28; + _field3E28[71] = 24; + _field3E28[72] = 25; + _field3E28[73] = 25; + _field3E28[74] = 25; + _field3E28[75] = 25; + _field3E28[76] = 26; + _field3E28[77] = 26; + _field3E28[78] = 26; + _field3E28[79] = 27; + _field3E28[80] = 27; + _field3E28[81] = 28; + _field3E28[82] = 28; + _field3E28[83] = 28; + _field3E28[84] = 29; + _field3E28[85] = 29; + _field3E28[86] = 29; + _field3E28[87] = 30; + _field3E28[88] = 30; + _field3E28[89] = 30; + _field3E28[90] = 30; + _field3E28[91] = 32; + _field3E28[92] = 1; + _field3E28[93] = 32; + _field3E28[94] = 32; + _field3E28[95] = 32; + _field3E28[96] = 1; + _field3E28[97] = 1; + _field3E28[98] = 1; + _field3E28[99] = 0; + + _field3E24 = 98; + _field3E26 = 98; + + _item7._field34 = 0; + _item7._field36 = Common::Point(128, 95); + + _item8._field34 = 0; + _item8._field36 = Common::Point(162, 95); + + _item6._field34 = 0; + + _item2._object1.postInit(); + _item2._object1.setVisage(1332); + _item2._object1.setStrip(5); + _item2._object1.setFrame(1); + _item2._object1._moveDiff = Common::Point(10, 10); + _item2._object1.fixPriority(400); + _item2._object1.setPosition(Common::Point(128, 95), 0); + _item2._object1.animate(ANIM_MODE_2, NULL); + _item2._object1.hide(); + + _object1.postInit(); + _object1.setVisage(1334); + _object1.setStrip(1); + _object1.setFrame(1); + _object1._numFrames = 12; + _object1.fixPriority(500); + _object1.setPosition(Common::Point(174, 107), 0); + _object1.animate(ANIM_MODE_2, NULL); + _object1.hide(); + + _field4244 = 1; + _field4246 = 0; + _field4248 = 0; + _field424A = -1; + + _background1.setup2(9531, 1, 1, 249, 168, 155, 0); + + _fieldA30 = 0; + _field424C = 0; + _field424E = 0; +} + +void Scene1337::subCBB1E() { + warning("STUBBED Scene1337::subCBB1E()"); +} + +void Scene1337::subCBB7B() { + warning("STUBBED Scene1337::subCBB7B()"); +} + +void Scene1337::subCF31D() { + warning("STUBBED Scene1337::subCF31D()"); +} + +void Scene1337::subCF979() { + warning("STUBBED Scene1337::subCF979()"); +} + +void Scene1337::subD0281() { + warning("STUBBED Scene1337::subD0281()"); +} + +void Scene1337::subD183F(int arg1, int arg2) { + if ((R2_GLOBALS._v57709 != 0) || (R2_GLOBALS._v5780C != 0)) + return; + + R2_GLOBALS._v5780E = arg1 + arg2; + + if (arg2 != 0) { + if (R2_GLOBALS._v5780E < 1) + R2_GLOBALS._v5780E = 2; + + if (R2_GLOBALS._v5780E > 2) + R2_GLOBALS._v5780E = 1; + } + + if (R2_GLOBALS._v5780E == 1) { + R2_GLOBALS._v57810 = 200; + subD195F(1, 4); + } else if (R2_GLOBALS._v5780E == 2) { + R2_GLOBALS._v57810 = 300; + subD195F(1, 5); + } else { + R2_GLOBALS._v57810 = 0; + subD195F(0, 0); + } +} + +void Scene1337::subD18B5(int resNum, int rlbNum, int arg3) { + warning("STUBBED lvl3 Scene1337::subD18B5()"); +} + +void Scene1337::subD18F5() { + warning("STUBBED Scene1337::subD18F5()"); +} + +void Scene1337::subD1917() { + warning("STUBBED Scene1337::subD1917()"); +} + +void Scene1337::subD1940(bool flag) { + warning("STUBBED Scene1337::subD1940()"); +} + +void Scene1337::subD195F(int arg1, int arg2) { + subD18B5(5, arg1, arg2); +} + +void Scene1337::subD1975(int arg1, int arg2) { + warning("STUBBED lvl2 Scene1337::subD1975()"); +} + /*-------------------------------------------------------------------------- * Scene 1500 - Cutscene: Ship landing * diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index be4f32ac3f..ccc0c3df5d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -169,6 +169,180 @@ public: virtual void saveCharacter(int characterIndex); }; +class Scene1337 : public SceneExt { + class unkObj1337sub1: public SceneItem { + public: + SceneObject _object1; + + int _field34; + Common::Point _field36; + + unkObj1337sub1(); + void synchronize(Serializer &s); + }; + + class unkObj1337_1: public SceneItem { + public: + unkObj1337sub1 _arr1[4]; + unkObj1337sub1 _arr2[7]; + unkObj1337sub1 _arr3[1]; + unkObj1337sub1 _arr4[1]; + + Common::Point _fieldB94; + Common::Point _fieldB98; + Common::Point _fieldB9C; + Common::Point _fieldBA0; + int _fieldBA4; + + unkObj1337_1(); + void synchronize(Serializer &s); + }; + + class Action1337: public Action { + public: + void subD18B5(int arg1, int arg2, int arg3); + void skipFrames(int32 skipCount); + }; + + class Action1: public Action1337 { + public: + void signal(); + }; + class Action2: public Action1337 { + public: + void signal(); + }; + class Action3: public Action1337 { + public: + void signal(); + }; + class Action4: public Action1337 { + public: + void signal(); + }; + class Action5: public Action1337 { + public: + void signal(); + }; + class Action6: public Action1337 { + public: + void signal(); + }; + class Action7: public Action1337 { + public: + void signal(); + }; + class Action8: public Action1337 { + public: + void signal(); + }; + class Action9: public Action1337 { + public: + void signal(); + }; + class Action10: public Action1337 { + public: + void signal(); + }; + class Action11: public Action1337 { + public: + void signal(); + }; + class Action12: public Action1337 { + public: + void signal(); + }; + class Action13: public Action1337 { + public: + void signal(); + }; +public: + typedef void (Scene1337::*FunctionPtrType)(); + FunctionPtrType _unkFctPtr412; + + ASound _aSound1; + ASound _aSound2; + BackgroundSceneObject _background1; + int _fieldA30; + unkObj1337_1 _arrunkObj1337[4]; + SceneItem _item1; + SceneObject _object1; + Action1 _action1; + Action2 _action2; + Action3 _action3; + Action4 _action4; + Action5 _action5; + Action6 _action6; + Action7 _action7; + Action8 _action8; + Action9 _action9; + Action10 _action10; + Action11 _action11; + Action12 _action12; + Action13 _action13; + unkObj1337sub1 _item2; + unkObj1337sub1 _item3; + unkObj1337sub1 _item4; + BackgroundSceneObject _background2; + int _field3E24; + int _field3E26; + int _field3E28[100]; + unkObj1337sub1 *_field3EF0; + unkObj1337sub1 *_field3EF4; + unkObj1337sub1 *_field3EF8; + unkObj1337sub1 _item5; + unkObj1337sub1 _item6; + unkObj1337sub1 _item7; + unkObj1337sub1 _item8; + int _field423C; + int _field423E; + int _field4240; + int _field4242; + int _field4244; + int _field4246; + int _field4248; + int _field424A; + int _field424C; + int _field424E; + + SceneObject _arrObject1[8]; + SceneObject _arrObject2[8]; + + Scene1337(); + virtual void synchronize(Serializer &s); + + void actionDisplay(int resNum, int lineNum, int x, int y, int arg5, int width, int textMode, int fontNum, int colFG, int colBGExt, int colFGExt); + void setAnimationInfo(unkObj1337sub1 *subObj); + void subC20E5(); + void subC20F9(); + int subC264B(int arg1); + int subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt); + void subC2C2F(); + int subC3E92(int arg1); + void subC4A39(unkObj1337sub1 *subObj); + void subC4CD2(); + void subC4CEC(); + void subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subPostInit(); + void subCBB1E(); + void subCBB7B(); + void subCF31D(); + void subCF979(); + void subD0281(); + void subD183F(int arg1, int arg2); + void subD18B5(int resNum, int rlbNum, int arg3); + void subD18F5(); + void subD1917(); + void subD1940(bool flag); + void subD195F(int arg1, int arg2); + void subD1975(int arg1, int arg2); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void process(Event &event); + virtual void dispatch(); +}; + class Scene1500 : public SceneExt { public: SceneActor _actor1; -- cgit v1.2.3 From 6b16fe9423af831cc2d2c4448410c80b18a07541 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Thu, 9 Feb 2012 23:08:13 +0100 Subject: TSAGE: Fix compilation by passing non-POD via pointer through "...". The other uses seem to pass Common::Point via a pointer to the object too, so this seems fine to do here too. --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index bf25c148f8..e1357762da 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2759,7 +2759,7 @@ void Scene1337::Action4::signal() { scene->_aSound2.play(61); NpcMover *mover = new NpcMover(); - scene->_item2._object1.addMover(mover, scene->_arrunkObj1337[scene->_field423E]._fieldB94, this); + scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB94, this); scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; scene->_field3E28[scene->_field3E24] = 0; -- cgit v1.2.3 From 9e6e286db7b8f0359a2517ee91d1c1257d557846 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 10 Feb 2012 07:11:20 +0100 Subject: TSAGE: R2R - Fix glitch in scene 180 Thanks to LordHoto for reporting it --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index cacd0745cd..1c924ba336 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1885,7 +1885,7 @@ void Scene180::dispatch() { if (_frameInc) { uint32 frameNumber = R2_GLOBALS._events.getFrameNumber(); - if (frameNumber >= frameNumber) { + if (frameNumber >= (uint32)_frameNumber) { _frameInc = frameNumber - _frameNumber; _frameNumber = frameNumber; -- cgit v1.2.3 From 3f6f814c6a20e2eb745c9b03722ce3456685411c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 10 Feb 2012 07:12:11 +0100 Subject: TSAGE: R2R - Fix error in scene 1337 Thanks to LordHoto for reporting it --- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index ccc0c3df5d..b366c6475f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -184,7 +184,7 @@ class Scene1337 : public SceneExt { class unkObj1337_1: public SceneItem { public: unkObj1337sub1 _arr1[4]; - unkObj1337sub1 _arr2[7]; + unkObj1337sub1 _arr2[8]; unkObj1337sub1 _arr3[1]; unkObj1337sub1 _arr4[1]; -- cgit v1.2.3 From 928fd72a359d00f0cae45b9ca49c4b8f24e08d90 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 11 Feb 2012 11:10:21 +0100 Subject: TSAGE: R2R - scene 1337: Implement some missing functions --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 117 +++++++++++++++++++++--- engines/tsage/ringworld2/ringworld2_scenes1.h | 14 ++- 2 files changed, 114 insertions(+), 17 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index e1357762da..b3907d7162 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2430,7 +2430,7 @@ void Scene1337::Action1::signal() { signal(); break; case 12: - scene->subCBB1E(); + scene->suggestInstructions(); remove(); break; default: @@ -3870,7 +3870,7 @@ void Scene1337::dispatch() { ++_field424E; if (_field424E == 4) { _field424C = 1; - subCBB1E(); + suggestInstructions(); } } Scene::dispatch(); @@ -3905,7 +3905,7 @@ void Scene1337::setAnimationInfo(unkObj1337sub1 *subObj) { } void Scene1337::subC20E5() { - warning("STUBBED lvl2 subC20E5()"); + subC2586(); } void Scene1337::subC20F9() { @@ -3985,11 +3985,52 @@ void Scene1337::subC20F9() { } +void Scene1337::subC2586() { + if (_field4244 != 0) + _object1.hide(); + + switch (_field423E) { + case 2: + subC4CD2(); + if (_field4246 == 1) + actionDisplay(1330, 114, 159, 10, 1, 200, 0, 7, 0, 154, 154); + _field4246 = 0; + // No break on purpose + case 0: + // No break on purpose + case 1: + // No break on purpose + case 3: + _item1.setAction(&_action4); + default: + break; + } + + _field4244 = 1; + +} + int Scene1337::subC264B(int arg1) { warning("STUBBED Scene1337::subC264B()"); return -1; } +int Scene1337::subC27F9(int arg1) { + switch (arg1) { + case 10: + case 12: + case 15: + case 17: + case 18: + case 19: + case 20: + case 21: + return arg1; + default: + return -1; + } +} + int Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt) { warning("STUBBED Scene1337::subC2BF8()"); return -1; @@ -4009,7 +4050,10 @@ void Scene1337::subC4A39(unkObj1337sub1 *subObj) { } void Scene1337::subC4CD2() { - warning("STUBBED Scene1337::subC4CD2()"); + if (R2_GLOBALS._v57709 > 0) { + subD1917(); + subD1940(false); + } } void Scene1337::subC4CEC() { @@ -4176,14 +4220,32 @@ void Scene1337::subPostInit() { _field424E = 0; } -void Scene1337::subCBB1E() { - warning("STUBBED Scene1337::subCBB1E()"); +void Scene1337::suggestInstructions() { + if (R2_GLOBALS._v57709 > 0) + subD1917(); + if (MessageDialog::show(NEED_INSTRUCTIONS, NO_MSG, YES_MSG) == 0) { + if (R2_GLOBALS._v57709 == 0) + subD18F5(); + subCCF26(); + } else { + if (R2_GLOBALS._v57709 == 0) + subD18F5(); + subCB59B(); + } +} + +void Scene1337::subCB59B() { + _item1.setAction(&_action1); } void Scene1337::subCBB7B() { warning("STUBBED Scene1337::subCBB7B()"); } +void Scene1337::subCCF26() { + warning("STUBBED Scene1337::subCCF26()"); +} + void Scene1337::subCF31D() { warning("STUBBED Scene1337::subCF31D()"); } @@ -4192,8 +4254,19 @@ void Scene1337::subCF979() { warning("STUBBED Scene1337::subCF979()"); } +void Scene1337::subD026D() { + subD02CA(); +} + void Scene1337::subD0281() { - warning("STUBBED Scene1337::subD0281()"); + if (subC27F9(this->_arrunkObj1337[2]._arr3[0]._field34) == -1) + _unkFctPtr412 = &Scene1337::subD026D; + else + subC4A39(&_arrunkObj1337[2]._arr3[0]); +} + +void Scene1337::subD02CA() { + warning("STUBBED lvl4 Scene1337::subD02CA()"); } void Scene1337::subD183F(int arg1, int arg2) { @@ -4226,16 +4299,34 @@ void Scene1337::subD18B5(int resNum, int rlbNum, int arg3) { warning("STUBBED lvl3 Scene1337::subD18B5()"); } -void Scene1337::subD18F5() { - warning("STUBBED Scene1337::subD18F5()"); +int Scene1337::subD18F5() { + if (R2_GLOBALS._v57709 == 0) + // The cursor looks... very dummy + // To be checked + warning("TODO: CursorManager.setData(R2_GLOBALS.off_57705)"); + + ++R2_GLOBALS._v57709; + + return R2_GLOBALS._v57709; } -void Scene1337::subD1917() { - warning("STUBBED Scene1337::subD1917()"); +int Scene1337::subD1917() { + if (R2_GLOBALS._v57709 != 0) { + R2_GLOBALS._v57709--; + if (R2_GLOBALS._v57709 != 0) + warning("FIXME: subD195F(_width, _data);"); + } + + return R2_GLOBALS._v57709; } -void Scene1337::subD1940(bool flag) { - warning("STUBBED Scene1337::subD1940()"); +int Scene1337::subD1940(bool flag) { + if (flag) + ++R2_GLOBALS._v5780C; + else if (R2_GLOBALS._v5780C != 0) + --R2_GLOBALS._v5780C; + + return R2_GLOBALS._v5780C; } void Scene1337::subD195F(int arg1, int arg2) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index b366c6475f..53db763f13 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -315,7 +315,9 @@ public: void setAnimationInfo(unkObj1337sub1 *subObj); void subC20E5(); void subC20F9(); + void subC2586(); int subC264B(int arg1); + int subC27F9(int arg1); int subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt); void subC2C2F(); int subC3E92(int arg1); @@ -324,16 +326,20 @@ public: void subC4CEC(); void subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); void subPostInit(); - void subCBB1E(); + void subCB59B(); + void suggestInstructions(); void subCBB7B(); + void subCCF26(); void subCF31D(); void subCF979(); + void subD026D(); void subD0281(); + void subD02CA(); void subD183F(int arg1, int arg2); void subD18B5(int resNum, int rlbNum, int arg3); - void subD18F5(); - void subD1917(); - void subD1940(bool flag); + int subD18F5(); + int subD1917(); + int subD1940(bool flag); void subD195F(int arg1, int arg2); void subD1975(int arg1, int arg2); -- cgit v1.2.3 From 056fc6250cc04a38772870139a8208ffde425765 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 11 Feb 2012 12:35:05 +0100 Subject: TSAGE: R2R - Scene 1337: Implement shuffleCards() Game is now starting --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 59 ++++++++++++++++++++++--- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 2 files changed, 54 insertions(+), 7 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index b3907d7162..c04134a873 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -2790,7 +2790,7 @@ void Scene1337::Action4::signal() { scene->_item2._object1.hide(); if ((scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { if (scene->_field3E24 < 0) - scene->subCBB7B(); + scene->shuffleCards(); scene->_item2._object1.setPosition(Common::Point(162, 95)); scene->_item2._object1.show(); @@ -2825,7 +2825,7 @@ void Scene1337::Action4::signal() { scene->_item2._object1.hide(); if ((scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { if (scene->_field3E24 < 0) - scene->subCBB7B(); + scene->shuffleCards(); scene->_item2._object1.setPosition(Common::Point(162, 95)); scene->_item2._object1.show(); @@ -2860,7 +2860,7 @@ void Scene1337::Action4::signal() { scene->_item2._object1.hide(); if ((scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { if (scene->_field3E24 < 0) - scene->subCBB7B(); + scene->shuffleCards(); scene->_item2._object1.setPosition(Common::Point(162, 95)); scene->_item2._object1.show(); @@ -4238,12 +4238,59 @@ void Scene1337::subCB59B() { _item1.setAction(&_action1); } -void Scene1337::subCBB7B() { - warning("STUBBED Scene1337::subCBB7B()"); +void Scene1337::shuffleCards() { + R2_GLOBALS._sceneObjects->draw(); + + for (int i = 0; i <= 98; i++) { + if (_field3E28[i] == 0) { + for (int j = i + 1; j <= 98; j ++) { + if (_field3E28[j] != 0) { + _field3E28[i] = _field3E28[j]; + _field3E28[j] = 0; + break; + } + } + } + } + + for (int i = 0; i <= 99; i ++) { + if (_field3E28[i] == 0) { + _field3E24 = i - 1; + _field3E26 = 98; + break; + } + } + + // tmpVal is never modified in the original. It looks weird but it works: at the end, the cards are suffled! + int tmpVal = 0; + int randIndx; + int swap; + for (int i = 0; i < 2000; i ++) { + randIndx = R2_GLOBALS._randomSource.getRandomNumber(_field3E24); + swap = _field3E28[tmpVal]; + _field3E28[tmpVal] = _field3E28[randIndx]; + _field3E28[randIndx] = swap; + } + + _field423C = 0; + _item2._object1.setAction(&_action2); + + while(_field423C == 0) { + g_globals->_scenePalette.signalListeners(); + R2_GLOBALS._sceneObjects->draw(); + warning("TODO: recurse on draw() and on signalListeners()?"); + g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); + + // Hack to avoid eternal loop + // To be removed when the recurse is working properly + _field423C = 1; + } } void Scene1337::subCCF26() { - warning("STUBBED Scene1337::subCCF26()"); + _item2._object1._moveDiff = Common::Point(30, 30); + shuffleCards(); + _item1.setAction(&_action3); } void Scene1337::subCF31D() { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 53db763f13..2a91980756 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -328,7 +328,7 @@ public: void subPostInit(); void subCB59B(); void suggestInstructions(); - void subCBB7B(); + void shuffleCards(); void subCCF26(); void subCF31D(); void subCF979(); -- cgit v1.2.3 From 7760f8358a45ae746f07bbbb42f86d19fc85a0c7 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 12 Feb 2012 11:32:16 +0100 Subject: TSAGE: R2R - Scene 1337: Implement main AI function, with all sub-functions stubbed --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 315 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 30 ++- 2 files changed, 336 insertions(+), 9 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index c04134a873..7857363482 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4010,20 +4010,75 @@ void Scene1337::subC2586() { } -int Scene1337::subC264B(int arg1) { - warning("STUBBED Scene1337::subC264B()"); +bool Scene1337::subC264B(int arg1) { + switch (arg1) { + case 10: + // No break on purpose + case 12: + // No break on purpose + case 15: + // No break on purpose + case 17: + // No break on purpose + case 18: + // No break on purpose + case 19: + // No break on purpose + case 20: + // No break on purpose + case 21: + return true; + default: + return false; + } +} + +int Scene1337::subC2687(int arg1) { + warning("STUBBED Scene1337::subC2687()"); + return -1; +} + +int Scene1337::subC26CB(int arg1, int arg2) { + warning("STUBBED Scene1337::subC26CB()"); + return -1; +} + +int Scene1337::subC2719(int arg1) { + warning("STUBBED Scene1337::subC2719()"); + return -1; +} + +int Scene1337::subC274D(int arg1) { + warning("STUBBED Scene1337::subC274D()"); + return -1; +} + +int Scene1337::subC2781(int arg1) { + warning("STUBBED Scene1337::subC2781()"); + return -1; +} + +int Scene1337::subC27B5(int arg1) { + warning("STUBBED Scene1337::subC27B5()"); return -1; } int Scene1337::subC27F9(int arg1) { switch (arg1) { case 10: + // No break on purpose case 12: + // No break on purpose case 15: + // No break on purpose case 17: + // No break on purpose case 18: + // No break on purpose case 19: + // No break on purpose case 20: + // No break on purpose case 21: return arg1; default: @@ -4031,6 +4086,10 @@ int Scene1337::subC27F9(int arg1) { } } +void Scene1337::subC2835(int arg1) { + warning("STUBBED Scene1337::subC2835()"); +} + int Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt) { warning("STUBBED Scene1337::subC2BF8()"); return -1; @@ -4040,11 +4099,50 @@ void Scene1337::subC2C2F() { warning("STUBBED Scene1337::subC2C2F()"); } +void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj2) { + warning("STUBBED Scene1337::subC318B()"); +} + +int Scene1337::subC32B1(int arg1) { + warning("STUBBED Scene1337::subC32B1()"); + return -1; +} + +int Scene1337::subC331B(int arg1) { + warning("STUBBED Scene1337::subC331B()"); + return -1; +} + +int Scene1337::subC3386(int arg1, int arg2) { + warning("STUBBED Scene1337::subCF979()"); + return -1; +} + +void Scene1337::subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { + warning("STUBBED Scene1337::subC33C0()"); +} + int Scene1337::subC3E92(int arg1) { warning("STUBBED Scene1337::subC3E92()"); return -1; } +void Scene1337::subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { + warning("STUBBED Scene1337::subC340B()"); +} + +void Scene1337::subC3456(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { + warning("STUBBED Scene1337::subC3456()"); +} + +void Scene1337::subC34A1(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { + warning("STUBBED Scene1337::subC34A1()"); +} + +void Scene1337::subC358E(unkObj1337sub1 *subObj1) { + warning("STUBBED Scene1337::subC358E()"); +} + void Scene1337::subC4A39(unkObj1337sub1 *subObj) { warning("STUBBED Scene1337::subC4A39()"); } @@ -4295,6 +4393,219 @@ void Scene1337::subCCF26() { void Scene1337::subCF31D() { warning("STUBBED Scene1337::subCF31D()"); + int tmpVal = 1; + bool found; + int count; + + if (this->_arrunkObj1337[1]._arr3[0]._field34 != 0) { + switch (_arrunkObj1337[1]._arr3[0]._field34) { + case 10: + // No break on purpose + case 12: + // No break on purpose + case 15: + // No break on purpose + case 17: + // No break on purpose + case 18: + // No break on purpose + case 19: + // No break on purpose + case 20: + // No break on purpose + case 21: + tmpVal = 0; + subC4A39(&_arrunkObj1337[1]._arr3[0]); + break; + default: + found = false; + int i; + for (i = 0; i <= 3; i++) { + if (subC3386(_arrunkObj1337[1]._arr3[0]._field34, _arrunkObj1337[1]._arr1[i]._field34) != 0) { + found = true; + break; + } + } + + if (found) { + tmpVal = 0; + subC34A1(&_arrunkObj1337[1]._arr1[i], &_arrunkObj1337[1]._arr3[0]); + } + } + } + + if (tmpVal != 1) + return; + + found = false; + for (int i = 0; i <= 3; i++) { + int tmpIndx = subC26CB(1, i); + if (tmpIndx == -1) + break; + + tmpVal = 0; + for (int j = 0; j <= 7; j++) { + if (_arrunkObj1337[1]._arr2[j]._field34 == _arrunkObj1337[1]._arr1[tmpIndx]._field34) { + tmpVal = 1; + break; + } + } + + if (tmpVal == 0) + break; + + for (int j = 0; j <= 7; j++) { + if (_arrunkObj1337[1]._arr2[j]._field34 == 1) { + if (subC2687(_arrunkObj1337[1]._arr3[0]._field34) == 0) { + count = 0; + for (int k = 0; k <= 7; k++) { + if ((_arrunkObj1337[1]._arr2[k]._field34 > 1) && (_arrunkObj1337[1]._arr2[k]._field34 <= 9)) + ++count; + } + + if (count == 7) + _field424A = 1; + + subC33C0(&_arrunkObj1337[1]._arr1[tmpIndx], &_arrunkObj1337[1]._arr2[j]); + found = true; + break; + } + } + } + } + + if (found) + return; + + tmpVal = subC2719(1); + if (tmpVal != -1) { + for (int i = 0; i <= 7; i++) { + if ((_arrunkObj1337[1]._arr2[i]._field34 == 0) && (subC2687(_arrunkObj1337[1]._arr3[0]._field34) == 0)) { + subC340B(&_arrunkObj1337[1]._arr1[tmpVal], &_arrunkObj1337[1]._arr2[i]); + found = true; + } + } + } + + if (found) + return; + + tmpVal = subC274D(1); + + if ((tmpVal != -1) && (subC331B(1) != -1)) + subC358E(&_arrunkObj1337[1]._arr1[tmpVal]); + + if (found) + return; + + tmpVal = subC2781(1); + if (tmpVal != -1) { + count = -1; + int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3); + for (int i = 0; i <= 3; i++) { + if (rndVal != 1) { + if ( (_arrunkObj1337[rndVal]._arr1[0]._field34 != 0) + || (_arrunkObj1337[rndVal]._arr1[1]._field34 != 0) + || (_arrunkObj1337[rndVal]._arr1[2]._field34 != 0) + || (_arrunkObj1337[rndVal]._arr1[3]._field34 == 0)) { + count = rndVal; + break; + } + + rndVal--; + if (rndVal < 0) + rndVal = 3; + } + } + + if (count != -1) { + subC318B(1, &_arrunkObj1337[1]._arr1[tmpVal]); + found = true; + } + } + + if (found) + return; + + count = -1; + int i; + for (i = 0; i <= 3; i++) { + tmpVal = subC27B5(_arrunkObj1337[1]._arr1[i]._field34); + if (tmpVal != -1) { + int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3); + + for (int j = 0; j <= 3; j++) { + if (tmpVal != 1) { + for (int k = 0; k <= 7; k++) { + // 'k' is not used in that loop. + // It looks suspicious. + if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(_arrunkObj1337[1]._arr1[i]._field34) == 1)) { + count = tmpVal; + break; + } + } + } + + if (count != -1) { + found = true; + break; + } else { + rndVal--; + if (rndVal < 0) + rndVal = 3; + } + } + + if (found) + break; + } + } + + if (found) { + if (count == -1) + return; + + subC3456(&_arrunkObj1337[1]._arr1[i], &_arrunkObj1337[count]._arr3[0]); + } else { + int j; + for (j = 0; j <= 3; j++) { + if (subC27F9(_arrunkObj1337[1]._arr1[j]._field34) != -1) { + count = -1; + int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3); + for (int l = 0; l <= 3; l++) { + if (rndVal != 1) { + for (int m = 0; m <= 7; m++) { + // 'm' is not used in that loop. It looks suspicious. + if ((_arrunkObj1337[rndVal]._arr3[0]._field34 == 0) && (_arrunkObj1337[1]._arr1[j]._field34 == 1)) { + count = rndVal; + break; + } + } + } + if (count != -1) { + found = true; + break; + } else { + rndVal--; + if (rndVal < 0) + rndVal = 3; + } + } + if (found) + break; + } + } + + if (found) { + if (count == -1) + return; + + subC3456(&_arrunkObj1337[1]._arr1[j], &_arrunkObj1337[count]._arr3[0]); + } else { + subC2835(1); + } + } + } void Scene1337::subCF979() { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 2a91980756..1e67029f87 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -316,11 +316,27 @@ public: void subC20E5(); void subC20F9(); void subC2586(); - int subC264B(int arg1); - int subC27F9(int arg1); - int subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt); + bool subC264B(int arg1); + int subC2687(int arg1); + int subC26CB(int arg1, int arg2); + int subC2719(int arg1); + int subC274D(int arg1); + int subC2781(int arg1); + int subC27B5(int arg1); + int subC27F9(int arg1); + void subC2835(int arg1); + int subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt); void subC2C2F(); - int subC3E92(int arg1); + void subC318B(int arg1, unkObj1337sub1 *subObj2); + int subC32B1(int arg1); + int subC331B(int arg1); + int subC3386(int arg1, int arg2); + void subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subC3456(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subC34A1(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subC358E(unkObj1337sub1 *subObj1); + int subC3E92(int arg1); void subC4A39(unkObj1337sub1 *subObj); void subC4CD2(); void subC4CEC(); @@ -337,9 +353,9 @@ public: void subD02CA(); void subD183F(int arg1, int arg2); void subD18B5(int resNum, int rlbNum, int arg3); - int subD18F5(); - int subD1917(); - int subD1940(bool flag); + int subD18F5(); + int subD1917(); + int subD1940(bool flag); void subD195F(int arg1, int arg2); void subD1975(int arg1, int arg2); -- cgit v1.2.3 From 93619b96d33619014a0ed18878410ade85295caa Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 12 Feb 2012 13:09:07 +0100 Subject: TSAGE: R2R - Scene 1337: Implement 7 functions used by AI --- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 65 ++++++++++++++++++++----- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 3 files changed, 54 insertions(+), 14 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 6a986d58c4..83ca51faf5 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -113,6 +113,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { return new Scene1100(); case 1200: return new Scene1200(); + case 1337: case 1330: // Card Game return new Scene1337(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 7857363482..4395e5c386 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4033,34 +4033,71 @@ bool Scene1337::subC264B(int arg1) { } } -int Scene1337::subC2687(int arg1) { - warning("STUBBED Scene1337::subC2687()"); - return -1; +bool Scene1337::subC2687(int arg1) { + switch (arg1) { + case 11: + // No break on purpose + case 14: + // No break on purpose + case 16: + // No break on purpose + case 24: + return true; + default: + return false; + } } int Scene1337::subC26CB(int arg1, int arg2) { - warning("STUBBED Scene1337::subC26CB()"); + if ((_arrunkObj1337[arg1]._arr1[arg2]._field34 > 1) && (_arrunkObj1337[arg1]._arr1[arg2]._field34 <= 9)) { + return arg2; + } + return -1; } int Scene1337::subC2719(int arg1) { - warning("STUBBED Scene1337::subC2719()"); + for (int i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 1) + return i; + } + return -1; } int Scene1337::subC274D(int arg1) { - warning("STUBBED Scene1337::subC274D()"); + for (int i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 13) + return i; + } + return -1; } int Scene1337::subC2781(int arg1) { - warning("STUBBED Scene1337::subC2781()"); + for (int i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 25) + return i; + } + return -1; } int Scene1337::subC27B5(int arg1) { - warning("STUBBED Scene1337::subC27B5()"); - return -1; + switch (arg1) { + case 11: + // No break on purpose + case 14: + // No break on purpose + case 16: + // No break on purpose + case 24: + return arg1; + break; + default: + return -1; + break; + } } int Scene1337::subC27F9(int arg1) { @@ -4128,7 +4165,10 @@ int Scene1337::subC3E92(int arg1) { } void Scene1337::subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { - warning("STUBBED Scene1337::subC340B()"); + _field3EF0 = subObj1; + _field3EF4 = subObj2; + + _item1.setAction(&_action6); } void Scene1337::subC3456(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { @@ -4392,7 +4432,6 @@ void Scene1337::subCCF26() { } void Scene1337::subCF31D() { - warning("STUBBED Scene1337::subCF31D()"); int tmpVal = 1; bool found; int count; @@ -4456,7 +4495,7 @@ void Scene1337::subCF31D() { for (int j = 0; j <= 7; j++) { if (_arrunkObj1337[1]._arr2[j]._field34 == 1) { - if (subC2687(_arrunkObj1337[1]._arr3[0]._field34) == 0) { + if (!subC2687(_arrunkObj1337[1]._arr3[0]._field34)) { count = 0; for (int k = 0; k <= 7; k++) { if ((_arrunkObj1337[1]._arr2[k]._field34 > 1) && (_arrunkObj1337[1]._arr2[k]._field34 <= 9)) @@ -4480,7 +4519,7 @@ void Scene1337::subCF31D() { tmpVal = subC2719(1); if (tmpVal != -1) { for (int i = 0; i <= 7; i++) { - if ((_arrunkObj1337[1]._arr2[i]._field34 == 0) && (subC2687(_arrunkObj1337[1]._arr3[0]._field34) == 0)) { + if ((_arrunkObj1337[1]._arr2[i]._field34 == 0) && (!subC2687(_arrunkObj1337[1]._arr3[0]._field34))) { subC340B(&_arrunkObj1337[1]._arr1[tmpVal], &_arrunkObj1337[1]._arr2[i]); found = true; } diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 1e67029f87..d23ce00793 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -317,7 +317,7 @@ public: void subC20F9(); void subC2586(); bool subC264B(int arg1); - int subC2687(int arg1); + bool subC2687(int arg1); int subC26CB(int arg1, int arg2); int subC2719(int arg1); int subC274D(int arg1); -- cgit v1.2.3 From 0ba3335674dcd88d34d1d2ab8453658191d31c38 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 12 Feb 2012 16:14:25 +0100 Subject: TSAGE: R2R - Scene 1337: Implement 2 functions used by AI --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 150 +++++++++++++++++++++++- 1 file changed, 148 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 4395e5c386..0c95ee3f25 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4124,7 +4124,151 @@ int Scene1337::subC27F9(int arg1) { } void Scene1337::subC2835(int arg1) { - warning("STUBBED Scene1337::subC2835()"); + int i; + bool found = false; + switch (arg1) { + case 0: + for (i = 0; i <= 3; i++) { + if (subC27F9(_arrunkObj1337[arg1]._arr1[i]._field34) != -1) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (subC27B5(_arrunkObj1337[arg1]._arr1[i]._field34) != -1) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if ((_arrunkObj1337[arg1]._arr1[i]._field34 > 1) && (_arrunkObj1337[arg1]._arr1[i]._field34 <= 9)) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if ((_arrunkObj1337[arg1]._arr1[i]._field34 >= 26) && (_arrunkObj1337[arg1]._arr1[i]._field34 <= 33)) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 1) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 25) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 13) { + found = true; + break; + } + } + break; + case 1: + for (i = 0; i <= 3; i++) { + if ((_arrunkObj1337[arg1]._arr1[i]._field34 >= 26) && (_arrunkObj1337[arg1]._arr1[i]._field34 <= 33)) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 1) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if ((_arrunkObj1337[arg1]._arr1[i]._field34 > 1) && (_arrunkObj1337[arg1]._arr1[i]._field34 <= 9)) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (subC27F9(_arrunkObj1337[arg1]._arr1[i]._field34) != -1) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (subC27B5(_arrunkObj1337[arg1]._arr1[i]._field34) != -1) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 25) { + found = true; + break; + } + } + + if (found) + break; + + for (i = 0; i <= 3; i++) { + if (_arrunkObj1337[arg1]._arr1[i]._field34 == 13) { + found = true; + break; + } + } + + break; + default: + return; + } + + subC4A39(&_arrunkObj1337[arg1]._arr1[i]); } int Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt) { @@ -4184,7 +4328,9 @@ void Scene1337::subC358E(unkObj1337sub1 *subObj1) { } void Scene1337::subC4A39(unkObj1337sub1 *subObj) { - warning("STUBBED Scene1337::subC4A39()"); + _field3EF0 = subObj; + + _item1.setAction(&_action5); } void Scene1337::subC4CD2() { -- cgit v1.2.3 From a5b02677775f06bd0de99b81de104d24a3abc50e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 13 Feb 2012 22:11:18 +0100 Subject: TSAGE: R2R - Scene 1337: Implement subD02CA() plus a couple of little functions used by AI --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 504 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 17 +- 2 files changed, 495 insertions(+), 26 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 0c95ee3f25..6dd0fb42e5 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1657,7 +1657,7 @@ void Scene1337::synchronize(Serializer &s) { warning("STUBBED: Scene1337::synchronize()"); } -void Scene1337::Action1337::subD18B5(int arg1, int arg2, int arg3) { +void Scene1337::Action1337::subD18B5(int resNum, int stripNum, int frameNum) { warning("STUBBED: Action1337::sub53CD5()"); } @@ -3239,7 +3239,7 @@ void Scene1337::Action10::signal() { scene->_item6._field36 = event.mousePos; for (int i = 0; i <= 7; i++) { - if ((scene->subC2BF8(&scene->_arrunkObj1337[2]._arr2[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0)) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[2]._arr2[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0)) { scene->_field3EF4 = &scene->_arrunkObj1337[2]._arr2[0]; found2 = true; break; @@ -3438,7 +3438,7 @@ void Scene1337::Action11::signal() { if (scene->_field4242 != 2) { for (i = 0; i <= 3; i++) { - if ((scene->subC2BF8(&scene->_arrunkObj1337[scene->_field4242]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[scene->_field4242]._arr1[i]._field34 != 0)) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[scene->_field4242]._arr1[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[scene->_field4242]._arr1[i]._field34 != 0)) { scene->_field3EF8 = &scene->_arrunkObj1337[scene->_field4242]._arr1[i]; found = true; break; @@ -3587,7 +3587,7 @@ void Scene1337::Action12::signal() { if (scene->_field4240 == 0) { for (i = 0; i <= 3; i++) { - if ((scene->subC2BF8(&scene->_arrunkObj1337[0]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[0]._arr1[i]._field34 != 0)) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[0]._arr1[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[0]._arr1[i]._field34 != 0)) { found = true; scene->_field3EF8 = &scene->_arrunkObj1337[0]._arr1[i]; break; @@ -3597,7 +3597,7 @@ void Scene1337::Action12::signal() { if (scene->_field4240 == 3) { for (i = 0; i <= 3; i++) { - if ((scene->subC2BF8(&scene->_arrunkObj1337[3]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0)) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[3]._arr1[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0)) { found = true; scene->_field3EF8 = &scene->_arrunkObj1337[3]._arr1[i]; break; @@ -3607,7 +3607,7 @@ void Scene1337::Action12::signal() { if (scene->_field4240 == 1) { for (i = 0; i <= 3; i++) { - if ((scene->subC2BF8(&scene->_arrunkObj1337[1]._arr1[i], &scene->_item6._field36) != 0) && (scene->_arrunkObj1337[1]._arr1[i]._field34 != 0)) { + if ((scene->subC2BF8(&scene->_arrunkObj1337[1]._arr1[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[1]._arr1[i]._field34 != 0)) { found = true; scene->_field3EF8 = &scene->_arrunkObj1337[1]._arr1[i]; break; @@ -4271,20 +4271,40 @@ void Scene1337::subC2835(int arg1) { subC4A39(&_arrunkObj1337[arg1]._arr1[i]); } -int Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt) { - warning("STUBBED Scene1337::subC2BF8()"); - return -1; +bool Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point pt) { + if ((subObj1->_field36.x > pt.x) || (subObj1->_field36.x + 24 < pt.x)) + return false; + + if ((subObj1->_field36.y > pt.y) || (subObj1->_field36.y + 24 < pt.y)) + return false; + + return true; } void Scene1337::subC2C2F() { warning("STUBBED Scene1337::subC2C2F()"); } -void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj2) { - warning("STUBBED Scene1337::subC318B()"); +void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj1, int arg3) { + _field4240 = arg1; + _field4242 = arg3; + + int randIndx; + + for (;;) { + randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); + if (_arrunkObj1337[arg3]._arr1[randIndx]._field34 != 0) + break; + } + + _field3EF0 = subObj1; + _field3EF4 = &_arrunkObj1337[arg3]._arr4[0]; + _field3EF8 = &_arrunkObj1337[arg3]._arr1[randIndx]; + + _item1.setAction(&_action11); } -int Scene1337::subC32B1(int arg1) { +int Scene1337::subC32B1(int arg1, int arg2) { warning("STUBBED Scene1337::subC32B1()"); return -1; } @@ -4323,8 +4343,17 @@ void Scene1337::subC34A1(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { warning("STUBBED Scene1337::subC34A1()"); } -void Scene1337::subC358E(unkObj1337sub1 *subObj1) { - warning("STUBBED Scene1337::subC358E()"); +Scene1337::unkObj1337sub1 *Scene1337::subC34EC(int arg1) { + warning("STUBBED Scene1337::subC34EC()"); + return NULL; +} + +void Scene1337::subC358E(unkObj1337sub1 *subObj1, int arg2) { + _field3EF0 = subObj1; + _field3EF4 = subC34EC(arg2); + _field3EF8 = &_arrunkObj1337[arg2]._arr4[0]; + _field4240 = arg2; + _item1.setAction(&_action10); } void Scene1337::subC4A39(unkObj1337sub1 *subObj) { @@ -4577,6 +4606,10 @@ void Scene1337::subCCF26() { _item1.setAction(&_action3); } +void Scene1337::subCDB90(int arg1, Common::Point *pt) { + warning("STUBBED: subCDB90()"); +} + void Scene1337::subCF31D() { int tmpVal = 1; bool found; @@ -4676,9 +4709,10 @@ void Scene1337::subCF31D() { return; tmpVal = subC274D(1); + int tmpVal2 = subC331B(1); - if ((tmpVal != -1) && (subC331B(1) != -1)) - subC358E(&_arrunkObj1337[1]._arr1[tmpVal]); + if ((tmpVal != -1) && ( tmpVal2 != -1)) + subC358E(&_arrunkObj1337[1]._arr1[tmpVal], tmpVal2); if (found) return; @@ -4704,7 +4738,7 @@ void Scene1337::subCF31D() { } if (count != -1) { - subC318B(1, &_arrunkObj1337[1]._arr1[tmpVal]); + subC318B(1, &_arrunkObj1337[1]._arr1[tmpVal], count); found = true; } } @@ -4724,7 +4758,7 @@ void Scene1337::subCF31D() { for (int k = 0; k <= 7; k++) { // 'k' is not used in that loop. // It looks suspicious. - if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(_arrunkObj1337[1]._arr1[i]._field34) == 1)) { + if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(tmpVal, _arrunkObj1337[1]._arr1[i]._field34) == 1)) { count = tmpVal; break; } @@ -4809,7 +4843,418 @@ void Scene1337::subD0281() { } void Scene1337::subD02CA() { - warning("STUBBED lvl4 Scene1337::subD02CA()"); + _item6._field36 = g_globals->_events._mousePos; + + if (R2_GLOBALS._v57810 == 200) { + int di; + for (di = 0; di < 4; di++) { + if ((subC2BF8(&_arrunkObj1337[2]._arr1[di], _item6._field36) != 0) && (_arrunkObj1337[2]._arr1[di]._field34 != 0)) { + _item6._field34 = _arrunkObj1337[2]._arr1[di]._field34; + _item6._field36 = _arrunkObj1337[2]._arr1[di]._field36; + // _item6._actorName = _arrunkObj1337[2]._arr1[di]._actorName; + _item6._fieldE = _arrunkObj1337[2]._arr1[di]._fieldE; + _item6._field10 = _arrunkObj1337[2]._arr1[di]._field10; + warning("_item6._field12 = _arrunkObj1337[2]._arr1[di]._field12;"); + warning("_item6._field14 = _arrunkObj1337[2]._arr1[di]._field14;"); + warning("_item6._field16 = _arrunkObj1337[2]._arr1[di]._field16;"); + _item6._sceneRegionId = _arrunkObj1337[2]._arr1[di]._sceneRegionId; + _item6._position = _arrunkObj1337[2]._arr1[di]._position; + _item6._yDiff = _arrunkObj1337[2]._arr1[di]._yDiff; + _item6._bounds = _arrunkObj1337[2]._arr1[di]._bounds; + _item6._resNum = _arrunkObj1337[2]._arr1[di]._resNum; + _item6._lookLineNum = _arrunkObj1337[2]._arr1[di]._lookLineNum; + _item6._talkLineNum = _arrunkObj1337[2]._arr1[di]._talkLineNum; + _item6._useLineNum = _arrunkObj1337[2]._arr1[di]._useLineNum; + _item6._action = _arrunkObj1337[2]._arr1[di]._action; + warning("_item6._field0 = _arrunkObj1337[2]._arr1[di]._field0;"); + _item6._object1._updateStartFrame = _arrunkObj1337[2]._arr1[di]._object1._updateStartFrame; + _item6._object1._walkStartFrame = _arrunkObj1337[2]._arr1[di]._object1._walkStartFrame; + // _field2E is named _field3C in R2R + _item6._object1._field2E = _arrunkObj1337[2]._arr1[di]._object1._field2E; + _item6._object1._percent = _arrunkObj1337[2]._arr1[di]._object1._percent; + _item6._object1._priority = _arrunkObj1337[2]._arr1[di]._object1._priority; + _item6._object1._angle = _arrunkObj1337[2]._arr1[di]._object1._angle; + _item6._object1._flags = _arrunkObj1337[2]._arr1[di]._object1._flags; + _item6._object1._xe = _arrunkObj1337[2]._arr1[di]._object1._xe; + _item6._object1._xs = _arrunkObj1337[2]._arr1[di]._object1._xs; + _item6._object1._paneRects[0] = _arrunkObj1337[2]._arr1[di]._object1._paneRects[0]; + _item6._object1._paneRects[1] = _arrunkObj1337[2]._arr1[di]._object1._paneRects[1]; + _item6._object1._visage = _arrunkObj1337[2]._arr1[di]._object1._visage; + _item6._object1._objectWrapper = _arrunkObj1337[2]._arr1[di]._object1._objectWrapper; + _item6._object1._strip = _arrunkObj1337[2]._arr1[di]._object1._strip; + _item6._object1._animateMode = _arrunkObj1337[2]._arr1[di]._object1._animateMode; + _item6._object1._frame = _arrunkObj1337[2]._arr1[di]._object1._frame; + _item6._object1._endFrame = _arrunkObj1337[2]._arr1[di]._object1._endFrame; + // _field68 is named _field76 in R2R + _item6._object1._field68 = _arrunkObj1337[2]._arr1[di]._object1._field68; + _item6._object1._frameChange = _arrunkObj1337[2]._arr1[di]._object1._frameChange; + _item6._object1._numFrames = _arrunkObj1337[2]._arr1[di]._object1._numFrames; + _item6._object1._regionIndex = _arrunkObj1337[2]._arr1[di]._object1._regionIndex; + _item6._object1._mover = _arrunkObj1337[2]._arr1[di]._object1._mover; + _item6._object1._moveDiff = _arrunkObj1337[2]._arr1[di]._object1._moveDiff; + _item6._object1._moveRate = _arrunkObj1337[2]._arr1[di]._object1._moveRate; + _item6._object1._field8A = _arrunkObj1337[2]._arr1[di]._object1._field8A; + _item6._object1._endAction = _arrunkObj1337[2]._arr1[di]._object1._endAction; + _item6._object1._regionBitList = _arrunkObj1337[2]._arr1[di]._object1._regionBitList; + // _item6._object1._actorName = _arrunkObj1337[2]._arr1[di]._object1._actorName; + _item6._object1._fieldE = _arrunkObj1337[2]._arr1[di]._object1._fieldE; + _item6._object1._field10 = _arrunkObj1337[2]._arr1[di]._object1._field10; + warning("_item6._object1._field12 = _arrunkObj1337[2]._arr1[di]._object1._field12;"); + warning("_item6._object1._field14 = _arrunkObj1337[2]._arr1[di]._object1._field14;"); + warning("_item6._object1._field16 = _arrunkObj1337[2]._arr1[di]._object1._field16;"); + _item6._object1 = _arrunkObj1337[2]._arr1[di]._object1; + } + } + + if (di == 4) { + subCDB90(1, &_item6._field36); + subD0281(); + return; + } + } else if (R2_GLOBALS._v57810 == 300) { + subCDB90(3, &_item6._field36); + subD0281(); + return; + } else { + subD1A48(R2_GLOBALS._v57810); + subD0281(); + return; + } + + // That continues the block when R2_GLOBALS._v57810 == 200 and di != 4 + subD18B5(1332, _item6._object1._strip, _item6._object1._frame); + R2_GLOBALS._sceneObjects->draw(); + Event event; + bool found = false; + bool found_di; + for (;;) { + if ( ((g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN)) && (event.btnState == BTNSHIFT_RIGHT)) + || (g_globals->_events.getEvent(event, EVENT_KEYPRESS)) ){ + _item6._field36 = g_globals->_events._mousePos; + found_di = false; + + for (int i = 0; i <= 3; i ++) { + if (subC2BF8(&_arrunkObj1337[2]._arr1[i], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if (_arrunkObj1337[2]._arr1[i]._field34 == 0) { + _arrunkObj1337[2]._arr1[i]._field34 = _item6._field34; + _arrunkObj1337[2]._arr1[i]._object1.postInit(); + _arrunkObj1337[2]._arr1[i]._object1.hide(); + _arrunkObj1337[2]._arr1[i]._object1.setVisage(1332); + _arrunkObj1337[2]._arr1[i]._object1.setPosition(_arrunkObj1337[2]._arr1[i]._field36, 0); + _arrunkObj1337[2]._arr1[i]._object1.fixPriority(170); + setAnimationInfo(&_arrunkObj1337[2]._arr1[i]); + subD18B5(5, 1, 4); + found = true; + _field423E--; + _field4244 = 0; + subC20F9(); + } else { + actionDisplay(1330, 127, 159, 10, 1, 200, 0, 7, 0, 154, 154); + found_di = true; + } + break; + } + } + + if ((!found) && (!found_di)) { + if (subC2BF8(&_item7, Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + subC4A39(&_item6); + } else if (!found) { + bool foundVar4; + int i; + if (_item6._field34 == 1) { + foundVar4 = false; + for (i = 0; i <= 7; i++) { + if (subC2BF8(&_arrunkObj1337[2]._arr2[i], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + foundVar4 = true; + break; + } + } + + if ((foundVar4) && (_arrunkObj1337[2]._arr2[i]._field34 == 0)) { + if (subC27B5(_arrunkObj1337[2]._arr3[0]._field34) != -1) { + actionDisplay(1330, 55, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + subC340B(&_item6, &_arrunkObj1337[2]._arr2[i]); + return; + } + } else { + actionDisplay(1330, 56, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else if (_item6._field34 <= 9) { + foundVar4 = false; + for (i = 0; i <= 7; i++) { + if (subC2BF8(&_arrunkObj1337[2]._arr2[i], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + foundVar4 = true; + break; + } + } + if ((foundVar4) && (_arrunkObj1337[2]._arr2[i]._field34 == 1)) { + foundVar4 = false; + int j; + for (j = 0; j <= 7; j++) { + if (_item6._field34 == _arrunkObj1337[2]._arr2[j]._field34) { + foundVar4 = true; + break; + } + } + if (foundVar4) { + actionDisplay(1330, 34, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC27B5(_arrunkObj1337[2]._arr3[0]._field34) != -1) { + actionDisplay(1330, 35, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + if (j == 7) + _field424A = 2; + + subC33C0(&_item6, &_arrunkObj1337[2]._arr2[i]); + return; + } + } else { + actionDisplay(1330, 37, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else { + if ((_item6._field34 == 26) || (_item6._field34 == 30) ||(_item6._field34 == 32) || (_item6._field34 == 28)) { + if (subC2BF8(&_arrunkObj1337[2]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + actionDisplay(1330, 42, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC3386(_arrunkObj1337[2]._arr3[0]._field34, _item6._field34) == 0) { + if (_arrunkObj1337[2]._arr3[0]._field34 != 0) { + switch (_arrunkObj1337[2]._arr3[0]._field34) { + case 11: + actionDisplay(1330, 68, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 14: + actionDisplay(1330, 80, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 16: + actionDisplay(1330, 84, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 24: + actionDisplay(1330, 96, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + actionDisplay(1330, 41, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else { + subC34A1(&_item6, &_arrunkObj1337[2]._arr3[0]); + return; + } + } else { + if ((subC27F9(_item6._field34) == -1) && (subC27B5(_item6._field34) == -1)) { + if (_item6._field34 == 13) { + if (subC2BF8(&_arrunkObj1337[0]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + for (int k = 0; k <= 7; k++) { + if (_arrunkObj1337[0]._arr2[k]._field34 != 0) { + found = true; + subC358E(&_item6, 0); + } + } + + if (!found) + actionDisplay(1330, 74, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC2BF8(&_arrunkObj1337[3]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + for (int k = 0; k <= 7; k++) { + if (_arrunkObj1337[3]._arr2[k]._field34 != 0) { + found = true; + subC358E(&_item6, 3); + } + } + if (!found) + actionDisplay(1330, 74, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC2BF8(&_arrunkObj1337[1]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + for (int k = 0; k <= 7; k++) { + if (_arrunkObj1337[1]._arr2[k]._field34 == 0) { + found = true; + subC358E(&_item6, 1); + } + } + if (!found) + actionDisplay(1330, 74, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + actionDisplay(1330, 128, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else if (_item6._field34 == 25) { + int k; + if (subC2BF8(&_arrunkObj1337[0]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if ( (_arrunkObj1337[0]._arr1[0]._field34 != 0) + || (_arrunkObj1337[0]._arr1[1]._field34 != 0) + || (_arrunkObj1337[0]._arr1[2]._field34 != 0) + || (_arrunkObj1337[0]._arr1[3]._field34 != 0) ) { + for (k = 0; k <= 3; k++){ + if (_arrunkObj1337[2]._arr1[k]._field34 == 0) + break; + } + subC318B(2, &_arrunkObj1337[2]._arr1[k], 0); + return; + } else { + actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else if (subC2BF8(&_arrunkObj1337[1]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if ( (_arrunkObj1337[1]._arr1[0]._field34 != 0) + || (_arrunkObj1337[1]._arr1[1]._field34 != 0) + || (_arrunkObj1337[1]._arr1[2]._field34 != 0) + || (_arrunkObj1337[1]._arr1[3]._field34 != 0) ) { + for (k = 0; k <= 3; k++){ + if (_arrunkObj1337[2]._arr1[k]._field34 == 0) + break; + } + subC318B(2, &_arrunkObj1337[2]._arr1[k], 1); + return; + } else { + actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } + + if (subC2BF8(&_arrunkObj1337[3]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if ( (_arrunkObj1337[3]._arr1[0]._field34 != 0) + || (_arrunkObj1337[3]._arr1[1]._field34 != 0) + || (_arrunkObj1337[3]._arr1[2]._field34 != 0) + || (_arrunkObj1337[3]._arr1[3]._field34 != 0) ) { + for (k = 0; k <= 3; k++){ + if (_arrunkObj1337[2]._arr1[k]._field34 == 0) + break; + } + subC318B(2, &_arrunkObj1337[2]._arr1[k], 3); + return; + } else { + actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else { + actionDisplay(1330, 129, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else if (_item6._field34 == 29) { + actionDisplay(1330, 136, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (_item6._field34 == 27) { + actionDisplay(1330, 137, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } else { + if (subC2BF8(&_arrunkObj1337[0]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { + actionDisplay(1330, 15, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC32B1(0, _item6._field34) != 1) { + switch (_item6._field34) { + case 10: + actionDisplay(1330, 66, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 12: + actionDisplay(1330, 70, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + actionDisplay(1330, 82, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 17: + actionDisplay(1330, 86, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 18: + actionDisplay(1330, 88, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 19: + actionDisplay(1330, 90, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + actionDisplay(1330, 92, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 21: + actionDisplay(1330, 94, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + subC3456(&_item6, &_arrunkObj1337[0]._arr3[0]); + found = true; + } + } else if (subC2BF8(&_arrunkObj1337[3]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if (_arrunkObj1337[3]._arr3[0]._field34 != 0) { + actionDisplay(1330, 17, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC32B1(3, _item6._field34) != 1) { + switch (_item6._field34) { + case 10: + actionDisplay(1330, 66, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 12: + actionDisplay(1330, 70, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + actionDisplay(1330, 82, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 17: + actionDisplay(1330, 86, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 18: + actionDisplay(1330, 88, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 19: + actionDisplay(1330, 90, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + actionDisplay(1330, 92, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 21: + actionDisplay(1330, 94, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + subC3456(&_item6, &_arrunkObj1337[3]._arr3[0]); + found = true; + } + } else if (subC2BF8(&_arrunkObj1337[1]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { + if (_arrunkObj1337[1]._arr3[0]._field34 != 0) { + actionDisplay(1330, 19, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC32B1(1, _item6._field34) != 1) { + switch (_item6._field34) { + case 10: + actionDisplay(1330, 66, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 12: + actionDisplay(1330, 70, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + actionDisplay(1330, 82, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 17: + actionDisplay(1330, 86, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 18: + actionDisplay(1330, 88, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 19: + actionDisplay(1330, 90, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + actionDisplay(1330, 92, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 21: + actionDisplay(1330, 94, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + subC3456(&_item6, &_arrunkObj1337[1]._arr3[0]); + found = true; + } + } else { + actionDisplay(1330, 38, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + } + } + } + } + } + + if (found) + return; + } else { + g_globals->_scenePalette.signalListeners(); + R2_GLOBALS._sceneObjects->draw(); + g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); + } + } } void Scene1337::subD183F(int arg1, int arg2) { @@ -4880,6 +5325,27 @@ void Scene1337::subD1975(int arg1, int arg2) { warning("STUBBED lvl2 Scene1337::subD1975()"); } +void Scene1337::subD1A48(int arg1) { + int tmpVal = -1; + + switch (arg1) { + case 200: + tmpVal = 141; + break; + case 300: + tmpVal = 142; + break; + default: + MessageDialog::show(WRONG_ANSWER_MSG, OK_BTN_STRING); + break; + } + + if (tmpVal == -1) + return; + + actionDisplay(1330, tmpVal, -1, -1, 1, 220, 1, 5, 0, 105, 0); +} + /*-------------------------------------------------------------------------- * Scene 1500 - Cutscene: Ship landing * diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index d23ce00793..0c3764639e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -170,7 +170,7 @@ public: }; class Scene1337 : public SceneExt { - class unkObj1337sub1: public SceneItem { + class unkObj1337sub1: public SceneHotspot { public: SceneObject _object1; @@ -181,7 +181,7 @@ class Scene1337 : public SceneExt { void synchronize(Serializer &s); }; - class unkObj1337_1: public SceneItem { + class unkObj1337_1: public SceneHotspot { public: unkObj1337sub1 _arr1[4]; unkObj1337sub1 _arr2[8]; @@ -200,7 +200,7 @@ class Scene1337 : public SceneExt { class Action1337: public Action { public: - void subD18B5(int arg1, int arg2, int arg3); + void subD18B5(int resNum, int stripNum, int frameNum); void skipFrames(int32 skipCount); }; @@ -325,17 +325,18 @@ public: int subC27B5(int arg1); int subC27F9(int arg1); void subC2835(int arg1); - int subC2BF8(unkObj1337sub1 *subObj1, Common::Point *pt); + bool subC2BF8(unkObj1337sub1 *subObj1, Common::Point pt); void subC2C2F(); - void subC318B(int arg1, unkObj1337sub1 *subObj2); - int subC32B1(int arg1); + void subC318B(int arg1, unkObj1337sub1 *subObj2, int arg3); + int subC32B1(int arg1, int arg2); int subC331B(int arg1); int subC3386(int arg1, int arg2); void subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); void subC3456(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); void subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); void subC34A1(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); - void subC358E(unkObj1337sub1 *subObj1); + unkObj1337sub1 *subC34EC(int arg1); + void subC358E(unkObj1337sub1 *subObj1, int arg2); int subC3E92(int arg1); void subC4A39(unkObj1337sub1 *subObj); void subC4CD2(); @@ -346,6 +347,7 @@ public: void suggestInstructions(); void shuffleCards(); void subCCF26(); + void subCDB90(int arg1, Common::Point *pt); void subCF31D(); void subCF979(); void subD026D(); @@ -358,6 +360,7 @@ public: int subD1940(bool flag); void subD195F(int arg1, int arg2); void subD1975(int arg1, int arg2); + void subD1A48(int arg1); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); -- cgit v1.2.3 From 29919077cdf0f936b3ec8bba901b6b08c6ecd774 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 13 Feb 2012 23:39:13 +0100 Subject: TSAGE: R2R - Scene 1337: Implement 10 more AI functions --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 139 ++++++++++++++++++++---- engines/tsage/ringworld2/ringworld2_scenes1.h | 5 +- 2 files changed, 122 insertions(+), 22 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 6dd0fb42e5..ea089279b6 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4304,28 +4304,114 @@ void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj1, int arg3) { _item1.setAction(&_action11); } -int Scene1337::subC32B1(int arg1, int arg2) { - warning("STUBBED Scene1337::subC32B1()"); - return -1; +int Scene1337::subC3257(int arg1) { + int retVal; + + switch (arg1) { + case 10: + retVal = 2; + break; + case 12: + retVal = 3; + break; + case 15: + retVal = 5; + break; + case 17: + retVal = 9; + break; + case 18: + retVal = 6; + break; + case 19: + retVal = 4; + break; + case 20: + retVal = 8; + break; + case 21: + retVal = 7; + break; + default: + retVal = -1; + } + + return retVal; +} + +bool Scene1337::subC32B1(int arg1, int arg2) { + for (int i = 0; i <= 7; i++) { + if (_arrunkObj1337[arg1]._arr2[i]._field34 != 0) { + int tmpVal = subC3257(arg2); + if (tmpVal == _arrunkObj1337[arg1]._arr2[i]._field34) + return false; + } + } + return true; } int Scene1337::subC331B(int arg1) { - warning("STUBBED Scene1337::subC331B()"); + int randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); + + for (int i = 0; i <= 3; i++) { + if (randIndx != arg1) { + for (int j = 0; j <= 7; j++) { + if (_arrunkObj1337[randIndx]._arr2[j]._field34 != 0) + return randIndx; + } + } + + if (arg1 == 1) { + randIndx--; + if (randIndx < 0) + randIndx = 3; + } else { + ++randIndx; + if (randIndx > 3) + randIndx = 0; + } + } + return -1; } -int Scene1337::subC3386(int arg1, int arg2) { - warning("STUBBED Scene1337::subCF979()"); - return -1; +bool Scene1337::subC3386(int arg1, int arg2) { + if ((arg1 == 11) && (arg2 == 26)) + return true; + + if ((arg1 == 14) && (arg2 == 30)) + return true; + + if ((arg1 == 16) && (arg2 == 32)) + return true; + + if ((arg1 == 24) && (arg2 == 28)) + return true; + + return false; } void Scene1337::subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { - warning("STUBBED Scene1337::subC33C0()"); + _field3EF4 = subObj2; + _field3EF0 = subObj1; + _item1.setAction(&_action7); } int Scene1337::subC3E92(int arg1) { - warning("STUBBED Scene1337::subC3E92()"); - return -1; + if ( (_arrunkObj1337[arg1]._arr1[0]._field34 == 0) + && (_arrunkObj1337[arg1]._arr1[1]._field34 == 0) + && (_arrunkObj1337[arg1]._arr1[2]._field34 == 0) + && (_arrunkObj1337[arg1]._arr1[3]._field34 == 0)) + return -1; + + int randIndx; + for (;;) { + randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); + if (_arrunkObj1337[arg1]._arr1[randIndx]._field34 == 0) + break; + } + + return randIndx; } void Scene1337::subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { @@ -4336,11 +4422,17 @@ void Scene1337::subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { } void Scene1337::subC3456(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { - warning("STUBBED Scene1337::subC3456()"); + _field3EF0 = subObj1; + _field3EF4 = subObj2; + + _item1.setAction(&_action9); } void Scene1337::subC34A1(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { - warning("STUBBED Scene1337::subC34A1()"); + _field3EF0 = subObj1; + _field3EF4 = subObj2; + + _item1.setAction(&_action8); } Scene1337::unkObj1337sub1 *Scene1337::subC34EC(int arg1) { @@ -4370,11 +4462,18 @@ void Scene1337::subC4CD2() { } void Scene1337::subC4CEC() { - warning("STUBBED Scene1337::subC4CEC()"); + if (R2_GLOBALS._v57709 != 0) + return; + + subD18F5(); + subD1940(1); } void Scene1337::subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { - warning("STUBBED Scene1337::subC51A0()"); + _field3EF0 = subObj1; + _field3EF4 = subObj2; + + _item1.setAction(&_action13); } void Scene1337::subPostInit() { @@ -4639,7 +4738,7 @@ void Scene1337::subCF31D() { found = false; int i; for (i = 0; i <= 3; i++) { - if (subC3386(_arrunkObj1337[1]._arr3[0]._field34, _arrunkObj1337[1]._arr1[i]._field34) != 0) { + if (subC3386(_arrunkObj1337[1]._arr3[0]._field34, _arrunkObj1337[1]._arr1[i]._field34)) { found = true; break; } @@ -4758,7 +4857,7 @@ void Scene1337::subCF31D() { for (int k = 0; k <= 7; k++) { // 'k' is not used in that loop. // It looks suspicious. - if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(tmpVal, _arrunkObj1337[1]._arr1[i]._field34) == 1)) { + if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(tmpVal, _arrunkObj1337[1]._arr1[i]._field34))) { count = tmpVal; break; } @@ -5016,7 +5115,7 @@ void Scene1337::subD02CA() { if ((_item6._field34 == 26) || (_item6._field34 == 30) ||(_item6._field34 == 32) || (_item6._field34 == 28)) { if (subC2BF8(&_arrunkObj1337[2]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { actionDisplay(1330, 42, 159, 10, 1, 200, 0, 7, 0, 154, 154); - } else if (subC3386(_arrunkObj1337[2]._arr3[0]._field34, _item6._field34) == 0) { + } else if (!subC3386(_arrunkObj1337[2]._arr3[0]._field34, _item6._field34)) { if (_arrunkObj1337[2]._arr3[0]._field34 != 0) { switch (_arrunkObj1337[2]._arr3[0]._field34) { case 11: @@ -5133,7 +5232,7 @@ void Scene1337::subD02CA() { if (subC2BF8(&_arrunkObj1337[0]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { actionDisplay(1330, 15, 159, 10, 1, 200, 0, 7, 0, 154, 154); - } else if (subC32B1(0, _item6._field34) != 1) { + } else if (!subC32B1(0, _item6._field34)) { switch (_item6._field34) { case 10: actionDisplay(1330, 66, 159, 10, 1, 200, 0, 7, 0, 154, 154); @@ -5169,7 +5268,7 @@ void Scene1337::subD02CA() { } else if (subC2BF8(&_arrunkObj1337[3]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { if (_arrunkObj1337[3]._arr3[0]._field34 != 0) { actionDisplay(1330, 17, 159, 10, 1, 200, 0, 7, 0, 154, 154); - } else if (subC32B1(3, _item6._field34) != 1) { + } else if (!subC32B1(3, _item6._field34)) { switch (_item6._field34) { case 10: actionDisplay(1330, 66, 159, 10, 1, 200, 0, 7, 0, 154, 154); @@ -5205,7 +5304,7 @@ void Scene1337::subD02CA() { } else if (subC2BF8(&_arrunkObj1337[1]._arr3[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { if (_arrunkObj1337[1]._arr3[0]._field34 != 0) { actionDisplay(1330, 19, 159, 10, 1, 200, 0, 7, 0, 154, 154); - } else if (subC32B1(1, _item6._field34) != 1) { + } else if (!subC32B1(1, _item6._field34)) { switch (_item6._field34) { case 10: actionDisplay(1330, 66, 159, 10, 1, 200, 0, 7, 0, 154, 154); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 0c3764639e..0f22ca646a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -328,9 +328,10 @@ public: bool subC2BF8(unkObj1337sub1 *subObj1, Common::Point pt); void subC2C2F(); void subC318B(int arg1, unkObj1337sub1 *subObj2, int arg3); - int subC32B1(int arg1, int arg2); + int subC3257(int arg1); + bool subC32B1(int arg1, int arg2); int subC331B(int arg1); - int subC3386(int arg1, int arg2); + bool subC3386(int arg1, int arg2); void subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); void subC3456(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); void subC340B(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); -- cgit v1.2.3 From fc1d93ee1b8281e7af308ebc17707b3c6cb2e6d7 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 14 Feb 2012 21:07:12 +1100 Subject: TSAGE: Implemented missing R2R method SceneHandler::setupPaletteMaps --- engines/tsage/ringworld2/ringworld2_logic.cpp | 103 ++++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_logic.h | 2 + 2 files changed, 105 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 83ca51faf5..d146e4cbee 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -323,6 +323,19 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { _action = NULL; _field12 = 0; _sceneMode = 0; + + int prevScene = R2_GLOBALS._sceneManager._previousScene; + int sceneNumber = R2_GLOBALS._sceneManager._sceneNumber; + if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) + || (sceneNumber == 50) + || ((prevScene == 205) && (sceneNumber == 100)) + || ((prevScene == 180) && (sceneNumber == 100))) { + static_cast(R2_GLOBALS._sceneHandler)->setupPaletteMaps(); + R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements.show(); + } else { + R2_GLOBALS._uiElements.updateInventory(); + } } void SceneExt::remove() { @@ -570,6 +583,96 @@ void SceneHandlerExt::process(Event &event) { SceneHandler::process(event); } +void SceneHandlerExt::setupPaletteMaps() { + byte *palP = &R2_GLOBALS._scenePalette._palette[0]; + + if (!R2_GLOBALS._v1000Flag) { + R2_GLOBALS._v1000Flag = true; + + for (int idx = 0; idx < 10; ++idx) { + for (int palIndex = 0; palIndex < 224; ++palIndex) { + int r, g, b; + + // Get adjusted RGB values + switch (idx) { + case 7: + r = palP[palIndex * 3] * 85 / 100; + g = palP[palIndex * 3 + 1] * 7 / 10; + b = palP[palIndex * 3 + 2] * 7 / 10; + break; + case 8: + r = palP[palIndex * 3] * 7 / 10; + g = palP[palIndex * 3 + 1] * 85 / 100; + b = palP[palIndex * 3 + 2] * 7 / 10; + break; + case 9: + r = palP[palIndex * 3] * 8 / 10; + g = palP[palIndex * 3 + 1] * 5 / 10; + b = palP[palIndex * 3 + 2] * 9 / 10; + break; + default: + r = palP[palIndex * 3] * (10 - idx) / 10; + g = palP[palIndex * 3 + 1] * (10 - idx) / 12; + b = palP[palIndex * 3 + 2] * (10 - idx) / 10; + break; + } + + // Scan for the palette index with the closest matching colour + int threshold = 769; + int foundIndex = -1; + for (int pIndex2 = 223; pIndex2 >= 0; --pIndex2) { + int diffSum = ABS(palP[pIndex2 * 3] - r); + if (diffSum >= threshold) + continue; + + diffSum += ABS(palP[pIndex2 * 3 + 1] - g); + if (diffSum >= threshold) + continue; + + diffSum += ABS(palP[pIndex2 * 3 + 2] - b); + if (diffSum >= threshold) + continue; + + threshold = diffSum; + foundIndex = pIndex2; + } + + R2_GLOBALS._palIndexList[idx][palIndex] = foundIndex; + } + } + } + + for (int palIndex = 0; palIndex < 224; ++palIndex) { + int r = palP[palIndex * 3] >> 2; + int g = palP[palIndex * 3 + 1] >> 2; + int b = palP[palIndex * 3 + 2] >> 2; + + int idx = (((r << 4) | g) << 4) | b; + R2_GLOBALS._v1000[idx] = palIndex; + } + + int vdx = 0; + int idx = 0; + int palIndex = 224; + + for (int vIndex = 0; vIndex < 4096; ++vIndex) { + int v = R2_GLOBALS._v1000[vIndex]; + if (!v) { + R2_GLOBALS._v1000[vIndex] = idx; + } else { + idx = v; + } + + if (!palIndex) { + vdx = palIndex; + } else { + int idxTemp = palIndex; + palIndex = (palIndex + vdx) / 2; + vdx = idxTemp; + } + } +} + /*--------------------------------------------------------------------------*/ DisplayHotspot::DisplayHotspot(int regionId, ...) { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 22bea5c216..925a3d6522 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -114,6 +114,8 @@ class SceneHandlerExt: public SceneHandler { public: virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void process(Event &event); + + void setupPaletteMaps(); }; -- cgit v1.2.3 From f6720ee139c728779fae7807621bf11031aacfe1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 14 Feb 2012 22:33:50 +1100 Subject: TSAGE: R2R bugfix for selecting Output Alpha in the console screen --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 1c924ba336..e3dbe1af22 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1033,6 +1033,7 @@ void Scene125::consoleAction(int id) { _sceneMode = 10; _palette.loadPalette(161); + R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; case 24: _icon4.setIcon(25); -- cgit v1.2.3 From b6a0d8052ba46b06631c260c7aa0745bd833058e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 14 Feb 2012 22:43:46 +1100 Subject: TSAGE: Replace previously unknown value _v58ec2 with _uiElements._active --- engines/tsage/ringworld2/ringworld2_logic.cpp | 6 ++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 ++-- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 30 ++++++++++++------------- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 4 ++-- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 22 +++++++++--------- 5 files changed, 33 insertions(+), 33 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d146e4cbee..4f7578b1fa 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -331,7 +331,7 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { || ((prevScene == 205) && (sceneNumber == 100)) || ((prevScene == 180) && (sceneNumber == 100))) { static_cast(R2_GLOBALS._sceneHandler)->setupPaletteMaps(); - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; R2_GLOBALS._uiElements.show(); } else { R2_GLOBALS._uiElements.updateInventory(); @@ -378,7 +378,7 @@ void SceneExt::loadScene(int sceneNum) { (sceneNumber == 50) || ((prevScene == 205) && (sceneNumber == 100)) || ((prevScene == 180) && (sceneNumber == 100))) { // TODO: sub_17875 - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; R2_GLOBALS._uiElements.show(); } else { // Update the user interface @@ -564,7 +564,7 @@ void SceneHandlerExt::postInit(SceneObjectList *OwnerList) { } void SceneHandlerExt::process(Event &event) { - if (T2_GLOBALS._uiElements._active) { + if (T2_GLOBALS._uiElements._active && R2_GLOBALS._player._uiEnabled) { T2_GLOBALS._uiElements.process(event); if (event.handled) return; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index e3dbe1af22..2b2b5e71ef 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -51,7 +51,7 @@ void Scene50::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(OwnerList); loadScene(110); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._scenePalette.loadPalette(0); R2_GLOBALS._sound2.play(10); @@ -5320,7 +5320,7 @@ void Scene500::signal() { *--------------------------------------------------------------------------*/ void Scene525::postInit(SceneObjectList *OwnerList) { loadScene(525); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); R2_GLOBALS._sound1.play(105); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index ea089279b6..c498171bd7 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -37,7 +37,7 @@ void Scene1010::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(1010); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; setZoomPercents(100, 1, 160, 100); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.setObjectWrapper(NULL); @@ -100,7 +100,7 @@ void Scene1020::postInit(SceneObjectList *OwnerList) { g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); R2_GLOBALS._v558B6.set(160, 0, 160, 161); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._player.postInit(); if (R2_GLOBALS._sceneManager._previousScene == 1010) { @@ -330,7 +330,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { loadScene(1100); if ((R2_GLOBALS._sceneManager._previousScene == 1000) && (!R2_GLOBALS.getFlag(44))) { - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E.left = 0; R2_GLOBALS._v5589E.right = 200; } @@ -339,7 +339,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sceneManager._previousScene = 1100; if (R2_GLOBALS._sceneManager._previousScene == -1) { - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E.left = 0; R2_GLOBALS._v5589E.right = 200; } @@ -542,7 +542,7 @@ void Scene1100::remove() { if (_sceneMode > 20) R2_GLOBALS._sound1.fadeOut2(NULL); g_globals->gfxManager()._bounds.moveTo(Common::Point(0, 0)); - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; SceneExt::remove(); } @@ -3719,7 +3719,7 @@ void Scene1337::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); // - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; @@ -3834,7 +3834,7 @@ void Scene1337::remove() { subD1940(false); } - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; SceneExt::remove(); } @@ -5451,7 +5451,7 @@ void Scene1337::subD1A48(int arg1) { *--------------------------------------------------------------------------*/ void Scene1500::postInit(SceneObjectList *OwnerList) { loadScene(1500); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E.top = 0; R2_GLOBALS._v5589E.bottom = 200; setZoomPercents(170, 13, 240, 100); @@ -5514,7 +5514,7 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { void Scene1500::remove() { R2_GLOBALS._v5589E.top = 3; R2_GLOBALS._v5589E.bottom = 168; - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; SceneExt::remove(); } @@ -5609,7 +5609,7 @@ void Scene1500::dispatch() { *--------------------------------------------------------------------------*/ void Scene1525::postInit(SceneObjectList *OwnerList) { loadScene(1525); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); R2_GLOBALS._player.postInit(); @@ -5657,7 +5657,7 @@ void Scene1530::postInit(SceneObjectList *OwnerList) { else loadScene(1530); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_quinnSpeaker); @@ -7982,7 +7982,7 @@ void Scene1575::Hotspot1::subA910D(int indx) { void Scene1575::postInit(SceneObjectList *OwnerList) { loadScene(1575); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E = Rect(0, 0, 320, 200); SceneExt::postInit(); _field414 = 390; @@ -8097,7 +8097,7 @@ void Scene1575::remove() { SceneExt::remove(); R2_GLOBALS._v5589E.top = 3; R2_GLOBALS._v5589E.bottom = 168; - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; } void Scene1575::signal() { @@ -9448,7 +9448,7 @@ bool Scene1750::Actor5::startAction(CursorType action, Event &event) { void Scene1750::postInit(SceneObjectList *OwnerList) { loadScene(1750); R2_GLOBALS._sound1.play(115); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E.set(0, 0, 320, 200); SceneExt::postInit(); @@ -9573,7 +9573,7 @@ void Scene1750::remove() { R2_GLOBALS._sound1.fadeOut2(NULL); R2_GLOBALS._v5589E.top = 3; R2_GLOBALS._v5589E.bottom = 168; - R2_GLOBALS._v58CE2 = 1; + R2_GLOBALS._uiElements._active = true; } void Scene1750::signal() { diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index a1409067dc..3cc541493d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -2399,7 +2399,7 @@ void Scene2500::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 3100) - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); @@ -2978,7 +2978,7 @@ void Scene2600::synchronize(Serializer &s) { void Scene2600::postInit(SceneObjectList *OwnerList) { loadScene(2600); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); R2_GLOBALS._sound1.fadeSound(214); R2_GLOBALS._sound2.play(215); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index e627d9cbf5..99bcf3df44 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -60,7 +60,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 1000) { if (R2_GLOBALS._player._oldCharacterScene[1] == 3100) { loadScene(3101); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; } else { loadScene(3100); g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); @@ -71,7 +71,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { // Original was doing it twice in a row. Skipped. if (R2_GLOBALS._sceneManager._previousScene == 3255) - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_guardSpeaker); @@ -927,7 +927,7 @@ void Scene3175::signal() { *--------------------------------------------------------------------------*/ void Scene3200::postInit(SceneObjectList *OwnerList) { loadScene(3200); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_rockoSpeaker); @@ -955,7 +955,7 @@ void Scene3200::signal() { *--------------------------------------------------------------------------*/ void Scene3210::postInit(SceneObjectList *OwnerList) { loadScene(3210); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_privateSpeaker); @@ -981,7 +981,7 @@ void Scene3210::signal() { *--------------------------------------------------------------------------*/ void Scene3220::postInit(SceneObjectList *OwnerList) { loadScene(3220); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_rockoSpeaker); @@ -1007,7 +1007,7 @@ void Scene3220::signal() { *--------------------------------------------------------------------------*/ void Scene3230::postInit(SceneObjectList *OwnerList) { loadScene(3230); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_rockoSpeaker); @@ -1034,7 +1034,7 @@ void Scene3230::signal() { *--------------------------------------------------------------------------*/ void Scene3240::postInit(SceneObjectList *OwnerList) { loadScene(3240); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_tealSpeaker); @@ -1061,7 +1061,7 @@ void Scene3240::signal() { *--------------------------------------------------------------------------*/ void Scene3245::postInit(SceneObjectList *OwnerList) { loadScene(3245); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.addSpeaker(&_ralfSpeaker); @@ -1641,7 +1641,7 @@ void Scene3275::signal() { *--------------------------------------------------------------------------*/ void Scene3350::postInit(SceneObjectList *OwnerList) { loadScene(3350); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); R2_GLOBALS._sound2.play(310); @@ -3562,7 +3562,7 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { Rect tmpRect; loadScene(1050); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E.set(0, 0, 320, 200); R2_GLOBALS._sound1.play(305); R2_GLOBALS._player._characterIndex = R2_QUINN; @@ -4876,7 +4876,7 @@ void Scene3600::dispatch() { *--------------------------------------------------------------------------*/ void Scene3700::postInit(SceneObjectList *OwnerList) { loadScene(3700); - R2_GLOBALS._v58CE2 = 0; + R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); _stripManager.setColors(60, 255); -- cgit v1.2.3 From ffd59d1c21d9a4e47ff372a126ea10f7432ec309 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 14 Feb 2012 22:46:25 +1100 Subject: TSAGE: Correctly hide the user interface in R2R Output Alpha scene --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index c498171bd7..f410de3384 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -3719,7 +3719,10 @@ void Scene1337::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); // + // Hide the user interface R2_GLOBALS._uiElements._active = false; + BF_GLOBALS._interfaceY = 200; + R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; -- cgit v1.2.3 From 654016c9273bf5fc3810af8b55bf6f0c7694d982 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 18:50:21 +0100 Subject: TSAGE: R2R - Scene 1337: Implement AI function subC2C2F --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 181 +++++++++++++++++++++++- 1 file changed, 179 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index f410de3384..456cfb051f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1658,7 +1658,7 @@ void Scene1337::synchronize(Serializer &s) { } void Scene1337::Action1337::subD18B5(int resNum, int stripNum, int frameNum) { - warning("STUBBED: Action1337::sub53CD5()"); + warning("STUBBED: Action1337::subD18B5()"); } void Scene1337::Action1337::skipFrames(int32 skipCount) { @@ -4285,7 +4285,184 @@ bool Scene1337::subC2BF8(unkObj1337sub1 *subObj1, Common::Point pt) { } void Scene1337::subC2C2F() { - warning("STUBBED Scene1337::subC2C2F()"); + bool found = true; + + if (_arrunkObj1337[3]._arr3[0]._field34 != 0) { + switch (_arrunkObj1337[3]._arr3[0]._field34) { + case 10: + // No break on purpose + case 12: + // No break on purpose + case 15: + // No break on purpose + case 17: + // No break on purpose + case 18: + // No break on purpose + case 19: + // No break on purpose + case 20: + // No break on purpose + case 21: + subC4A39(&_arrunkObj1337[3]._arr3[0]); + found = false; + break; + default: + found = false; + int i; + for (i = 0; i <= 3; i++) { + if (subC3386(_arrunkObj1337[3]._arr3[0]._field34, _arrunkObj1337[3]._arr1[i]._field34)) { + found = true; + break; + } + } + + if (found) { + found = false; + subC34A1(&_arrunkObj1337[3]._arr1[i], &_arrunkObj1337[3]._arr3[0]); + } + break; + } + } + + if (!found) + return; + + int randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); + + if (_arrunkObj1337[3]._arr1[randIndx]._field34 == 1) { + found = false; + + for (int i = 0; i <= 7; i++) { + if ((_arrunkObj1337[3]._arr2[i]._field34 == 0) && (!subC2687(_arrunkObj1337[3]._arr3[0]._field34))) { + subC340B(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[3]._arr2[i]); + found = true; + break; + } + } + + if (found) { + return; + } + } else if (_arrunkObj1337[3]._arr1[randIndx]._field34 <= 9) { + found = false; + + for (int i = 0; i <= 7; i++) { + if (_arrunkObj1337[3]._arr2[i]._field34 == _arrunkObj1337[3]._arr1[randIndx]._field34) { + found = true; + break; + } + } + + if (!found) { + for (int i = 0; i <= 7; i++) { + if ((_arrunkObj1337[3]._arr2[i]._field34 == 1) && (!subC2687(_arrunkObj1337[3]._arr3[i]._field34))) { + int tmpVal = 0; + + for (int i = 0; i <= 7; i++) { + if ((_arrunkObj1337[3]._arr2[i]._field34 > 1) && (_arrunkObj1337[3]._arr2[i]._field34 <= 9)) + ++tmpVal; + } + + if (tmpVal == 7) + _field424A = 3; + + subC33C0(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[3]._arr2[i]); + found = true; + break; + } + } + if (found) + return; + } + } else if (_arrunkObj1337[3]._arr1[randIndx]._field34 == 13) { + int tmpVal = subC331B(3); + + if (tmpVal != -1) { + subC358E(&_arrunkObj1337[3]._arr1[randIndx], tmpVal); + return; + } + } else if (_arrunkObj1337[3]._arr1[randIndx]._field34 == 25) { + int tmpVal = -1; + found = false; + int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); + + for (int i = 0; i <= 3; i++) { + if ( (tmpRandIndx != 3) + && ( (_arrunkObj1337[tmpRandIndx]._arr1[0]._field34 != 0) + || (_arrunkObj1337[tmpRandIndx]._arr1[1]._field34 != 0) + || (_arrunkObj1337[tmpRandIndx]._arr1[2]._field34 != 0) + || (_arrunkObj1337[tmpRandIndx]._arr1[3]._field34 != 0) )) { + tmpVal = tmpRandIndx; + break; + } + + ++tmpRandIndx; + if (tmpRandIndx > 3) + tmpRandIndx = 0; + } + + if (tmpVal != -1) { + subC318B(3, &_arrunkObj1337[3]._arr1[randIndx], tmpVal); + return; + } + } else { + switch (_arrunkObj1337[3]._arr1[randIndx]._field34) { + case 10: + // No break on purpose + case 11: + // No break on purpose + case 12: + // No break on purpose + case 14: + // No break on purpose + case 15: + // No break on purpose + case 16: + // No break on purpose + case 17: + // No break on purpose + case 18: + // No break on purpose + case 19: + // No break on purpose + case 20: + // No break on purpose + case 21: + // No break on purpose + case 24: { + int tmpVal = -1; + int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); + + for (int i = 0; i <= 3; i++) { + if (tmpRandIndx != 3) { + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[j]._arr3[0]._field34 == 0) && (subC32B1(j, _arrunkObj1337[3]._arr1[randIndx]._field34))) { + tmpVal = j; + } + } + } + + ++tmpRandIndx; + if (tmpRandIndx > 3) + tmpRandIndx = 0; + + if (tmpVal != -1) + break; + } + + if (tmpVal != -1) { + // Useless second identical check skipped + subC3456(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[tmpVal]._arr3[0]); + return; + } + } + default: + break; + } + } + + subC4A39(&_arrunkObj1337[3]._arr1[randIndx]); } void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj1, int arg3) { -- cgit v1.2.3 From 1dcc8402b8dd57bbf5174a6d7a0c99b39fae7ccb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 18:52:05 +0100 Subject: TSAGE: R2R - Scene 1337: Implement on more AI function --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 456cfb051f..0745855182 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4616,7 +4616,18 @@ void Scene1337::subC34A1(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { } Scene1337::unkObj1337sub1 *Scene1337::subC34EC(int arg1) { - warning("STUBBED Scene1337::subC34EC()"); + for (int i = 0; i <= 7; i++) { + if (_arrunkObj1337[arg1]._arr2[i]._field34 == 1) { + return &_arrunkObj1337[arg1]._arr2[i]; + } + } + + for (int i = 0; i <= 7; i++) { + if ((_arrunkObj1337[arg1]._arr2[i]._field34 != 0) && (_arrunkObj1337[arg1]._arr2[i]._field34 < 10)) { + return &_arrunkObj1337[arg1]._arr2[i]; + } + } + return NULL; } -- cgit v1.2.3 From f380d3ded235297a4162ff0735dcb037da813faa Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 19:03:50 +0100 Subject: TSAGE: R2R - Scene 1337: Implement one more large AI function (subCDB90) --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 314 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 4 +- 2 files changed, 313 insertions(+), 5 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 0745855182..769fd58c78 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4667,6 +4667,10 @@ void Scene1337::subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { _item1.setAction(&_action13); } +void Scene1337::subC6235(int arg1) { + warning("STUBBED: subC6235()"); +} + void Scene1337::subPostInit() { R2_GLOBALS._v57709 = 0; R2_GLOBALS._v5780C = 0; @@ -4895,9 +4899,311 @@ void Scene1337::subCCF26() { shuffleCards(); _item1.setAction(&_action3); } +void Scene1337::subCD193() { + warning("STUBBED: subCD193()"); +} -void Scene1337::subCDB90(int arg1, Common::Point *pt) { - warning("STUBBED: subCDB90()"); +void Scene1337::subCDB90(int arg1, Common::Point pt) { + bool found = false; + int curReg = R2_GLOBALS._sceneRegions.indexOf(g_globals->_events._mousePos); + + if (arg1 == 3) { + int i; + for (i = 0; i <= 7; i++) { + if ( (subC2BF8(&_arrunkObj1337[2]._arr2[i], pt)) + || (subC2BF8(&_arrunkObj1337[0]._arr2[i], pt)) + || (subC2BF8(&_arrunkObj1337[1]._arr2[i], pt)) + || (subC2BF8(&_arrunkObj1337[3]._arr2[i], pt)) ) { + found = true; + break; + } + } + + if (found) { + switch (curReg) { + case 5: + if (_arrunkObj1337[2]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[2]._arr2[i]._field34); + else + actionDisplay(1330, 20, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + if (_arrunkObj1337[3]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[3]._arr2[i]._field34); + else + actionDisplay(1330, 22, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + if (_arrunkObj1337[0]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[0]._arr2[i]._field34); + else + actionDisplay(1330, 21, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + if (_arrunkObj1337[1]._arr2[i]._field34 != 0) + subC6235(_arrunkObj1337[1]._arr2[i]._field34); + else + actionDisplay(1330, 23, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + if ( (subC2BF8(&_arrunkObj1337[2]._arr3[0], pt)) + || (subC2BF8(&_arrunkObj1337[0]._arr3[0], pt)) + || (subC2BF8(&_arrunkObj1337[1]._arr3[0], pt)) + || (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) ) { + found = true; + } + + if (found) { + switch (curReg) { + case 5: + if (_arrunkObj1337[2]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[2]._arr3[0]._field34); + else + actionDisplay(1330, 10, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + if (_arrunkObj1337[3]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[3]._arr3[0]._field34); + else + actionDisplay(1330, 16, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[3]._arr3[0]._field34); + else + actionDisplay(1330, 13, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + if (_arrunkObj1337[1]._arr3[0]._field34 != 0) + subC6235(_arrunkObj1337[1]._arr3[0]._field34); + else + actionDisplay(1330, 18, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } else { + if (subC2BF8(&_item7, pt)) { + if (_item7._field34 != 0) + subC6235(_item7._field34); + else + actionDisplay(1330, 7, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (_background1._bounds.contains(pt)) { + actionDisplay(1330, 43, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if (subC2BF8(&_item8, pt)) { + actionDisplay(1330, 4, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else if ( (subC2BF8(&_arrunkObj1337[2]._arr4[0], pt)) + || (subC2BF8(&_arrunkObj1337[3]._arr4[0], pt)) + || (subC2BF8(&_arrunkObj1337[0]._arr4[0], pt)) + || (subC2BF8(&_arrunkObj1337[1]._arr4[0], pt)) ) { + actionDisplay(1330, 32, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + if (subC2BF8(&_arrunkObj1337[2]._arr1[0], pt)) + subC6235(_arrunkObj1337[2]._arr1[0]._field34); + else if (subC2BF8(&_arrunkObj1337[2]._arr1[1], pt)) + subC6235(_arrunkObj1337[2]._arr1[1]._field34); + else if (subC2BF8(&_arrunkObj1337[2]._arr1[2], pt)) + subC6235(_arrunkObj1337[2]._arr1[2]._field34); + else if (subC2BF8(&_arrunkObj1337[2]._arr1[3], pt)) + subC6235(_arrunkObj1337[2]._arr1[3]._field34); + else if ((curReg >= 6) || (curReg <= 9)) + actionDisplay(1330, 29, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else if ((curReg >= 11) || (curReg <= 14)) + actionDisplay(1330, 31, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else if ((curReg >= 16) || (curReg <= 19)) + actionDisplay(1330, 30, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else { + switch (curReg) { + case 0: + actionDisplay(1330, 2, 159, 134, 1, 200, 0, 7, 0, 105, 105); + break; + case 5: + actionDisplay(1330, 25, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + actionDisplay(1330, 27, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + actionDisplay(1330, 26, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + actionDisplay(1330, 28, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 21: + actionDisplay(1330, 24, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } + } + } + } + } + } + + if (arg1 != 1) + return; + + for (int i = 0; i <= 7; i++) { + if (subC2BF8(&_arrunkObj1337[2]._arr2[i], pt)) { + switch (_arrunkObj1337[2]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 1: + actionDisplay(1330, 54, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + actionDisplay(1330, 34, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + } + found = true; + break; + } else if (subC2BF8(&_arrunkObj1337[0]._arr2[i], pt)) { + switch (_arrunkObj1337[0]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + } + found = true; + break; + } else if (subC2BF8(&_arrunkObj1337[1]._arr2[i], pt)) { + switch (_arrunkObj1337[1]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + default: + actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + } + found = true; + break; + } else if (subC2BF8(&_arrunkObj1337[3]._arr2[i], pt)) { + switch (_arrunkObj1337[3]._arr2[i]._field34) { + case 0: + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + default: + actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + } + found = true; + break; + } + } + + if (subC2BF8(&_arrunkObj1337[2]._arr3[0], pt)) { + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { + actionDisplay(1330, 39, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) { + if (_arrunkObj1337[3]._arr3[0]._field34 != 0) { + actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); + } else { + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[1]._arr3[0], pt)) { + if (_arrunkObj1337[1]._arr3[0]._field34 != 0) { + actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); + } else { + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[0]._arr3[0], pt)) { + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { + actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } else { + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + } + found = true; + } + + if (subC2BF8(&_arrunkObj1337[3]._arr4[0], pt)) { + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + found = true; + } + + if (subC2BF8(&_arrunkObj1337[1]._arr4[0], pt)) { + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + found = true; + } + + if (subC2BF8(&_arrunkObj1337[0]._arr4[0], pt)) { + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + found = true; + } + + if (found) + return; + + if (_background1._bounds.contains(pt)) { + subCD193(); + return; + } + + if (subC2BF8(&_item7, pt)) + actionDisplay(1330, 9, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else if (subC2BF8(&_item8, pt)) + actionDisplay(1330, 5, 159, 10, 1, 200, 0, 7, 0, 154, 154); + else { + switch (curReg) { + case 0: + actionDisplay(1330, 3, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 6: + // no break on purpose + case 7: + // no break on purpose + case 8: + // no break on purpose + case 9: + actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + case 10: + actionDisplay(1330, 147, 20, 99, 1, 136, 0, 7, 0, 172, 172); + break; + case 11: + // no break on purpose + case 12: + // no break on purpose + case 13: + // no break on purpose + case 14: + actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 16: + // no break on purpose + case 17: + // no break on purpose + case 18: + // no break on purpose + case 19: + actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + case 20: + actionDisplay(1330, 146, 300, 99, 1, 136, 0, 7, 0, 117, 117); + break; + default: + actionDisplay(1330, 11, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + } + } } void Scene1337::subCF31D() { @@ -5197,12 +5503,12 @@ void Scene1337::subD02CA() { } if (di == 4) { - subCDB90(1, &_item6._field36); + subCDB90(1, _item6._field36); subD0281(); return; } } else if (R2_GLOBALS._v57810 == 300) { - subCDB90(3, &_item6._field36); + subCDB90(3, _item6._field36); subD0281(); return; } else { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 0f22ca646a..913550c223 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -343,12 +343,14 @@ public: void subC4CD2(); void subC4CEC(); void subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); + void subC6235(int arg1); void subPostInit(); void subCB59B(); void suggestInstructions(); void shuffleCards(); void subCCF26(); - void subCDB90(int arg1, Common::Point *pt); + void subCD193(); + void subCDB90(int arg1, Common::Point pt); void subCF31D(); void subCF979(); void subD026D(); -- cgit v1.2.3 From 949c8e97f5e54232b1b1277e39920f591aeedbcd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 20:09:49 +0100 Subject: TSAGE: R2R - Scene 1337: Implement another large AI function (subCF979) --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 250 +++++++++++++++++++++++- 1 file changed, 249 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 769fd58c78..bdafd3ba9a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -5424,7 +5424,255 @@ void Scene1337::subCF31D() { } void Scene1337::subCF979() { - warning("STUBBED Scene1337::subCF979()"); + bool found = true; + + if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { + switch (_arrunkObj1337[0]._arr3[0]._field34) { + case 10: + //No break on purpose + case 12: + //No break on purpose + case 15: + //No break on purpose + case 17: + //No break on purpose + case 18: + //No break on purpose + case 19: + //No break on purpose + case 20: + //No break on purpose + case 21: + subC4A39(&_arrunkObj1337[0]._arr3[0]); + found = false; + break; + default: + int i; + found = false; + + for (i = 0; i <= 3; i++) { + if (subC3386(_arrunkObj1337[0]._arr3[0]._field34, _arrunkObj1337[0]._arr1[i]._field34)) { + found = true; + break; + } + } + + if (found) { + found = false; + subC34A1(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[0]._arr3[0]); + } + break; + } + } + + if (found) + return; + + int tmpVal; + found = false; + for (int i = 0; i <= 3; i++) { + tmpVal = subC26CB(0, i); + + if (tmpVal != -1) { + bool flag = false;; + for (int j = 0; j <= 7; j++) { + if (_arrunkObj1337[0]._arr2[j]._field34 == _arrunkObj1337[0]._arr1[tmpVal]._field34) { + flag = true; + break; + } + } + + if (!flag) { + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[0]._arr2[j]._field34 == 1) && (!subC2687(_arrunkObj1337[0]._arr3[0]._field34))) { + int count = 0; + for (int k = 0; k <= 7; k++) { + if ((_arrunkObj1337[0]._arr2[k]._field34 > 1) && (_arrunkObj1337[0]._arr2[k]._field34 <= 9)) { + ++count; + } + } + + if (count == 7) + _field424A = 0; + + subC33C0(&_arrunkObj1337[0]._arr1[tmpVal], &_arrunkObj1337[0]._arr2[j]); + found = true; + } + } + } + } + + if (found) + break; + } + + if (found) + return; + + found = false; + tmpVal = subC2719(0); + + if (tmpVal != -1) { + for (int i = 0; i <= 7; i++) { + if ((_arrunkObj1337[0]._arr2[i]._field34 == 0) && (!subC2687(_arrunkObj1337[0]._arr3[0]._field34))) { + subC340B(&_arrunkObj1337[0]._arr1[tmpVal], &_arrunkObj1337[0]._arr2[i]); + found = true; + break; + } + } + } + + if (found) + return; + + tmpVal = subC274D(0); + if (tmpVal != -1) { + for (int i = 0; i <= 7; i++) { + if (_arrunkObj1337[2]._arr2[i]._field34 != 0) { + subC358E(&_arrunkObj1337[0]._arr1[tmpVal], 2); + found = true; + break; + } + } + } + + if (found) + return; + + tmpVal = subC2781(0); + if (tmpVal != -1) { + if ( (_arrunkObj1337[2]._arr1[0]._field34 != 0) + || (_arrunkObj1337[2]._arr1[1]._field34 != 0) + || (_arrunkObj1337[2]._arr1[2]._field34 != 0) + || (_arrunkObj1337[2]._arr1[3]._field34 != 0) ) { + subC318B(0, &_arrunkObj1337[0]._arr1[tmpVal], 2); + found = true; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + if (subC27B5(_arrunkObj1337[0]._arr1[i]._field34) != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[2]._arr3[0]._field34 == 0) && (subC32B1(2, _arrunkObj1337[0]._arr1[i]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[2]._arr3[0]); + found = true; + break; + } + } + + if (found) + break; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + if (subC27F9(_arrunkObj1337[0]._arr1[i]._field34) != -1) { + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[2]._arr3[0]._field34 == 0) && (subC32B1(2, _arrunkObj1337[0]._arr1[j]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[j], &_arrunkObj1337[2]._arr3[0]); + found = true; + } + } + + if (found) + break; + } + } + + if (found) + return; + + tmpVal = subC274D(0); + int tmpVal2 = subC331B(0); + + if ((tmpVal != -1) && (tmpVal2 != -1)) { + subC358E(&_arrunkObj1337[0]._arr1[tmpVal], tmpVal2); + found = true; + } + + if (found) + return; + + tmpVal = subC2781(0); + if (tmpVal != -1) { + if ( (_arrunkObj1337[1]._arr1[0]._field34 != 0) + || (_arrunkObj1337[1]._arr1[1]._field34 != 0) + || (_arrunkObj1337[1]._arr1[2]._field34 != 0) + || (_arrunkObj1337[1]._arr1[3]._field34 != 0) ) { + subC318B(0, &_arrunkObj1337[0]._arr1[tmpVal], 1); + found = true; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + tmpVal = subC27F9(_arrunkObj1337[0]._arr1[i]._field34); + if (tmpVal != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[1]._arr3[0]._field34 == 0) && (subC32B1(1, _arrunkObj1337[0]._arr1[i]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[1]._arr3[0]); + found = true; + } + } + + if (!found) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[3]._arr3[0]._field34 == 0) && (subC32B1(3, _arrunkObj1337[0]._arr1[i]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[3]._arr3[0]); + found = true; + } + } + } + + if (found) + break; + } + } + + if (found) + return; + + for (int i = 0; i <= 3; i++) { + tmpVal = subC27B5(_arrunkObj1337[0]._arr1[i]._field34); + if (tmpVal != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[1]._arr3[0]._field34 == 0) && (subC32B1(1, _arrunkObj1337[0]._arr1[i]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[1]._arr3[0]); + found = true; + } + } + + if (!found) { + // The variable 'j' is not used in the inner code of the loop. It's suspect. + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[3]._arr3[0]._field34 == 0) && (subC32B1(3, _arrunkObj1337[0]._arr1[i]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[3]._arr3[0]); + found = true; + } + } + } + + if (found) + break; + } + } + + if (found) + return; + + subC2835(0); } void Scene1337::subD026D() { -- cgit v1.2.3 From a64dc10b40a923e69d63b8936d1b37d47d747724 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 22:21:25 +0100 Subject: TSAGE: R2R - Scene 1337: Implement another AI related function --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 96 ++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index bdafd3ba9a..10f76cabf3 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4668,7 +4668,101 @@ void Scene1337::subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { } void Scene1337::subC6235(int arg1) { - warning("STUBBED: subC6235()"); + switch (arg1 - 1) { + case 0: + actionDisplay(1330, 53, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 1: + actionDisplay(1330, 57, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 2: + actionDisplay(1330, 58, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 3: + actionDisplay(1330, 59, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 4: + actionDisplay(1330, 60, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 5: + actionDisplay(1330, 61, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 6: + actionDisplay(1330, 62, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 7: + actionDisplay(1330, 63, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 8: + actionDisplay(1330, 64, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 9: + actionDisplay(1330, 65, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 10: + actionDisplay(1330, 67, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 11: + actionDisplay(1330, 69, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 12: + actionDisplay(1330, 71, 159, 10, 1, 200, 0, 7, 0, 154, 154); + actionDisplay(1330, 72, 159, 10, 1, 200, 0, 7, 0, 154, 154); + actionDisplay(1330, 73, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 13: + actionDisplay(1330, 79, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 14: + actionDisplay(1330, 81, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 15: + actionDisplay(1330, 83, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 16: + actionDisplay(1330, 85, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 17: + actionDisplay(1330, 87, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 18: + actionDisplay(1330, 89, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 19: + actionDisplay(1330, 91, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 20: + actionDisplay(1330, 93, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 23: + actionDisplay(1330, 95, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 24: + actionDisplay(1330, 97, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 25: + actionDisplay(1330, 104, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 26: + actionDisplay(1330, 105, 159, 10, 1, 200, 0, 7, 0, 154, 154); + actionDisplay(1330, 106, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 27: + actionDisplay(1330, 110, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 28: + actionDisplay(1330, 108, 159, 10, 1, 200, 0, 7, 0, 154, 154); + actionDisplay(1330, 109, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 29: + actionDisplay(1330, 111, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + case 31: + actionDisplay(1330, 112, 159, 10, 1, 200, 0, 7, 0, 154, 154); + break; + default: + break; + } } void Scene1337::subPostInit() { -- cgit v1.2.3 From dc229b893e1d0e4aa0ca8d2c5c3cd695e38f8942 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 14 Feb 2012 22:26:12 +0100 Subject: TSAGE: R2R - Scene 1337: rename previously committed function --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 30 ++++++++++++------------- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 10f76cabf3..6268978310 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4667,8 +4667,8 @@ void Scene1337::subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { _item1.setAction(&_action13); } -void Scene1337::subC6235(int arg1) { - switch (arg1 - 1) { +void Scene1337::displayDialog(int dialogNumb) { + switch (dialogNumb - 1) { case 0: actionDisplay(1330, 53, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; @@ -5017,25 +5017,25 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { switch (curReg) { case 5: if (_arrunkObj1337[2]._arr2[i]._field34 != 0) - subC6235(_arrunkObj1337[2]._arr2[i]._field34); + displayDialog(_arrunkObj1337[2]._arr2[i]._field34); else actionDisplay(1330, 20, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; case 10: if (_arrunkObj1337[3]._arr2[i]._field34 != 0) - subC6235(_arrunkObj1337[3]._arr2[i]._field34); + displayDialog(_arrunkObj1337[3]._arr2[i]._field34); else actionDisplay(1330, 22, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; case 15: if (_arrunkObj1337[0]._arr2[i]._field34 != 0) - subC6235(_arrunkObj1337[0]._arr2[i]._field34); + displayDialog(_arrunkObj1337[0]._arr2[i]._field34); else actionDisplay(1330, 21, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; case 20: if (_arrunkObj1337[1]._arr2[i]._field34 != 0) - subC6235(_arrunkObj1337[1]._arr2[i]._field34); + displayDialog(_arrunkObj1337[1]._arr2[i]._field34); else actionDisplay(1330, 23, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; @@ -5054,25 +5054,25 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { switch (curReg) { case 5: if (_arrunkObj1337[2]._arr3[0]._field34 != 0) - subC6235(_arrunkObj1337[2]._arr3[0]._field34); + displayDialog(_arrunkObj1337[2]._arr3[0]._field34); else actionDisplay(1330, 10, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; case 10: if (_arrunkObj1337[3]._arr3[0]._field34 != 0) - subC6235(_arrunkObj1337[3]._arr3[0]._field34); + displayDialog(_arrunkObj1337[3]._arr3[0]._field34); else actionDisplay(1330, 16, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; case 15: if (_arrunkObj1337[0]._arr3[0]._field34 != 0) - subC6235(_arrunkObj1337[3]._arr3[0]._field34); + displayDialog(_arrunkObj1337[3]._arr3[0]._field34); else actionDisplay(1330, 13, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; case 20: if (_arrunkObj1337[1]._arr3[0]._field34 != 0) - subC6235(_arrunkObj1337[1]._arr3[0]._field34); + displayDialog(_arrunkObj1337[1]._arr3[0]._field34); else actionDisplay(1330, 18, 159, 10, 1, 200, 0, 7, 0, 154, 154); break; @@ -5082,7 +5082,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { } else { if (subC2BF8(&_item7, pt)) { if (_item7._field34 != 0) - subC6235(_item7._field34); + displayDialog(_item7._field34); else actionDisplay(1330, 7, 159, 10, 1, 200, 0, 7, 0, 154, 154); } else if (_background1._bounds.contains(pt)) { @@ -5096,13 +5096,13 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { actionDisplay(1330, 32, 159, 10, 1, 200, 0, 7, 0, 154, 154); } else { if (subC2BF8(&_arrunkObj1337[2]._arr1[0], pt)) - subC6235(_arrunkObj1337[2]._arr1[0]._field34); + displayDialog(_arrunkObj1337[2]._arr1[0]._field34); else if (subC2BF8(&_arrunkObj1337[2]._arr1[1], pt)) - subC6235(_arrunkObj1337[2]._arr1[1]._field34); + displayDialog(_arrunkObj1337[2]._arr1[1]._field34); else if (subC2BF8(&_arrunkObj1337[2]._arr1[2], pt)) - subC6235(_arrunkObj1337[2]._arr1[2]._field34); + displayDialog(_arrunkObj1337[2]._arr1[2]._field34); else if (subC2BF8(&_arrunkObj1337[2]._arr1[3], pt)) - subC6235(_arrunkObj1337[2]._arr1[3]._field34); + displayDialog(_arrunkObj1337[2]._arr1[3]._field34); else if ((curReg >= 6) || (curReg <= 9)) actionDisplay(1330, 29, 159, 10, 1, 200, 0, 7, 0, 154, 154); else if ((curReg >= 11) || (curReg <= 14)) diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 913550c223..4c412dbcb0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -343,7 +343,7 @@ public: void subC4CD2(); void subC4CEC(); void subC51A0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2); - void subC6235(int arg1); + void displayDialog(int dialogNumb); void subPostInit(); void subCB59B(); void suggestInstructions(); -- cgit v1.2.3 From 8faf01647817e8882164c567d644d0af616583eb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 15 Feb 2012 01:48:58 +0100 Subject: TSAGE: R2R - Scene 1337: Fix a shadowed variable --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 6268978310..cf8d214d6b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -4359,8 +4359,8 @@ void Scene1337::subC2C2F() { if ((_arrunkObj1337[3]._arr2[i]._field34 == 1) && (!subC2687(_arrunkObj1337[3]._arr3[i]._field34))) { int tmpVal = 0; - for (int i = 0; i <= 7; i++) { - if ((_arrunkObj1337[3]._arr2[i]._field34 > 1) && (_arrunkObj1337[3]._arr2[i]._field34 <= 9)) + for (int j = 0; j <= 7; j++) { + if ((_arrunkObj1337[3]._arr2[j]._field34 > 1) && (_arrunkObj1337[3]._arr2[j]._field34 <= 9)) ++tmpVal; } -- cgit v1.2.3 From f9ae92186e07231ce6710e0e7b31485c9f18b0fc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 15 Feb 2012 19:37:20 +0100 Subject: TSAGE: R2R - Rename inventory enums, fix isInventoryIcon() --- engines/tsage/ringworld2/ringworld2_logic.cpp | 88 +++++++++++----------- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 56 +++++++------- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 98 ++++++++++++------------- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 38 +++++----- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 12 +-- 5 files changed, 146 insertions(+), 146 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 4f7578b1fa..074a3960cb 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -419,13 +419,13 @@ bool SceneExt::display(CursorType action, Event &event) { R2_GLOBALS._sound4.play(45); break; - case R2_9: - case R2_39: + case R2_COM_SCANNER: + case R2_COM_SCANNER_2: R2_GLOBALS._sound3.play(44); SceneItem::display2(2, action); R2_GLOBALS._sound3.stop(); break; - case R2_44: + case R2_PHOTON_STUNNER: R2_GLOBALS._sound3.play(99); SceneItem::display2(2, action); break; @@ -859,51 +859,51 @@ void Ringworld2InvObjectList::reset() { setObjectScene(R2_ATTRACTOR_UNIT, 400); setObjectScene(R2_SENSOR_PROBE, 400); setObjectScene(R2_SONIC_STUNNER, 500); - setObjectScene(R2_8, 700); - setObjectScene(R2_9, 800); - setObjectScene(R2_10, 100); - setObjectScene(R2_11, 400); + setObjectScene(R2_CABLE_HARNESS, 700); + setObjectScene(R2_COM_SCANNER, 800); + setObjectScene(R2_SPENT_POWER_CAPSULE, 100); + setObjectScene(R2_CHARGED_POWER_CAPSULE, 400); setObjectScene(R2_AEROSOL, 500); - setObjectScene(R2_13, 1550); + setObjectScene(R2_REMOTE_CONTROL, 1550); setObjectScene(R2_OPTICAL_FIBRE, 850); setObjectScene(R2_CLAMP, 850); - setObjectScene(R2_16, 0); - setObjectScene(R2_17, 1550); - setObjectScene(R2_18, 1550); - setObjectScene(R2_19, 1550); + setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 0); + setObjectScene(R2_FUEL_CELL, 1550); + setObjectScene(R2_GYROSCOPE, 1550); + setObjectScene(R2_AIRBAG, 1550); setObjectScene(R2_REBREATHER_TANK, 500); - setObjectScene(R2_21, 500); - setObjectScene(R2_22, 1550); - setObjectScene(R2_23, 1580); - setObjectScene(R2_24, 9999); - setObjectScene(R2_25, 1550); - setObjectScene(R2_26, 1550); - setObjectScene(R2_27, 1580); - setObjectScene(R2_28, 1550); - setObjectScene(R2_29, 2525); - setObjectScene(R2_30, 2440); - setObjectScene(R2_31, 2455); - setObjectScene(R2_32, 2535); - setObjectScene(R2_33, 2530); - setObjectScene(R2_34, 1950); - setObjectScene(R2_35, 1950); - setObjectScene(R2_36, 9999); - setObjectScene(R2_37, 2430); - setObjectScene(R2_38, 9999); - setObjectScene(R2_39, 2); - setObjectScene(R2_40, 9999); - setObjectScene(R2_41, 3150); - setObjectScene(R2_42, 0); - setObjectScene(R2_43, 3260); - setObjectScene(R2_44, 2); - setObjectScene(R2_45, 1550); - setObjectScene(R2_46, 0); - setObjectScene(R2_47, 3150); - setObjectScene(R2_48, 2435); - setObjectScene(R2_49, 2440); - setObjectScene(R2_50, 2435); - setObjectScene(R2_51, 1580); - setObjectScene(R2_52, 3260); + setObjectScene(R2_RESERVE_REBREATHER_TANK, 500); + setObjectScene(R2_GUIDANCE_MODULE, 1550); + setObjectScene(R2_THRUSTER_VALVE, 1580); + setObjectScene(R2_BALLOON_BACKPACK, 9999); + setObjectScene(R2_RADAR_MECHANISM, 1550); + setObjectScene(R2_JOYSTICK, 1550); + setObjectScene(R2_IGNITOR, 1580); + setObjectScene(R2_DIAGNOSTICS_DISPLAY, 1550); + setObjectScene(R2_GLASS_DOME, 2525); + setObjectScene(R2_WICK_LAMP, 2440); + setObjectScene(R2_SCRITH_KEY, 2455); + setObjectScene(R2_TANNER_MASK, 2535); + setObjectScene(R2_PURE_GRAIN_ALCOHOL, 2530); + setObjectScene(R2_SAPPHIRE_BLUE, 1950); + setObjectScene(R2_ANCIENT_SCROLLS, 1950); + setObjectScene(R2_FLUTE, 9999); + setObjectScene(R2_GUNPOWDER, 2430); + setObjectScene(R2_NONAME, 9999); + setObjectScene(R2_COM_SCANNER_2, 2); + setObjectScene(R2_SUPERCONDUCTOR_WIRE, 9999); + setObjectScene(R2_PILLOW, 3150); + setObjectScene(R2_FOOD_TRAY, 0); + setObjectScene(R2_LASER_HACKSAW, 3260); + setObjectScene(R2_PHOTON_STUNNER, 2); + setObjectScene(R2_BATTERY, 1550); + setObjectScene(R2_SOAKED_FACEMASK, 0); + setObjectScene(R2_LIGHT_BULB, 3150); + setObjectScene(R2_ALCOHOL_LAMP, 2435); + setObjectScene(R2_ALCOHOL_LAMP_2, 2440); + setObjectScene(R2_ALCOHOL_LAMP_3, 2435); + setObjectScene(R2_BROKEN_DISPLAY, 1580); + setObjectScene(R2_TOOLBOX, 3260); } void Ringworld2InvObjectList::setObjectScene(int objectNum, int sceneNumber) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 2b2b5e71ef..c2b00b675e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -4884,7 +4884,7 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { } return true; - case R2_21: + case R2_RESERVE_REBREATHER_TANK: SceneItem::display2(500, 53); return true; @@ -5442,7 +5442,7 @@ bool Scene600::Actor5::startAction(CursorType action, Event &event) { return true; } - if ((R2_GLOBALS.getFlag(9)) && (R2_INVENTORY.getObjectScene(R2_9) == 600)) + if ((R2_GLOBALS.getFlag(9)) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600)) SceneItem::display(600, 31, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); else { R2_GLOBALS._player.disableControl(); @@ -5457,7 +5457,7 @@ bool Scene600::Actor6::startAction(CursorType action, Event &event) { if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) { switch (action) { - case R2_9: + case R2_COM_SCANNER: if (R2_GLOBALS.getFlag(6)) { if (R2_GLOBALS.getFlag(8)) { SceneItem::display(600, 29, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); @@ -5828,7 +5828,7 @@ bool Scene700::Item12::startAction(CursorType action, Event &event) { Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; switch (action) { - case R2_8: + case R2_CABLE_HARNESS: R2_GLOBALS._player.disableControl(); scene->_actor5.postInit(); scene->_actor5.setup(701, 3, 2); @@ -5837,7 +5837,7 @@ bool Scene700::Item12::startAction(CursorType action, Event &event) { scene->_actor5.hide(); scene->_sceneMode = 20; break; - case R2_16: + case R2_ATTRACTOR_CABLE_HARNESS: R2_GLOBALS._player.disableControl(); scene->_actor5.postInit(); scene->_actor5.setup(701, 2, 8); @@ -5908,7 +5908,7 @@ bool Scene700::Actor5::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - switch (R2_INVENTORY.getObjectScene(R2_8)) { + switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: if ((_strip == 2) && (_frame == 1)) { R2_GLOBALS._player.disableControl(); @@ -5937,7 +5937,7 @@ bool Scene700::Actor5::startAction(CursorType action, Event &event) { break; case R2_ATTRACTOR_UNIT: R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(R2_8) == 700) { + if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) { scene->_sceneMode = 706; scene->setAction(&scene->_sequenceManager, scene, 706, &R2_GLOBALS._player, &scene->_actor5, NULL); } else { @@ -6020,12 +6020,12 @@ void Scene700::postInit(SceneObjectList *OwnerList) { _actor9.setPosition(Common::Point(324, 53)); _actor9.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); - if ((R2_INVENTORY.getObjectScene(R2_8) != 1) && (R2_INVENTORY.getObjectScene(R2_16) != 1)) { + if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 1) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 1)) { _actor5.postInit(); _actor5.fixPriority(10); - switch (R2_INVENTORY.getObjectScene(R2_16)) { + switch (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS)) { case 0: - switch (R2_INVENTORY.getObjectScene(R2_8)) { + switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: _actor5.setup(701, 3, 2); _actor5.setPosition(Common::Point(243, 98)); @@ -6041,7 +6041,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) { } break; case 700: - switch (R2_INVENTORY.getObjectScene(R2_8)) { + switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) _actor5.setup(701, 2, 1); @@ -6191,10 +6191,10 @@ void Scene700::signal() { R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); R2_GLOBALS._player._strip = 7; if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_UNIT) == 0) { - R2_INVENTORY.setObjectScene(R2_16, 1); - R2_INVENTORY.setObjectScene(R2_8, 0); + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 1); + R2_INVENTORY.setObjectScene(R2_CABLE_HARNESS, 0); } else { - R2_INVENTORY.setObjectScene(R2_8, 1); + R2_INVENTORY.setObjectScene(R2_CABLE_HARNESS, 1); } R2_GLOBALS._player.enableControl(); break; @@ -6219,7 +6219,7 @@ void Scene700::signal() { break; case 17: R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); - R2_INVENTORY.setObjectScene(R2_16, 700); + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.setVisage(11); R2_GLOBALS._player.changeZoom(100); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -6228,7 +6228,7 @@ void Scene700::signal() { R2_GLOBALS._player.enableControl(); break; case 20: - R2_INVENTORY.setObjectScene(R2_8, 0); + R2_INVENTORY.setObjectScene(R2_CABLE_HARNESS, 0); R2_GLOBALS._player.enableControl(); break; case 21: @@ -6236,7 +6236,7 @@ void Scene700::signal() { if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) _actor5.animate(ANIM_MODE_6, NULL); - R2_INVENTORY.setObjectScene(R2_16, 700); + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.enableControl(); break; case 701: @@ -6254,7 +6254,7 @@ void Scene700::signal() { if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) _actor5.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); - R2_INVENTORY.setObjectScene(R2_16, 700); + R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.enableControl(); break; case 709: @@ -6462,7 +6462,7 @@ void Scene800::postInit(SceneObjectList *OwnerList) { _cabinet.setPosition(Common::Point(169, 79)); _cabinet.setDetails(800, 41, -1, -1, 1, (SceneItem *)NULL); - if (R2_INVENTORY.getObjectScene(R2_9) == 800) { + if (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 800) { _comScanner.postInit(); _comScanner.setup(801, 2, 1); _comScanner.setPosition(Common::Point(174, 73)); @@ -6548,7 +6548,7 @@ void Scene800::signal() { case 811: R2_GLOBALS._player.enableControl(); _comScanner.remove(); - R2_INVENTORY.setObjectScene(R2_9, 1); + R2_INVENTORY.setObjectScene(R2_COM_SCANNER, 1); break; default: R2_GLOBALS._player.enableControl(); @@ -7152,7 +7152,7 @@ bool Scene900::Actor4::startAction(CursorType action, Event &event) { scene->_aSound1.play(30); setup(900, 3, 11); R2_GLOBALS._v565E5 = 1; - if ((R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16 == 700)) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70) && (scene->_actor2._animateMode != ANIM_MODE_6)) { + if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS == 700)) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70) && (scene->_actor2._animateMode != ANIM_MODE_6)) { scene->_actor2.animate(ANIM_MODE_6, NULL); } else { if (((scene->_actor3._percent * 49) / 100) + scene->_actor3._position.x == scene->_actor2._position.x) { @@ -7172,9 +7172,9 @@ bool Scene900::Actor4::startAction(CursorType action, Event &event) { setup(900, 3, 9); R2_GLOBALS._v565E5 = 0; - if ((R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (scene->_actor2._frame < 8) && (scene->_actor2._animateMode != ANIM_MODE_5)) { + if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_actor2._frame < 8) && (scene->_actor2._animateMode != ANIM_MODE_5)) { scene->_actor2.animate(ANIM_MODE_5, NULL); - } else if ((R2_INVENTORY.getObjectScene(R2_8) == 700) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (scene->_actor2._frame < 8)) { + } else if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_actor2._frame < 8)) { R2_GLOBALS._v565E7 = 0; if (scene->_actor2._animateMode != 5) { R2_GLOBALS._player.disableControl(); @@ -7288,13 +7288,13 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _actor3._effect = 1; _actor3.setDetails(900, 6, -1, 8, 1, (SceneItem *) NULL); - if ((R2_INVENTORY.getObjectScene(R2_8) != 1) && (R2_INVENTORY.getObjectScene(R2_16) != 1)) { + if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 1) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 1)) { _actor2.postInit(); _actor2.setPosition(Common::Point(0, 0)); _actor2.fixPriority(1); - if (R2_INVENTORY.getObjectScene(R2_8) == 0) { - if (R2_INVENTORY.getObjectScene(R2_16) != 700) { + if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) { + if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 700) { _actor2.setup(901, 3, 2); } else if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) { _actor2.setup(901, 2, 1); @@ -7446,11 +7446,11 @@ void Scene900::dispatch() { } if (R2_GLOBALS._sceneObjects->contains(&_actor2)) { - if ((R2_GLOBALS._v565E5 != 0) && (R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) { + if ((R2_GLOBALS._v565E5 != 0) && (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (R2_GLOBALS._v565E1 == 20) && (R2_GLOBALS._v565E3 == 70)) { if ((_actor2._frame > 1) && (_actor2._animateMode != ANIM_MODE_6)) _actor2.animate(ANIM_MODE_6, NULL); } else { - if ((_actor2._frame < 8) && (_actor2._animateMode != ANIM_MODE_5) && (R2_GLOBALS._v565E7 == 0) && (R2_INVENTORY.getObjectScene(R2_8) == 0) && (R2_INVENTORY.getObjectScene(R2_16) == 700) && (_sceneMode != 4)) + if ((_actor2._frame < 8) && (_actor2._animateMode != ANIM_MODE_5) && (R2_GLOBALS._v565E7 == 0) && (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (_sceneMode != 4)) _actor2.animate(ANIM_MODE_5, NULL); } } diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index cf8d214d6b..713d7dc7d0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -279,7 +279,7 @@ bool Scene1100::Actor17::startAction(CursorType action, Event &event) { break; case R2_SONIC_STUNNER: // No break on purpose - case R2_44: + case R2_PHOTON_STUNNER: if (_visage == 1105) { R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._characterIndex == 1) { @@ -6690,7 +6690,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { SceneItem::display(1550, 71, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); return true; break; - case R2_17: + case R2_FUEL_CELL: scene->_field412 = 1; if (_fieldA4 == 6) { R2_GLOBALS._player.disableControl(); @@ -6704,7 +6704,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } return SceneActor::startAction(action, event); break; - case R2_18: + case R2_GYROSCOPE: scene->_field412 = 1; if (_fieldA4 == 3) { R2_GLOBALS._player.disableControl(); @@ -6718,7 +6718,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } return SceneActor::startAction(action, event); break; - case R2_22: + case R2_GUIDANCE_MODULE: scene->_field412 = 1; if (_fieldA4 == 1) { R2_GLOBALS._player.disableControl(); @@ -6732,7 +6732,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } return SceneActor::startAction(action, event); break; - case R2_23: + case R2_THRUSTER_VALVE: scene->_field412 = 1; if (_fieldA4 == 4) { R2_GLOBALS._player.disableControl(); @@ -6743,7 +6743,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } return SceneActor::startAction(action, event); break; - case R2_25: + case R2_RADAR_MECHANISM: scene->_field412 = 1; if (_fieldA4 == 2) { R2_GLOBALS._player.disableControl(); @@ -6757,7 +6757,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } return SceneActor::startAction(action, event); break; - case R2_27: + case R2_IGNITOR: scene->_field412 = 1; if (_fieldA4 == 5) { R2_GLOBALS._player.disableControl(); @@ -6768,7 +6768,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } return SceneActor::startAction(action, event); break; - case R2_45: + case R2_BATTERY: scene->_field412 = 1; if (_fieldA4 == 7) { R2_GLOBALS._player.disableControl(); @@ -6794,37 +6794,37 @@ void Scene1550::UnkObj15502::subA5CDF(int strip) { setup(1517, _fieldA4, 1); switch (_fieldA4 - 1) { case 0: - if (R2_INVENTORY.getObjectScene(R2_22) == 0) + if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) == 0) setFrame(5); setPosition(Common::Point(287, 85)); break; case 1: - if (R2_INVENTORY.getObjectScene(R2_25) == 0) + if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) == 0) setFrame(5); setPosition(Common::Point(248, 100)); break; case 2: - if (R2_INVENTORY.getObjectScene(R2_28) == 0) + if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 0) setFrame(5); setPosition(Common::Point(217, 85)); break; case 3: - if (R2_INVENTORY.getObjectScene(R2_23)) + if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE)) setFrame(5); setPosition(Common::Point(161, 121)); break; case 4: - if (R2_INVENTORY.getObjectScene(R2_27)) + if (R2_INVENTORY.getObjectScene(R2_IGNITOR)) setFrame(5); setPosition(Common::Point(117, 121)); break; case 5: - if (R2_INVENTORY.getObjectScene(R2_17)) + if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL)) setFrame(5); setPosition(Common::Point(111, 85)); break; case 6: - if (R2_INVENTORY.getObjectScene(R2_45)) + if (R2_INVENTORY.getObjectScene(R2_BATTERY)) setFrame(5); setPosition(Common::Point(95, 84)); break; @@ -7129,7 +7129,7 @@ bool Scene1550::Actor13::startAction(CursorType action, Event &event) { if (scene->_field415 != 2) return SceneActor::startAction(action, event); - if (R2_INVENTORY.getObjectScene(R2_45) == 1550) { + if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1564; scene->setAction(&scene->_sequenceManager1, scene, 1564, &R2_GLOBALS._player, NULL); @@ -7141,7 +7141,7 @@ bool Scene1550::Actor13::startAction(CursorType action, Event &event) { if (scene->_field415 != 2) return SceneActor::startAction(action, event); - if (R2_INVENTORY.getObjectScene(R2_45) == 1550) { + if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) { SceneItem::display(1550, 74, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); } else SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); @@ -7184,7 +7184,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) - R2_GLOBALS.setFlag(R2_16); + R2_GLOBALS.setFlag(R2_ATTRACTOR_CABLE_HARNESS); if ((R2_GLOBALS._player._characterScene[1] != 1550) && (R2_GLOBALS._player._characterScene[1] != 1580)) { R2_GLOBALS._player._characterScene[1] = 1550; @@ -7477,7 +7477,7 @@ void Scene1550::signal() { case 1552: // No break on purpose case 1588: - R2_INVENTORY.setObjectScene(R2_19, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_AIRBAG, R2_GLOBALS._player._characterIndex); _actor8.remove(); _field412 = 0; R2_GLOBALS._player.enableControl(); @@ -7492,7 +7492,7 @@ void Scene1550::signal() { case 1555: // No break on purpose case 1589: - R2_INVENTORY.setObjectScene(R2_18, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_GYROSCOPE, R2_GLOBALS._player._characterIndex); _actor10.remove(); R2_GLOBALS._player.enableControl(); break; @@ -7516,7 +7516,7 @@ void Scene1550::signal() { _field415 = 2; break; case 1564: - R2_INVENTORY.setObjectScene(R2_45, 1); + R2_INVENTORY.setObjectScene(R2_BATTERY, 1); _sceneMode = 1565; setAction(&_sequenceManager1, this, 1565, &R2_GLOBALS._player, NULL); break; @@ -7529,7 +7529,7 @@ void Scene1550::signal() { case 1579: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_22, 0); + R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, 0); R2_GLOBALS._player.enableControl(); break; case 1570: @@ -7537,7 +7537,7 @@ void Scene1550::signal() { case 1580: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_25, 0); + R2_INVENTORY.setObjectScene(R2_RADAR_MECHANISM, 0); R2_GLOBALS._player.enableControl(); break; case 1571: @@ -7545,19 +7545,19 @@ void Scene1550::signal() { case 1581: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_18, 0); + R2_INVENTORY.setObjectScene(R2_GYROSCOPE, 0); R2_GLOBALS._player.enableControl(); break; case 1572: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_23, 0); + R2_INVENTORY.setObjectScene(R2_THRUSTER_VALVE, 0); R2_GLOBALS._player.enableControl(); break; case 1573: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_27, 0); + R2_INVENTORY.setObjectScene(R2_IGNITOR, 0); R2_GLOBALS._player.enableControl(); break; case 1574: @@ -7565,7 +7565,7 @@ void Scene1550::signal() { case 1582: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_17, 0); + R2_INVENTORY.setObjectScene(R2_FUEL_CELL, 0); R2_GLOBALS._player.enableControl(); break; case 1575: @@ -7573,7 +7573,7 @@ void Scene1550::signal() { case 1583: _field412 = 0; _actor1.remove(); - R2_INVENTORY.setObjectScene(R2_45, 0); + R2_INVENTORY.setObjectScene(R2_BATTERY, 0); R2_GLOBALS._player.enableControl(); break; case 1576: @@ -7598,14 +7598,14 @@ void Scene1550::signal() { case 1586: // No break on purpose case 1587: - R2_INVENTORY.setObjectScene(R2_28, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, R2_GLOBALS._player._characterIndex); _actor1.remove(); _field412 = 0; R2_GLOBALS._player.enableControl(); break; case 1592: _actor9.remove(); - R2_INVENTORY.setObjectScene(R2_26, 1); + R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1); if (R2_GLOBALS._player._characterIndex == 1) { R2_GLOBALS._v565EC[2] = R2_GLOBALS._v565EC[1]; R2_GLOBALS._v565EC[4] = R2_GLOBALS._v565EC[3]; @@ -8393,7 +8393,7 @@ void Scene1550::subA2B2F() { R2_GLOBALS._walkRegions.enableRegion(k5A78D); R2_GLOBALS._walkRegions.enableRegion(k5A790); R2_GLOBALS._walkRegions.enableRegion(k5A791); - if (R2_INVENTORY.getObjectScene(R2_26) == 1550) { + if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1550) { _actor9.postInit(); _actor9.setup(1562, 3, 1); _actor9.setPosition(Common::Point(150, 70)); @@ -8482,7 +8482,7 @@ void Scene1550::subA2B2F() { _actor1.setPosition(Common::Point(259, 133)); _actor1.fixPriority(105); _actor1.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - if (R2_INVENTORY.getObjectScene(R2_18) == 1550) { + if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 1550) { _actor10.postInit(); _actor10.setup(1550, 7, 2); _actor10.setPosition(Common::Point(227, 30)); @@ -8501,7 +8501,7 @@ void Scene1550::subA2B2F() { _actor1.setup(1550, 1, 3); _actor1.setPosition(Common::Point(76, 64)); _actor1.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - if (R2_INVENTORY.getObjectScene(R2_28) == 1550) { + if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1550) { _actor11.postInit(); _actor11.setup(1504, 4, 1); _actor11.setPosition(Common::Point(49, 35)); @@ -8510,7 +8510,7 @@ void Scene1550::subA2B2F() { _actor11.fixPriority(65); _actor11.setDetails(1550, 14, 15, 63, 2, (SceneItem *) NULL); } - if (R2_INVENTORY.getObjectScene(R2_19) == 1550) { + if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1550) { _actor8.postInit(); _actor8.setup(1550, 7, 1); _actor8.setPosition(Common::Point(45, 44)); @@ -9050,7 +9050,7 @@ void Scene1580::synchronize(Serializer &s) { bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) { Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; - if (action == R2_26) { + if (action == R2_JOYSTICK) { R2_INVENTORY.setObjectScene(26, 1580); R2_GLOBALS._sceneItems.remove(&scene->_item1); scene->_actor2.postInit(); @@ -9069,7 +9069,7 @@ bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) { bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) { Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; - if (action == R2_28) { + if (action == R2_DIAGNOSTICS_DISPLAY) { R2_INVENTORY.setObjectScene(28, 1580); R2_GLOBALS._player.disableControl(); R2_GLOBALS._sceneItems.remove(&scene->_item2); @@ -9171,14 +9171,14 @@ bool Scene1580::Actor6::startAction(CursorType action, Event &event) { return true; } break; - case R2_9: + case R2_COM_SCANNER: scene->_sceneMode = 30; R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); scene->_stripManager.start(529, scene); return true; break; - case R2_39: + case R2_COM_SCANNER_2: scene->_sceneMode = 30; R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -9203,14 +9203,14 @@ bool Scene1580::Actor7::startAction(CursorType action, Event &event) { return true; } break; - case R2_9: + case R2_COM_SCANNER: scene->_sceneMode = 30; R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); scene->_stripManager.start(529, scene); return true; break; - case R2_39: + case R2_COM_SCANNER_2: scene->_sceneMode = 30; R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -10442,7 +10442,7 @@ void Scene1800::synchronize(Serializer &s) { } bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { - if ((action != R2_9) && (action != R2_39)) + if ((action != R2_COM_SCANNER) && (action != R2_COM_SCANNER_2)) return false; Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; @@ -11231,10 +11231,10 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { _stripManager.setFontNumber(3); _stripManager.addSpeaker(&_seekerSpeaker); - _exit1.setDetails(Rect(0, 105, 14, 145), R2_9, 2000); + _exit1.setDetails(Rect(0, 105, 14, 145), R2_COM_SCANNER, 2000); _exit1.setDest(Common::Point(14, 135)); - _exit2.setDetails(Rect(305, 105, 320, 145), R2_10, 2000); + _exit2.setDetails(Rect(305, 105, 320, 145), R2_SPENT_POWER_CAPSULE, 2000); _exit2.setDest(Common::Point(315, 135)); R2_GLOBALS._player.postInit(); @@ -11752,7 +11752,7 @@ bool Scene1945::Hotspot3::startAction(CursorType action, Event &event) { Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; switch (action) { - case R2_37: + case R2_GUNPOWDER: R2_GLOBALS._player.disableControl(); scene->_sceneMode = 0; if ((R2_GLOBALS._player._position.x == 191) && (R2_GLOBALS._player._position.y == 142)) @@ -11817,7 +11817,7 @@ bool Scene1945::Hotspot4::startAction(CursorType action, Event &event) { } bool Scene1945::Actor3::startAction(CursorType action, Event &event) { - if ((action == R2_50) && (action == R2_49)) { + if ((action == R2_ALCOHOL_LAMP_3) && (action == R2_ALCOHOL_LAMP_2)) { Scene1945 *scene = (Scene1945 *)R2_GLOBALS._sceneManager._scene; scene->_fieldEAE = action; @@ -11981,7 +11981,7 @@ void Scene1945::signal() { } return; case 1942: - R2_INVENTORY.setObjectScene(R2_37, 0); + R2_INVENTORY.setObjectScene(R2_GUNPOWDER, 0); _actor3.setDetails(1945, 15, -1, -1, 2, (SceneItem *) NULL); R2_GLOBALS.setFlag(42); break; @@ -12239,7 +12239,7 @@ bool Scene1950::Hotspot2::startAction(CursorType action, Event &event) { } bool Scene1950::Actor2::startAction(CursorType action, Event &event) { - if (action != R2_31) + if (action != R2_SCRITH_KEY) return SceneActor::startAction(action, event); Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; @@ -12416,7 +12416,7 @@ void Scene1950::Actor8::signal() { bool Scene1950::Actor8::startAction(CursorType action, Event &event) { Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; - if ((R2_GLOBALS._v56613[(scene->_field41C - 1) * 4] == 0) || (action != R2_44)) + if ((R2_GLOBALS._v56613[(scene->_field41C - 1) * 4] == 0) || (action != R2_PHOTON_STUNNER)) return SceneActor::startAction(action, event); R2_GLOBALS._player.disableControl(); @@ -13826,7 +13826,7 @@ void Scene1950::signal() { void Scene1950::process(Event &event) { if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._uiEnabled) - && (R2_GLOBALS._events.getCursor() == R2_47) + && (R2_GLOBALS._events.getCursor() == R2_LIGHT_BULB) && (R2_GLOBALS._player._bounds.contains(event.mousePos)) && (R2_INVENTORY.getObjectScene(31) == 0)) { event.handled = true; diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 3cc541493d..5567519046 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1269,13 +1269,13 @@ void Scene2400::signal() { bool Scene2425::Item1::startAction(CursorType action, Event &event) { Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; - if ((action == R2_37) && (!R2_GLOBALS.getFlag(84))) { + if ((action == R2_GUNPOWDER) && (!R2_GLOBALS.getFlag(84))) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2426; scene->setAction(&scene->_sequenceManager, scene, 2426, &R2_GLOBALS._player, &scene->_actor1, NULL); R2_GLOBALS.setFlag(84); return true; - } else if (action == R2_37) { + } else if (action == R2_GUNPOWDER) { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); return NamedHotspot::startAction(R2_STEPPING_DISKS, event); @@ -1286,13 +1286,13 @@ bool Scene2425::Item1::startAction(CursorType action, Event &event) { bool Scene2425::Item2::startAction(CursorType action, Event &event) { Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; - if ((action == R2_37) && (R2_GLOBALS.getFlag(84))) { + if ((action == R2_GUNPOWDER) && (R2_GLOBALS.getFlag(84))) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2427; scene->setAction(&scene->_sequenceManager, scene, 2427, &R2_GLOBALS._player, &scene->_actor1, NULL); R2_GLOBALS.clearFlag(84); return true; - } else if (action == R2_37) { + } else if (action == R2_GUNPOWDER) { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); R2_GLOBALS._player.enableControl(R2_STEPPING_DISKS); return NamedHotspot::startAction(R2_STEPPING_DISKS, event); @@ -1303,7 +1303,7 @@ bool Scene2425::Item2::startAction(CursorType action, Event &event) { bool Scene2425::Item3::startAction(CursorType action, Event &event) { Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; - if (action != R2_37) + if (action != R2_GUNPOWDER) return NamedHotspot::startAction(action, event); else { R2_GLOBALS._player.disableControl(); @@ -1320,7 +1320,7 @@ bool Scene2425::Item3::startAction(CursorType action, Event &event) { } bool Scene2425::Item4::startAction(CursorType action, Event &event) { - if (action != R2_37) + if (action != R2_GUNPOWDER) return NamedHotspot::startAction(action, event); else { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); @@ -1332,19 +1332,19 @@ bool Scene2425::Item4::startAction(CursorType action, Event &event) { bool Scene2425::Actor1::startAction(CursorType action, Event &event) { if (action == R2_STEPPING_DISKS) { if (R2_GLOBALS._player._characterIndex == 2) { - R2_GLOBALS._events.setCursor(R2_37); + R2_GLOBALS._events.setCursor(R2_GUNPOWDER); return true; } else { return SceneActor::startAction(action, event); } - } else if (R2_GLOBALS._events.getCursor() == R2_37) + } else if (R2_GLOBALS._events.getCursor() == R2_GUNPOWDER) return false; else return SceneActor::startAction(action, event); } bool Scene2425::Actor2::startAction(CursorType action, Event &event) { - if (action != R2_37) + if (action != R2_GUNPOWDER) return SceneActor::startAction(action, event); else { R2_GLOBALS._events.setCursor(R2_STEPPING_DISKS); @@ -1601,12 +1601,12 @@ void Scene2430::signal() { break; case 2430: _actor2.remove(); - R2_INVENTORY.setObjectScene(R2_37, 2); + R2_INVENTORY.setObjectScene(R2_GUNPOWDER, 2); R2_GLOBALS._player.enableControl(); break; case 2435: _actor3.remove(); - R2_INVENTORY.setObjectScene(R2_50, 2); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_3, 2); R2_GLOBALS._player.enableControl(); break; default: @@ -1627,18 +1627,18 @@ bool Scene2435::Actor2::startAction(CursorType action, Event &event) { Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; switch (action) { - case R2_34: + case R2_SAPPHIRE_BLUE: R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_ARROW); R2_GLOBALS.setFlag(82); scene->_stripManager.start(603, scene); return true; - case R2_35: + case R2_ANCIENT_SCROLLS: R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_ARROW); R2_GLOBALS.setFlag(82); scene->_stripManager.start(602, scene); - R2_INVENTORY.setObjectScene(R2_35, 2000); + R2_INVENTORY.setObjectScene(R2_ANCIENT_SCROLLS, 2000); return true; case CURSOR_TALK: R2_GLOBALS._player.disableControl(); @@ -1647,7 +1647,7 @@ bool Scene2435::Actor2::startAction(CursorType action, Event &event) { if ((R2_GLOBALS._player._characterIndex == 1) || (R2_GLOBALS.getFlag(82))) { scene->_stripManager.start(605, scene); return true; - } else if (R2_INVENTORY.getObjectScene(R2_35) == 2) { + } else if (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2) { scene->_stripManager.start(601, scene); return true; } else { @@ -2204,7 +2204,7 @@ void Scene2450::signal() { bool Scene2455::Actor1::startAction(CursorType action, Event &event) { Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; - if (action == R2_29) { + if (action == R2_GLASS_DOME) { if ((R2_INVENTORY.getObjectScene(49) == 2455) || (R2_INVENTORY.getObjectScene(50) == 2455)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2458; @@ -2224,7 +2224,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; switch (action) { - case R2_49: + case R2_ALCOHOL_LAMP_2: if (R2_INVENTORY.getObjectScene(50) != 2455) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); @@ -2236,7 +2236,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { return true; } break; - case R2_50: + case R2_ALCOHOL_LAMP_3: if (R2_INVENTORY.getObjectScene(49) != 2455) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); @@ -3513,7 +3513,7 @@ void Scene2700::signal() { } void Scene2700::process(Event &event) { if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN)) { - if (R2_GLOBALS._events.getCursor() == R2_36) { + if (R2_GLOBALS._events.getCursor() == R2_FLUTE) { if (R2_GLOBALS._player._bounds.contains(event.mousePos)) { _sceneMode = 10; _field414 = 2710; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 99bcf3df44..2b97cba8e9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -385,7 +385,7 @@ bool Scene3150::Item5::startAction(CursorType action, Event &event) { scene->_sceneMode = 3154; scene->setAction(&scene->_sequenceManager, scene, 3154, &R2_GLOBALS._player, &scene->_actor3, NULL); return true; - case R2_40: + case R2_SUPERCONDUCTOR_WIRE: if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_GLOBALS.getFlag(75))) { R2_GLOBALS._player.disableControl(); scene->_actor3.postInit(); @@ -407,7 +407,7 @@ bool Scene3150::Item6::startAction(CursorType action, Event &event) { Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; switch (action) { - case R2_41: + case R2_PILLOW: R2_GLOBALS._player.disableControl(); scene->_actor4.postInit(); scene->_actor4._effect = 6; @@ -416,7 +416,7 @@ bool Scene3150::Item6::startAction(CursorType action, Event &event) { scene->_sceneMode = 3158; scene->setAction(&scene->_sequenceManager, scene, 3158, &R2_GLOBALS._player, &scene->_actor4, NULL); return true; - case R2_42: + case R2_FOOD_TRAY: if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_INVENTORY.getObjectScene(40) == 3150) && (R2_GLOBALS.getFlag(75))) { scene->_actor5.postInit(); scene->_actor5._effect = 6; @@ -447,7 +447,7 @@ bool Scene3150::Actor4::startAction(CursorType action, Event &event) { scene->_sceneMode = 3151; scene->setAction(&scene->_sequenceManager, scene, 3151, &R2_GLOBALS._player, &scene->_actor4, NULL); return true; - case R2_42: + case R2_FOOD_TRAY: return false; default: return SceneActor::startAction(action, event); @@ -498,7 +498,7 @@ bool Scene3150::Actor6::startAction(CursorType action, Event &event) { bool Scene3150::Actor7::startAction(CursorType action, Event &event) { Scene3150 *scene = (Scene3150 *)R2_GLOBALS._sceneManager._scene; - if ((action == R2_43) && (!R2_GLOBALS.getFlag(80))) { + if ((action == R2_LASER_HACKSAW) && (!R2_GLOBALS.getFlag(80))) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 3160; scene->setAction(&scene->_sequenceManager, scene, 3160, &R2_GLOBALS._player, &scene->_actor7, NULL); @@ -4325,7 +4325,7 @@ bool Scene3600::Actor13::startAction(CursorType action, Event &event) { return true; case R2_SONIC_STUNNER: // No break on purpose - case R2_44: + case R2_PHOTON_STUNNER: if (action == R2_SONIC_STUNNER) R2_GLOBALS._sound3.play(43); else -- cgit v1.2.3 From ffd5326ca10fd7f33e5099ccb24075e06248a721 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 15 Feb 2012 19:44:56 +0100 Subject: TSAGE: R2R - Scene 1337: rename a variable --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 6 +++--- engines/tsage/ringworld2/ringworld2_scenes1.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 713d7dc7d0..4d37d6beb0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -1634,7 +1634,7 @@ void Scene1337::unkObj1337_1::synchronize(Serializer &s) { } Scene1337::Scene1337() { - _fieldA30 = 0; + _autoplay = false; _field3E24 = 0; _field3E26 = 0; @@ -3939,7 +3939,7 @@ void Scene1337::subC20F9() { break; } - if (_fieldA30 == 0) + if (!_autoplay) _unkFctPtr412 = &Scene1337::subC20E5; else subC20E5(); @@ -4916,7 +4916,7 @@ void Scene1337::subPostInit() { _background1.setup2(9531, 1, 1, 249, 168, 155, 0); - _fieldA30 = 0; + _autoplay = false; _field424C = 0; _field424E = 0; } diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 4c412dbcb0..a5c7ee5f5c 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -263,7 +263,7 @@ public: ASound _aSound1; ASound _aSound2; BackgroundSceneObject _background1; - int _fieldA30; + bool _autoplay; unkObj1337_1 _arrunkObj1337[4]; SceneItem _item1; SceneObject _object1; -- cgit v1.2.3 From 66aff9c4d81f842b6f5d66adedf9dd0f524d4cec Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 15 Feb 2012 23:56:15 +0100 Subject: TSAGE: R2R - Implement scene 1850 --- engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 775 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 52 ++ 3 files changed, 828 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 074a3960cb..33ccfa1898 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -143,7 +143,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { case 1800: return new Scene1800(); case 1850: - error("Missing scene %d from group 1", sceneNumber); + return new Scene1850(); case 1875: return new Scene1875(); case 1900: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 4d37d6beb0..a52030677f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -10951,6 +10951,781 @@ void Scene1800::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } +/*-------------------------------------------------------------------------- + * Scene 1850 - + * + *--------------------------------------------------------------------------*/ +Scene1850::Scene1850() { + warning("STUBBED: Scene1850()"); +} + +void Scene1850::synchronize(Serializer &s) { + warning("STUBBED: Scene1850::synchronize()"); +} + +bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneHotspot::startAction(action, event); + + Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + scene->_sceneMode = 1852; + if (R2_GLOBALS.getFlag(32)) + scene->setAction(&scene->_sequenceManager1, scene, 1871, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 1852, &R2_GLOBALS._player, NULL); + } else if (R2_GLOBALS.getFlag(30)) { + scene->_field41E = 1; + scene->_sceneMode = 1860; + + if (R2_GLOBALS.getFlag(32)) + scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_actor5, NULL); + + R2_GLOBALS.clearFlag(30); + } else { + scene->_sceneMode = 1853; + + if (R2_GLOBALS.getFlag(32)) + scene->setAction(&scene->_sequenceManager1, scene, 1872, &R2_GLOBALS._player, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 1853, &R2_GLOBALS._player, NULL); + } + + return true; +} + +bool Scene1850::Actor5::startAction(CursorType action, Event &event) { + Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; + + switch (action) { + case CURSOR_USE: + if ((R2_GLOBALS._player._characterIndex != R2_SEEKER) || (R2_GLOBALS.getFlag(33)) || (R2_GLOBALS.getFlag(30))) + return SceneActor::startAction(action, event); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1857; + + if (R2_GLOBALS.getFlag(32)) + scene->setAction(&scene->_sequenceManager1, scene, 1858, &R2_GLOBALS._player, &scene->_actor5, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 1857, &R2_GLOBALS._player, &scene->_actor5, NULL); + + R2_GLOBALS.setFlag(30); + return true; + break; + case CURSOR_LOOK: + if (R2_GLOBALS.getFlag(34)) + SceneItem::display(1850, 2, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + else + SceneItem::display(1850, 1, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + + return true; + break; + case R2_AIRBAG: + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { + if (R2_GLOBALS.getFlag(70)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 30; + + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(558, scene); + + return true; + } else { + return SceneActor::startAction(action, event); + } + } else if (R2_GLOBALS.getFlag(30)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1875; + scene->_actor2.postInit(); + + if (R2_GLOBALS.getFlag(32)) + scene->setAction(&scene->_sequenceManager1, scene, 1876, &R2_GLOBALS._player, &scene->_actor2, NULL); + else + scene->setAction(&scene->_sequenceManager1, scene, 1875, &R2_GLOBALS._player, &scene->_actor2, NULL); + + return true; + } else if (R2_GLOBALS.getFlag(70)) { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 30; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_stripManager.start(557, scene); + R2_GLOBALS.setFlag(69); + + return true; + } else { + return SceneActor::startAction(action, event); + } + break; + case R2_REBREATHER_TANK: + if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { + if (R2_GLOBALS.getFlag(30)) + return SceneActor::startAction(action, event);; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1878; + scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor2, NULL); + } + + return true; + break; + default: + return SceneActor::startAction(action, event); + break; + } +} + +bool Scene1850::Actor6::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneHotspot::startAction(action, event); + + Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS.getFlag(32)) { + SceneItem::display(3240, 4, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); + return true; + } + + R2_GLOBALS._player.disableControl(); + if (scene->_field412 == 1851) + R2_GLOBALS._player._effect = 1; + + if (_position.x >= 160) + R2_GLOBALS.setFlag(29); + else + R2_GLOBALS.clearFlag(29); + + if ((R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { + if (_position.x >= 160) + scene->_field41E = 3; + else + scene->_field41E = 2; + + scene->_sceneMode = 1860; + + if (R2_GLOBALS.getFlag(32)) { + scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_actor5, NULL); + } + } else { + scene->_sceneMode = 11; + if (_position.x >= 160) { + scene->setAction(&scene->_sequenceManager1, scene, 1866, &R2_GLOBALS._player, &scene->_actor7, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 1865, &R2_GLOBALS._player, &scene->_actor6, NULL); + } + } + + return true; +} + +bool Scene1850::Actor8::startAction(CursorType action, Event &event) { + if ((action != CURSOR_USE) || (_position.y != 120)) + return SceneHotspot::startAction(action, event); + + Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 1881; + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + scene->setAction(&scene->_sequenceManager1, scene, 1881, &R2_GLOBALS._player, NULL); + } else { + scene->setAction(&scene->_sequenceManager1, scene, 1880, &R2_GLOBALS._player, NULL); + } + + return true; +} + +void Scene1850::postInit(SceneObjectList *OwnerList) { + loadScene(1850); + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850) + R2_GLOBALS.clearFlag(31); + + _palette1.loadPalette(0); + + if (R2_GLOBALS.getFlag(31)) { + _field412 = 1850; + g_globals->_scenePalette.loadPalette(1850); + } else { + _field412 = 1851; + g_globals->_scenePalette.loadPalette(1851); + } + + SceneExt::postInit(); + + if (R2_GLOBALS._sceneManager._previousScene == 3150) + R2_GLOBALS._sound1.play(116); + + _stripManager.addSpeaker(&_quinnSpeaker); + _stripManager.addSpeaker(&_seekerSpeaker); + + _field418 = 0; + _field41E = 0; + _field41A = Common::Point(0, 0); + + R2_GLOBALS._player._characterScene[1] = 1850; + R2_GLOBALS._player._characterScene[2] = 1850; + + _item2.setDetails(Rect(101, 56, 111, 63), 1850, 19, -1, -1, 1, NULL); + + _actor6.postInit(); + _actor6.setup(1850, 3, 1); + _actor6.setPosition(Common::Point(66, 102)); + _actor6.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL); + + _actor7.postInit(); + _actor7.setup(1850, 2, 1); + _actor7.setPosition(Common::Point(253, 102)); + _actor7.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL); + + R2_GLOBALS._walkRegions.enableRegion(1); + + _actor5.postInit(); + + if (R2_GLOBALS.getFlag(34)) { + R2_GLOBALS._walkRegions.enableRegion(2); + _actor5.setup(1851, 4, 3); + } else if (R2_GLOBALS.getFlag(30)) { + _actor5.setup(1851, 2, 2); + } else { + R2_GLOBALS._walkRegions.enableRegion(5); + if (R2_GLOBALS.getFlag(33)) { + R2_GLOBALS._walkRegions.enableRegion(2); + _actor5.setup(1851, 1, 3); + } else { + _actor5.setup(1851, 2, 1); + } + } + + _actor5.setPosition(Common::Point(219, 130)); + _actor5.fixPriority(114); + _actor5.setDetails(1850, -1, -1, -1, 1, (SceneItem *) NULL); + + R2_GLOBALS._player.postInit(); + + _actor1.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + } else { + _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + } + + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) { + R2_GLOBALS._player._effect = 6; + _actor1._effect = 6; + if (R2_GLOBALS.getFlag(31)) { + R2_GLOBALS._player._shade = 0; + _actor1._shade = 0; + } else { + R2_GLOBALS._player._shade = 6; + _actor1._shade = 6; + } + + if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { + _actor2.postInit(); + if (R2_GLOBALS.getFlag(34)) { + _actor2.setup(1851, 4, 2); + _actor2.fixPriority(114); + } else { + _actor2.setup(1851, 4, 1); + } + + _actor2.setPosition(Common::Point(179, 113)); + + if ((_actor5._strip == 1) && (_actor5._frame == 3)){ + _actor2.hide(); + } + + _actor2.setDetails(1850, 6, -1, -1, 1, (SceneItem *) NULL); + } + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(32)) { + R2_GLOBALS._player.setVisage(1511); + _actor1.setVisage(1508); + + _actor3.postInit(); + _actor3.setup(1853, 3, 1); + _actor3.setPosition(Common::Point(122, 113)); + _actor3.fixPriority(114); + _actor3._effect = 6; + + // Totally useless test + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor3.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); + } else { + // And the associated dead code + _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL); + } + + _actor4.postInit(); + _actor4.setup(1853, 3, 2); + _actor4.setPosition(Common::Point(139, 111)); + _actor4.fixPriority(114); + _actor4._effect = 6; + + // Still totally useless test + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor4.setDetails(1850, 29, -1, -1, 2, (SceneItem *) NULL); + } else { + // Another piece of dead code + _actor4.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); + } + + if (R2_GLOBALS.getFlag(31)) { + _actor3._shade = 0; + _actor4._shade = 0; + } else { + _actor3._shade = 6; + _actor4._shade = 6; + } + } else { + R2_GLOBALS._player.setVisage(1500); + _actor1.setVisage(1505); + } + } else { // Not Quinn + if (R2_GLOBALS.getFlag(32)) { + R2_GLOBALS._player.setVisage(1508); + _actor1.setVisage(1511); + + _actor3.postInit(); + _actor3.setup(1853, 3, 1); + _actor3.setPosition(Common::Point(122, 113)); + _actor3.fixPriority(114); + _actor3._effect = 6; + + // Totally useless test + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + // Dead code + _actor3.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); + } else { + _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL); + } + + _actor4.postInit(); + _actor4.setup(1853, 3, 2); + _actor4.setPosition(Common::Point(139, 111)); + _actor4.fixPriority(114); + _actor4._effect = 6; + + // Again, useless test + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + // and dead code + _actor4.setDetails(1850, 29, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor4.setDetails(1850, 28, -1, -1, 1, (SceneItem *) NULL); + } + + if (R2_GLOBALS.getFlag(31)) { + _actor3._shade = 0; + _actor4._shade = 0; + } else { + _actor3._shade = 6; + _actor4._shade = 6; + } + } else { + R2_GLOBALS._player.setVisage(1505); + _actor1.setVisage(1500); + } + } + + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.setStrip(3); + R2_GLOBALS._player.setPosition(Common::Point(80, 114)); + + _actor1.animate(ANIM_MODE_1, NULL); + _actor1.setObjectWrapper(new SceneObjectWrapper()); + _actor1.setStrip(3); + _actor1.setPosition(Common::Point(180, 96)); + + if (R2_GLOBALS.getFlag(30)) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor1.animate(ANIM_MODE_NONE, NULL); + _actor1.setObjectWrapper(NULL); + if (R2_GLOBALS.getFlag(32)) { + _actor1.setup(1854, 1, 3); + } else { + _actor1.setup(1854, 2, 3); + } + + _actor1.setPosition(Common::Point(164, 106)); + } else { + _actor1.animate(ANIM_MODE_NONE, NULL); + _actor1.setObjectWrapper(NULL); + if (R2_GLOBALS.getFlag(32)) { + R2_GLOBALS._player.setup(1854, 1, 3); + } else { + R2_GLOBALS._player.setup(1854, 2, 3); + } + + R2_GLOBALS._player.setPosition(Common::Point(164, 106)); + } + } + + R2_GLOBALS._player.enableControl(); + } else { // R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850 + R2_GLOBALS._player._effect = 1; + _actor1._effect = 1; + R2_GLOBALS._player.disableControl(); + _sceneMode = 10; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS.getFlag(29)) { + setAction(&_sequenceManager1, this, 1863, &R2_GLOBALS._player, &_actor1, &_actor7, NULL); + } else { + setAction(&_sequenceManager1, this, 1861, &R2_GLOBALS._player, &_actor1, &_actor6, NULL); + } + } else { + if (R2_GLOBALS.getFlag(29)) { + setAction(&_sequenceManager1, this, 1864, &R2_GLOBALS._player, &_actor1, &_actor7, NULL); + } else { + setAction(&_sequenceManager1, this, 1862, &R2_GLOBALS._player, &_actor1, &_actor6, NULL); + } + } + } + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._player._moveDiff = Common::Point(3, 2); + _actor1._moveDiff = Common::Point(5, 3); + } else { + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); + _actor1._moveDiff = Common::Point(3, 2); + } + + _actor8.postInit(); + _actor8.setup(1850, 1, 1); + + if (R2_GLOBALS.getFlag(62)) { + _actor8.setPosition(Common::Point(159, 120)); + } else { + _actor8.setPosition(Common::Point(159, 184)); + } + + _actor8.fixPriority(113); + + if (R2_GLOBALS.getFlag(34)) { + _actor8.setDetails(1850, 25, -1, -1, 4, &_actor5); + } else { + _actor8.setDetails(1850, 25, -1, -1, 2, (SceneItem *) NULL); + } + + if (!R2_GLOBALS.getFlag(62)) { + _actor8.hide(); + } + + _item1.setDetails(Rect(0, 0, 320, 200), 1850, 16, -1, -1, 1, NULL); + + R2_GLOBALS._player._oldCharacterScene[1] = 1850; + R2_GLOBALS._player._oldCharacterScene[2] = 1850; +} + +void Scene1850::remove() { + g_globals->_scenePalette.loadPalette(0); + + R2_GLOBALS._scenePalette._palette[771] = 255; + R2_GLOBALS._scenePalette._palette[772] = 255; + R2_GLOBALS._scenePalette._palette[773] = 255; + + SceneExt::remove(); +} + +void Scene1850::signal() { + switch (_sceneMode) { + case 10: + R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._shade = 6; + + _actor1._effect = 6; + _actor1._shade = 6; + + R2_GLOBALS._walkRegions.enableRegion(5); + + if (R2_GLOBALS.getFlag(68)) { + R2_GLOBALS._player.enableControl(); + } else { + R2_GLOBALS.setFlag(68); + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(554, this); + } + break; + case 11: + R2_GLOBALS.clearFlag(30); + R2_GLOBALS._sceneManager.changeScene(1800); + break; + case 15: + _sceneMode = 16; + break; + case 16: + _sceneMode = 1870; + setAction(&_sequenceManager1, this, 1870, &R2_GLOBALS._player, &_actor1, &_actor3, &_actor4, NULL); + break; + case 20: + R2_GLOBALS._player.enableControl(CURSOR_TALK); + break; + case 21: + R2_GLOBALS._player.disableControl(); + _sceneMode = 1877; + setAction(&_sequenceManager1, this, 1877, &R2_GLOBALS._player, &_actor1, &_actor5, NULL); + break; + case 30: + R2_GLOBALS._player.disableControl(); + _sceneMode = 1882; + setAction(&_sequenceManager1, this, 1882, &R2_GLOBALS._player, NULL); + break; + case 1852: + // No break on purpose: + case 1853: + if (_field412 == 1851) { + R2_GLOBALS.setFlag(31); + _palette1.loadPalette(1850); + _field412 = 1850; + } else { + R2_GLOBALS.clearFlag(31); + _palette1.loadPalette(1851); + _field412 = 1851; + } + + _field418 = 1; + if (R2_GLOBALS.getFlag(30)) { + _actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL); + } else if (R2_GLOBALS.getFlag(34)) { + if (R2_GLOBALS.getFlag(62)) { + R2_GLOBALS.clearFlag(62); + _actor8.setAction(&_sequenceManager2, this, 1851, &_actor8, NULL); + } else { + R2_GLOBALS.setFlag(62); + _actor8.setAction(&_sequenceManager2, this, 1850, &_actor8, NULL); + } + } else if (R2_GLOBALS.getFlag(33)) { + R2_GLOBALS.setFlag(62); + R2_GLOBALS.setFlag(34); + R2_GLOBALS._walkRegions.enableRegion(2); + + _actor2.postInit(); + _actor2.setDetails(1850, 6, -1, -1, 5, &_actor5); + + _sceneMode = 1879; + + _actor8.setAction(&_sequenceManager2, this, 1879, &_actor5, &_actor8, &_actor2, NULL); + } else { + _actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL); + } + + if (R2_GLOBALS.getFlag(34)) + R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, NULL); + else + R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, this); + + if (_field412 == 1851) + _field416 = -20; + else + _field416 = 20; + + _field414 = 20; + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (_sceneMode == 1879) + _sceneMode = 1854; + + if (R2_GLOBALS.getFlag(32)) { + setAction(&_sequenceManager1, NULL, 1873, &R2_GLOBALS._player, NULL); + } else { + setAction(&_sequenceManager1, NULL, 1854, &R2_GLOBALS._player, NULL); + } + } else { + if (_sceneMode == 1879) + _sceneMode = 1855; + + if (R2_GLOBALS.getFlag(32)) { + setAction(&_sequenceManager1, NULL, 1874, &R2_GLOBALS._player, NULL); + } else { + setAction(&_sequenceManager1, NULL, 1855, &R2_GLOBALS._player, NULL); + } + } + break; + case 1857: + if (R2_GLOBALS.getFlag(69)) { + R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player._canWalk = false; + } else { + _sceneMode = 1858; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(555, this); + R2_GLOBALS.setFlag(69); + } + break; + case 1858: + R2_GLOBALS._player.disableControl(); + _sceneMode = 1859; + setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_actor5, NULL); + R2_GLOBALS.clearFlag(30); + break; + case 1859: + R2_GLOBALS.setFlag(70); + _sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(575, this); + break; + case 1860: + if (_field41A.x != 0) { + R2_GLOBALS._player.enableControl(); + + PlayerMover *mover = new PlayerMover(); + R2_GLOBALS._player.addMover(mover, &_field41A, this); + + _field41A = Common::Point(0, 0); + } + + switch (_field41E) { + case 1: + _sceneMode = 1853; + if (R2_GLOBALS.getFlag(32)) { + setAction(&_sequenceManager1, this, 1872, &R2_GLOBALS._player, NULL); + } else { + setAction(&_sequenceManager1, this, 1853, &R2_GLOBALS._player, NULL); + } + break; + case 2: + _sceneMode = 11; + setAction(&_sequenceManager1, this, 1865, &R2_GLOBALS._player, &_actor6, NULL); + break; + case 3: + warning("_field41E == 3"); + _sceneMode = 11; + setAction(&_sequenceManager1, this, 1866, &R2_GLOBALS._player, &_actor7, NULL); + break; + default: + break; + } + + _field41E = 0; + break; + case 1870: + R2_GLOBALS._walkRegions.enableRegion(5); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1); + R2_GLOBALS.setFlag(32); + R2_GLOBALS._player.enableControl(CURSOR_ARROW); + break; + case 1875: + R2_INVENTORY.setObjectScene(R2_AIRBAG, 1850); + _sceneMode = 21; + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + _stripManager.start(561, this); + break; + case 1877: + _actor3.postInit(); + _actor3._effect = 6; + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor3.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); + } else { + _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *)NULL); + } + + _actor4.postInit(); + _actor4._effect = 6; + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor4.setDetails(1850, 29, -1, -1, 2, (SceneItem *)NULL); + } else { + _actor4.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); + } + + if (R2_GLOBALS.getFlag(31)) { + _actor3._shade = 0; + _actor4._shade = 0; + } else { + _actor3._shade = 6; + _actor4._shade = 6; + } + + R2_GLOBALS.clearFlag(30); + _sceneMode = 15; + setAction(&_sequenceManager1, this, 1869, &R2_GLOBALS._player, &_actor3, NULL); + setAction(&_sequenceManager2, this, 1868, &_actor1, &_actor4, NULL); + break; + case 1878: + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1850); + R2_GLOBALS.setFlag(33); + R2_GLOBALS._walkRegions.enableRegion(2); + R2_GLOBALS._player.enableControl(); + break; + case 1879: + R2_GLOBALS._player.enableControl(); + break; + case 1881: + R2_GLOBALS._sceneManager.changeScene(1875); + break; + case 1882: + R2_INVENTORY.setObjectScene(R2_AIRBAG, 1); + R2_GLOBALS._player.enableControl(); + break; + default: + R2_GLOBALS._player.enableControl(); + break; + } +} + +void Scene1850::process(Event &event) { + if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_ARROW) + && (R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { + _field41A = event.mousePos; + R2_GLOBALS._player.disableControl(); + _sceneMode = 1860; + if (R2_GLOBALS.getFlag(32)) { + setAction(&_sequenceManager1, this, 1860, &R2_GLOBALS._player, &_actor5, NULL); + } else { + setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_actor5, NULL); + } + R2_GLOBALS.clearFlag(32); + event.handled = true; + } + + Scene::process(event); +} + +void Scene1850::dispatch() { + if (_field418 != 0) { + _field414--; + if (_field414 == 0) + _field418 = 0; + + if (_field416 >= 0) { + R2_GLOBALS._player._shade = (_field414 * 6) / _field416; + } else { + R2_GLOBALS._player._shade = ((_field414 * 6) / _field416) + 6; + } + R2_GLOBALS._player._flags |= OBJFLAG_PANES; + + _actor1._shade = R2_GLOBALS._player._shade; + _actor1._flags |= OBJFLAG_PANES; + + _actor3._shade = R2_GLOBALS._player._shade; + _actor3._flags |= OBJFLAG_PANES; + + _actor4._shade = R2_GLOBALS._player._shade; + _actor4._flags |= OBJFLAG_PANES; + } + + if (R2_GLOBALS.getFlag(32)) { + _actor3.setPosition(Common::Point(_actor8._position.x - 37, _actor8._position.y - 71)); + _actor4.setPosition(Common::Point(_actor8._position.x - 20, _actor8._position.y - 73)); + } + + if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { + _actor2.setPosition(Common::Point(_actor8._position.x + 20, _actor8._position.y - 71)); + } + + Scene::dispatch(); +} + /*-------------------------------------------------------------------------- * Scene 1875 - * diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index a5c7ee5f5c..5906030c5f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -879,6 +879,58 @@ public: virtual void saveCharacter(int characterIndex); }; +class Scene1850 : public SceneExt { + class Hotspot2 : public NamedHotspot { + public: + virtual bool startAction(CursorType action, Event &event); + }; + + class Actor5 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor6 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + class Actor8 : public SceneActor { + public: + virtual bool startAction(CursorType action, Event &event); + }; + +public: + int _field412; + int _field414; + int _field416; + int _field418; + Common::Point _field41A; + int _field41E; + ScenePalette _palette1; + SpeakerQuinn _quinnSpeaker; + SpeakerSeeker _seekerSpeaker; + NamedHotspot _item1; + Hotspot2 _item2; + SceneActor _actor1; + SceneActor _actor2; + SceneActor _actor3; + SceneActor _actor4; + Actor5 _actor5; + Actor6 _actor6; + Actor6 _actor7; + Actor8 _actor8; + SequenceManager _sequenceManager1; + SequenceManager _sequenceManager2; + + Scene1850(); + void synchronize(Serializer &s); + + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void remove(); + virtual void signal(); + virtual void process(Event &event); + virtual void dispatch(); +}; + class Scene1875 : public SceneExt { class Actor1875 : public SceneActor { public: -- cgit v1.2.3 From 856aa5119b899d798af212f946224ab4886775fe Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 16 Feb 2012 18:32:04 +0100 Subject: TSAGE: R2R - Fix various warnings Thanks Digitall for reporting those --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index a52030677f..23a9eb2590 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -3846,7 +3846,7 @@ void Scene1337::process(Event &event) { if (event.btnState != BTNSHIFT_RIGHT) { subD183F(R2_GLOBALS._v5780E, 1); event.handled = true; - } else if (_unkFctPtr412 != NULL) { + } else if (_unkFctPtr412) { FunctionPtrType tmpFctPtr = _unkFctPtr412; _unkFctPtr412 = NULL; (this->*tmpFctPtr)(); @@ -3854,7 +3854,7 @@ void Scene1337::process(Event &event) { } } else if (event.eventType == EVENT_KEYPRESS) { if (event.kbd.keycode == Common::KEYCODE_SPACE) { - if (_unkFctPtr412 != NULL) { + if (_unkFctPtr412) { FunctionPtrType tmpFctPtr = _unkFctPtr412; _unkFctPtr412 = NULL; (this->*tmpFctPtr)(); @@ -4436,8 +4436,11 @@ void Scene1337::subC2C2F() { for (int i = 0; i <= 3; i++) { if (tmpRandIndx != 3) { + // The variables 'i' and 'j' are not used in the inner code of the loop. + // It's understandable for 'i', which helps making sure that tmpVal is used properly, + // but it's suspect for j for (int j = 0; j <= 7; j++) { - if ((_arrunkObj1337[j]._arr3[0]._field34 == 0) && (subC32B1(j, _arrunkObj1337[3]._arr1[randIndx]._field34))) { + if ((_arrunkObj1337[tmpRandIndx]._arr3[0]._field34 == 0) && (subC32B1(tmpRandIndx, _arrunkObj1337[3]._arr1[randIndx]._field34))) { tmpVal = j; } } @@ -5668,9 +5671,10 @@ void Scene1337::subCF979() { for (int i = 0; i <= 3; i++) { if (subC27F9(_arrunkObj1337[0]._arr1[i]._field34) != -1) { + // The variable 'j' is not used in the inner code of the loop. It's suspect for (int j = 0; j <= 7; j++) { - if ((_arrunkObj1337[2]._arr3[0]._field34 == 0) && (subC32B1(2, _arrunkObj1337[0]._arr1[j]._field34))) { - subC3456(&_arrunkObj1337[0]._arr1[j], &_arrunkObj1337[2]._arr3[0]); + if ((_arrunkObj1337[2]._arr3[0]._field34 == 0) && (subC32B1(2, _arrunkObj1337[0]._arr1[i]._field34))) { + subC3456(&_arrunkObj1337[0]._arr1[i], &_arrunkObj1337[2]._arr3[0]); found = true; } } -- cgit v1.2.3 From 7a54ba86a083bdfd414a85e4edd5d0baeb91c779 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 20 Feb 2012 22:31:58 +1100 Subject: TSAGE: Starting to implement animation player needed for R2R Title Screen --- engines/tsage/ringworld2/ringworld2_logic.cpp | 118 +++++++++++++++++++++--- engines/tsage/ringworld2/ringworld2_logic.h | 40 ++++++-- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 92 +++++++++--------- engines/tsage/ringworld2/ringworld2_scenes0.h | 4 +- 4 files changed, 187 insertions(+), 67 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 33ccfa1898..89cf831088 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1551,36 +1551,130 @@ void Scene1200::sub9DAD6(int indx) { /*--------------------------------------------------------------------------*/ -ActionObject::ActionObject(): EventHandler() { +AnimationPlayer::AnimationPlayer(): EventHandler() { + _endAction = NULL; + + _fieldA = NULL; + _field16 = NULL; + + _screenBounds = R2_GLOBALS._gfxManagerInstance._bounds; + _rect1 = R2_GLOBALS._gfxManagerInstance._bounds; + _field3C = 0; + _field3A = 1; + _field5A = 0; + _field58 = 0; _endAction = NULL; } -void ActionObject::synchronize(Serializer &s) { - EventHandler::synchronize(s); +AnimationPlayer::~AnimationPlayer() { + if (!method3()) + method4(); +} - SYNC_POINTER(_endAction); +void AnimationPlayer::synchronize(Serializer &s) { + EventHandler::synchronize(s); + warning("TODO AnimationPlayer::load"); } -void ActionObject::remove() { +void AnimationPlayer::remove() { if (_endAction) _endAction->signal(); _endAction = NULL; } -bool ActionObject::load(int rlbNum, Action *endAction) { - warning("TODO ActionOjbect::load"); - return true; +void AnimationPlayer::process(Event &event) { + if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) && + (_field3A)) { + _field90C = _field576; + } } -/*--------------------------------------------------------------------------*/ +void AnimationPlayer::dispatch() { + uint32 gameFrame = R2_GLOBALS._events.getFrameNumber(); + uint32 gameDiff = (gameFrame > _gameFrame) ? gameFrame - _gameFrame : _gameFrame - gameFrame; + + if (gameDiff >= _field910) { + drawFrame(_field904 % _field57C); + ++_field904; + _field90C = _field904 / _field57C; -void ActionObjectExt::synchronize(Serializer &s) { - ActionObject::synchronize(s); - s.syncAsSint16LE(_v1); + if (_field90C == _field90E) + method2(); + + _field908 = _field904; + _gameFrame = gameFrame; + } } +bool AnimationPlayer::load(int rlbNum, Action *endAction) { + ResourceEntry resEntry; + if (!g_resourceManager->first().getSectionEntry(_resourceFile, RES_IMAGE, rlbNum, 0, resEntry)) { + warning("Couldn't find resource index"); + // TODO: Complete animation loading + } + + _resourceFile.close(); + return false; +} + +void AnimationPlayer::drawFrame(int frameIndex) { + uint32 v = READ_LE_UINT32(_dataP); +warning("v = %d", v); +//TODO + // End check + if (_field56 == 42) { + _screenBounds.expandPanes(); + + R2_GLOBALS._sceneObjects->draw(); + } else { + if (R2_GLOBALS._sceneManager._hasPalette) { + R2_GLOBALS._sceneManager._hasPalette = false; + R2_GLOBALS._scenePalette.refresh(); + } + } +} + +void AnimationPlayer::method2() { + +} + +bool AnimationPlayer::method3() { + return (_field90C >= _field576); +} + +void AnimationPlayer::method4() { + if (_field38) { + switch (_field3C) { + case 0: + R2_GLOBALS._scenePalette.replace(&_palette); + changePane(); + R2_GLOBALS._sceneManager._hasPalette = true; + break; + case 2: + proc14(); + break; + default: + changePane(); + break; + } + } + +// TODO +} + +/*--------------------------------------------------------------------------*/ + +AnimationPlayerExt::AnimationPlayerExt(): AnimationPlayer() { + _v = 0; + _field3A = 0; +} + +void AnimationPlayerExt::synchronize(Serializer &s) { + AnimationPlayer::synchronize(s); + s.syncAsSint16LE(_v); +} } // End of namespace Ringworld2 diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 925a3d6522..98fcaae981 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -325,29 +325,55 @@ public: virtual Common::String getClassName() { return "UnkObject1200"; } }; -class ActionObject: public EventHandler { +class AnimationPlayer: public EventHandler { public: - EventHandler *_endAction; + Common::File _resourceFile; + void *_fieldA; + void *_field16; + + byte *_dataP; Rect _rect1, _screenBounds; + int _field38; int _field3A, _field3C; int _field56; int _field58, _field5A; ScenePalette _palette; byte _palData[256 * 3]; + Action *_endAction; + int _field576; + int _field57C; + int _palStart, _palSize; + int _field904; + int _field908; + int _field90C; + int _field90E; + uint _field910; + uint32 _gameFrame; public: - ActionObject(); + AnimationPlayer(); + ~AnimationPlayer(); virtual void synchronize(Serializer &s); virtual void remove(); + virtual void process(Event &event); + virtual void dispatch(); + virtual void flipPane() {} + virtual void changePane() {} + virtual void proc14() {} bool load(int rlbNum, Action *endAction = NULL); - bool proc1() { return false; } - void proc2() {} + void drawFrame(int frameIndex); + void method2(); + bool method3(); + void method4(); + void method5() {} }; -class ActionObjectExt: public ActionObject { +class AnimationPlayerExt: public AnimationPlayer { +public: + int _v; public: - int _v1; + AnimationPlayerExt(); virtual void synchronize(Serializer &s); }; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index c2b00b675e..dab9afb269 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1499,25 +1499,25 @@ Scene180::Scene180(): SceneExt(), _webbsterSpeaker(27) { GfxFont font; font.setFontNumber(7); - _fontHeight = font.getHeight(); + _fontHeight = font.getHeight() + 1; _sceneMode = (R2_GLOBALS._sceneManager._previousScene == 205) ? 10 : 0; _gameTextSpeaker._displayMode = 9; - _stripManager.addSpeaker(&_gameTextSpeaker); - _stripManager.addSpeaker(&_webbsterSpeaker); - _stripManager.addSpeaker(&_tealSpeaker); - _stripManager.addSpeaker(&_dutyOfficerSpeaker); - - signal(); } void Scene180::postInit(SceneObjectList *OwnerList) { - SceneExt::postInit(); loadScene(9999); + SceneExt::postInit(); - R2_GLOBALS._player._uiEnabled = false; + R2_GLOBALS._uiElements._active = true; R2_GLOBALS._player.disableControl(); + _stripManager.addSpeaker(&_gameTextSpeaker); + _stripManager.addSpeaker(&_webbsterSpeaker); + _stripManager.addSpeaker(&_tealSpeaker); + _stripManager.addSpeaker(&_dutyOfficerSpeaker); + + signal(); } void Scene180::remove() { @@ -1547,7 +1547,7 @@ void Scene180::synchronize(Serializer &s) { void Scene180::signal() { R2_GLOBALS._playStream.stop(); - switch (_sceneMode) { + switch (_sceneMode++) { case 0: setFrameInc(6); break; @@ -1555,13 +1555,13 @@ void Scene180::signal() { case 1: _field412 = 1; R2_GLOBALS._sceneManager._hasPalette = true; - _actionObject._field3C = 2; - _actionObject._v1 = 1; - _actionObject._field56 = 1; + _animationPlayer._field3C = 2; + _animationPlayer._v = 1; + _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 1; - _actionObject.load(1, NULL); - R2_GLOBALS._scenePalette.loadPalette(_actionObject._palData, 0, 256); + _animationPlayer.load(1, NULL); + R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._palData, 0, 256); R2_GLOBALS._sound1.play(1); break; @@ -1598,14 +1598,14 @@ void Scene180::signal() { break; case 5: - _actionObject._field3C = 2; - _actionObject._v1 = 1; - _actionObject._field56 = 1; + _animationPlayer._field3C = 2; + _animationPlayer._v = 1; + _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 2; - _actionObject.load(2); + _animationPlayer.load(2); _field412 = 1; - R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 6, NULL); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL); R2_GLOBALS._sound1.play(2); break; @@ -1701,11 +1701,11 @@ void Scene180::signal() { case 29: _field412 = 1; - _actionObject._field3C = 0; - _actionObject._v1 = 1; - _actionObject._field56 = 42; + _animationPlayer._field3C = 0; + _animationPlayer._v = 1; + _animationPlayer._field56 = 42; R2_GLOBALS._scene180Mode = 3; - _actionObject.load(3); + _animationPlayer.load(3); break; case 31: @@ -1801,12 +1801,12 @@ void Scene180::signal() { break; case 40: - _actionObject._field3C = 2; - _actionObject._field56 = 1; + _animationPlayer._field3C = 2; + _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 4; - if (_actionObject.load(4)) { - _actionObject.dispatch(); - R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 8, this); + if (_animationPlayer.load(4)) { + _animationPlayer.dispatch(); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 8, this); } else { _sceneMode = 43; setFrameInc(1); @@ -1815,7 +1815,7 @@ void Scene180::signal() { case 41: _field412 = 1; - _actionObject._v1 = 1; + _animationPlayer._v = 1; break; case 42: @@ -1834,19 +1834,19 @@ void Scene180::signal() { break; case 45: - R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 28, this); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 28, this); break; case 48: _field412 = 1; - _actionObject._field3C = 2; - _actionObject._v1 = 1; - _actionObject._field56 = 1; + _animationPlayer._field3C = 2; + _animationPlayer._v = 1; + _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 15; - _actionObject.load(15, NULL); + _animationPlayer.load(15, NULL); R2_GLOBALS._sound1.play(9); - R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 6, NULL); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL); break; case 49: @@ -1884,11 +1884,11 @@ void Scene180::process(Event &event) { void Scene180::dispatch() { if (_frameInc) { - uint32 frameNumber = R2_GLOBALS._events.getFrameNumber(); + uint32 gameFrame = R2_GLOBALS._events.getFrameNumber(); - if (frameNumber >= (uint32)_frameNumber) { - _frameInc = frameNumber - _frameNumber; - _frameNumber = frameNumber; + if (gameFrame >= (uint32)_frameNumber) { + _frameInc -= gameFrame - _frameNumber; + _frameNumber = gameFrame; if (_frameInc <= 0) { _frameInc = 0; @@ -1897,15 +1897,15 @@ void Scene180::dispatch() { } } - if (_actionObject._v1) { - if (_actionObject.proc1()) { - _actionObject._v1 = 0; - _actionObject.proc2(); - _actionObject.remove(); + if (_animationPlayer._v) { + if (_animationPlayer.method3()) { + _animationPlayer._v = 0; + _animationPlayer.method4(); + _animationPlayer.remove(); signal(); } else { - _actionObject.dispatch(); + _animationPlayer.dispatch(); } } diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index f3c8b0bccf..d757080156 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -204,7 +204,7 @@ public: SceneActor _object1, _object2, _object3, _object4, _object5; ScenePalette _palette; SceneText _textList[20]; - ActionObjectExt _actionObject; + AnimationPlayerExt _animationPlayer; SequenceManager _sequenceManager; Action1 _action1; ASoundExt _sound1; @@ -287,7 +287,7 @@ private: int xMultiply, int yMultiply, int xCenter, int yCenter); void handleText(); public: - ActionObject _actionObject; + AnimationPlayer _animationPlayer; int _fontHeight; SceneText _textList[15]; Object *_objList1[3]; -- cgit v1.2.3 From eba87458d399382e639d81e91d6acb3ce13f2252 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 24 Feb 2012 19:38:46 +1100 Subject: TSAGE: More properly implemented resource streaming for R2R animation player --- engines/tsage/ringworld2/ringworld2_logic.cpp | 87 ++++++++++++++++++++++--- engines/tsage/ringworld2/ringworld2_logic.h | 32 ++++++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 10 +-- 3 files changed, 105 insertions(+), 24 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 89cf831088..d5cbde81be 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1551,6 +1551,27 @@ void Scene1200::sub9DAD6(int indx) { /*--------------------------------------------------------------------------*/ +void AnimationPlayerSubData::load(Common::File &f) { + f.skip(6); + _field6 = f.readUint16LE(); + f.skip(2); + _fieldA = f.readUint16LE(); + _fieldC = f.readUint16LE(); + f.skip(4); + _field12 = f.readUint16LE(); + _field14 = f.readUint16LE(); + _field16 = f.readUint16LE(); + f.skip(4); + _palStart = f.readUint16LE(); + _palSize = f.readUint16LE(); + f.read(_palData, 768); + _field320 = f.readSint32LE(); + f.skip(12); + f.read(_field330, 96); +} + +/*--------------------------------------------------------------------------*/ + AnimationPlayer::AnimationPlayer(): EventHandler() { _endAction = NULL; @@ -1586,7 +1607,7 @@ void AnimationPlayer::remove() { void AnimationPlayer::process(Event &event) { if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) && (_field3A)) { - _field90C = _field576; + _field90C = _subData._field6; } } @@ -1595,9 +1616,9 @@ void AnimationPlayer::dispatch() { uint32 gameDiff = (gameFrame > _gameFrame) ? gameFrame - _gameFrame : _gameFrame - gameFrame; if (gameDiff >= _field910) { - drawFrame(_field904 % _field57C); + drawFrame(_field904 % _subData._fieldC); ++_field904; - _field90C = _field904 / _field57C; + _field90C = _field904 / _subData._fieldC; if (_field90C == _field90E) method2(); @@ -1607,18 +1628,63 @@ void AnimationPlayer::dispatch() { } } -bool AnimationPlayer::load(int rlbNum, Action *endAction) { - ResourceEntry resEntry; - if (!g_resourceManager->first().getSectionEntry(_resourceFile, RES_IMAGE, rlbNum, 0, resEntry)) { - warning("Couldn't find resource index"); - // TODO: Complete animation loading +bool AnimationPlayer::load(int animId, Action *endAction) { + // Open up the main resource file for access + TLib &libFile = g_resourceManager->first(); + if (!_resourceFile.open(libFile.getFilename())) + error("Could not open resource"); + + // Get the offset of the given resource and seek to it in the player's file reference + ResourceEntry entry; + uint32 fileOffset = libFile.getResourceStart(RES_IMAGE, animId, 0, entry); + _resourceFile.seek(fileOffset); + + // At this point, the file is pointing to the start of the resource data + + // Set the end action + _endAction = endAction; + + // Load the sub data block + _subData.load(_resourceFile); + + // Set other properties + _field908 = -1; + _field904 = 0; + _field910 = 60 / _subData._fieldA; + _gameFrame = R2_GLOBALS._events.getFrameNumber() - _field910; + + if (_subData._field320) { + _field900 = _subData._field320; + } else { + int v = (_subData._field12 + 2) * _subData._field14 * _subData._fieldC; + _field900 = (_subData._field16 / _subData._fieldC) + v + 96; } + + _animData = _fieldA = new byte[_field900]; + + if (_subData._fieldC <= 1) { + _subData._field16 = NULL; + _animPtr = _animData; + } else { + _field16 = new byte[_field900]; + _animPtr = _field16; + } + + _field90C = 0; + _field90E = 1; + + // TODO: Stuff + + if (_field3C) { + + } + - _resourceFile.close(); return false; } void AnimationPlayer::drawFrame(int frameIndex) { +/* uint32 v = READ_LE_UINT32(_dataP); warning("v = %d", v); //TODO @@ -1634,6 +1700,7 @@ warning("v = %d", v); R2_GLOBALS._scenePalette.refresh(); } } +*/ } void AnimationPlayer::method2() { @@ -1641,7 +1708,7 @@ void AnimationPlayer::method2() { } bool AnimationPlayer::method3() { - return (_field90C >= _field576); + return (_field90C >= _subData._field6); } void AnimationPlayer::method4() { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 98fcaae981..651cfec763 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -325,24 +325,38 @@ public: virtual Common::String getClassName() { return "UnkObject1200"; } }; +class AnimationPlayerSubData { +public: + int _field6; + int _fieldA; + int _fieldC; + int _field12; + int _field14; + int _field16; + int _palStart; + int _palSize; + byte _palData[256 * 3]; + int32 _field320; + byte _field330[96]; +public: + void load(Common::File &f); +}; + class AnimationPlayer: public EventHandler { public: + byte *_fieldA; + byte *_field16; + byte *_animData, *_animPtr; Common::File _resourceFile; - void *_fieldA; - void *_field16; - - byte *_dataP; Rect _rect1, _screenBounds; int _field38; int _field3A, _field3C; int _field56; int _field58, _field5A; ScenePalette _palette; - byte _palData[256 * 3]; + AnimationPlayerSubData _subData; Action *_endAction; - int _field576; - int _field57C; - int _palStart, _palSize; + int _field900; int _field904; int _field908; int _field90C; @@ -361,7 +375,7 @@ public: virtual void changePane() {} virtual void proc14() {} - bool load(int rlbNum, Action *endAction = NULL); + bool load(int animId, Action *endAction = NULL); void drawFrame(int frameIndex); void method2(); bool method3(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index dab9afb269..9af4c7b534 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1561,7 +1561,7 @@ void Scene180::signal() { R2_GLOBALS._scene180Mode = 1; _animationPlayer.load(1, NULL); - R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._palData, 0, 256); + R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._subData._palData, 0, 256); R2_GLOBALS._sound1.play(1); break; @@ -1605,7 +1605,7 @@ void Scene180::signal() { _animationPlayer.load(2); _field412 = 1; - R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 6, NULL); R2_GLOBALS._sound1.play(2); break; @@ -1806,7 +1806,7 @@ void Scene180::signal() { R2_GLOBALS._scene180Mode = 4; if (_animationPlayer.load(4)) { _animationPlayer.dispatch(); - R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 8, this); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 8, this); } else { _sceneMode = 43; setFrameInc(1); @@ -1834,7 +1834,7 @@ void Scene180::signal() { break; case 45: - R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 28, this); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 28, this); break; case 48: @@ -1846,7 +1846,7 @@ void Scene180::signal() { _animationPlayer.load(15, NULL); R2_GLOBALS._sound1.play(9); - R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL); + R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 6, NULL); break; case 49: -- cgit v1.2.3 From 3a3c1eec5374a7d85a18ee55cab0891cd250529b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 25 Feb 2012 10:21:40 +0100 Subject: TSAGE: R2R - Fix bug #3492133, error in palette index used --- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 23a9eb2590..e849e7137a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -11432,9 +11432,9 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { void Scene1850::remove() { g_globals->_scenePalette.loadPalette(0); - R2_GLOBALS._scenePalette._palette[771] = 255; - R2_GLOBALS._scenePalette._palette[772] = 255; - R2_GLOBALS._scenePalette._palette[773] = 255; + R2_GLOBALS._scenePalette._palette[765] = 255; + R2_GLOBALS._scenePalette._palette[766] = 255; + R2_GLOBALS._scenePalette._palette[767] = 255; SceneExt::remove(); } -- cgit v1.2.3 From 9279b25694f16a6166c7eaf677682caeeaed5d7e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 25 Feb 2012 12:44:37 +0100 Subject: TSAGE: JANITORIAL: Remove trailing spaces --- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 62 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 202 +++--- engines/tsage/ringworld2/ringworld2_scenes0.h | 14 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 870 +++++++++++------------ engines/tsage/ringworld2/ringworld2_scenes1.h | 20 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 48 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 230 +++--- engines/tsage/ringworld2/ringworld2_scenes3.h | 12 +- engines/tsage/ringworld2/ringworld2_speakers.cpp | 150 ++-- 10 files changed, 805 insertions(+), 805 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 5178fe6418..30ae6be7b1 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -389,7 +389,7 @@ HelpDialog::HelpDialog() { _msgTitle._bounds.moveTo(5, 0); _msgVersion.set(GAME_VERSION, 172, ALIGN_CENTER); _msgVersion._bounds.moveTo(5, _msgTitle._bounds.bottom + 3); - addElements(&_msgTitle, &_msgVersion, NULL); + addElements(&_msgTitle, &_msgVersion, NULL); // Set buttons _btnList[0].setText(F2); diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index d5cbde81be..b420a375a3 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -40,16 +40,16 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { switch (sceneNumber) { /* Scene group #0 */ - case 50: + case 50: // Waking up cutscene return new Scene50(); - case 100: + case 100: // Quinn's room return new Scene100(); - case 125: + case 125: // Computer console return new Scene125(); - case 150: + case 150: // Empty Bedroom #1 return new Scene150(); case 160: @@ -166,7 +166,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Ice Maze: Large empty room return new Scene2400(); case 2425: - // Ice Maze: + // Ice Maze: return new Scene2425(); case 2430: // Ice Maze: Bedroom @@ -326,7 +326,7 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { int prevScene = R2_GLOBALS._sceneManager._previousScene; int sceneNumber = R2_GLOBALS._sceneManager._sceneNumber; - if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) + if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) || (sceneNumber == 50) || ((prevScene == 205) && (sceneNumber == 100)) || ((prevScene == 180) && (sceneNumber == 100))) { @@ -549,7 +549,7 @@ void SceneExt::scalePalette(int RFactor, int GFactor, int BFactor) { tmp += abs(tmpPal[(3 * j) + 2] - newB); if (tmp >= varC) continue; - + varC = tmp; varD = j; } @@ -628,11 +628,11 @@ void SceneHandlerExt::setupPaletteMaps() { diffSum += ABS(palP[pIndex2 * 3 + 1] - g); if (diffSum >= threshold) continue; - + diffSum += ABS(palP[pIndex2 * 3 + 2] - b); if (diffSum >= threshold) continue; - + threshold = diffSum; foundIndex = pIndex2; } @@ -1257,12 +1257,12 @@ void SceneAreaObject::setDetails(int visage, int strip, int frameNumber, const C _cursorNum = CURSOR_INVALID; Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; scene->_sceneAreas.push_front(this); - + _insetCount = ++R2_GLOBALS._insetUp; } void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { - ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum, + ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *)NULL); } @@ -1306,7 +1306,7 @@ void UnkObject1200::sub51AE9(int arg1) { int UnkObject1200::sub51AF8(Common::Point pt) { if (!_rect1.contains(pt)) return -1; - + int tmp1 = (pt.x - _rect1.left + _field2E) / _field2A; int tmp2 = (pt.y - _rect1.top + _field30) / _field2C; @@ -1358,7 +1358,7 @@ void UnkObject1200::sub9EDE8(Rect rect) { int UnkObject1200::sub9EE22(int &arg1, int &arg2) { arg1 /= _field2A; arg2 /= _field2C; - + if ((arg1 >= 0) && (arg2 >= 0) && (_field26 > arg1) && (_field28 > arg2)) { return _field16[(((_field26 * arg2) + arg1) * 2)]; } @@ -1368,13 +1368,13 @@ int UnkObject1200::sub9EE22(int &arg1, int &arg2) { void Scene1200::sub9DAD6(int indx) { _object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4); - + switch (indx) { case 0: - if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) - || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) - || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) + if ( ((_object1.sub51AF8(Common::Point(200, 50)) > 36) || (_object1.sub51AF8(Common::Point(200, 88)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 3) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) + || ((R2_GLOBALS._v56AA2 == 13) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) + || ((R2_GLOBALS._v56AA2 == 29) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 41)) ) ) { R2_GLOBALS._player.disableControl(); @@ -1415,10 +1415,10 @@ void Scene1200::sub9DAD6(int indx) { } break; case 1: - if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) - || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) - || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) + if ( ((_object1.sub51AF8(Common::Point(120, 50)) > 36) || (_object1.sub51AF8(Common::Point(120, 88)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 7) && (R2_GLOBALS._v56AA4 == 33) && (_field418 != 4)) + || ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 21) && (_field418 != 2)) + || ((R2_GLOBALS._v56AA2 == 33) && (R2_GLOBALS._v56AA4 == 17) && (_field418 != 1)) || ((R2_GLOBALS._v56AA2 == 5) && (R2_GLOBALS._v56AA4 == 5)) ) ) { R2_GLOBALS._player.disableControl(); @@ -1459,8 +1459,8 @@ void Scene1200::sub9DAD6(int indx) { } break; case 2: - if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3)) + if ( ((_object1.sub51AF8(Common::Point(140, 110)) > 36) || (_object1.sub51AF8(Common::Point(178, 110)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 5) && (_field418 != 3)) || ((R2_GLOBALS._v56AA2 == 41) && (R2_GLOBALS._v56AA4 == 21)) ) ) { R2_GLOBALS._player.disableControl(); @@ -1501,8 +1501,8 @@ void Scene1200::sub9DAD6(int indx) { } break; case 3: - if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36)) - && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3)) + if ( ((_object1.sub51AF8(Common::Point(140, 30)) > 36) || (_object1.sub51AF8(Common::Point(178, 30)) > 36)) + && ( ((R2_GLOBALS._v56AA2 == 17) && (R2_GLOBALS._v56AA4 == 9) && (_field418 != 3)) || ((R2_GLOBALS._v56AA2 == 35) && (R2_GLOBALS._v56AA4 == 17)) ) ) { R2_GLOBALS._player.disableControl(); @@ -1574,10 +1574,10 @@ void AnimationPlayerSubData::load(Common::File &f) { AnimationPlayer::AnimationPlayer(): EventHandler() { _endAction = NULL; - + _fieldA = NULL; _field16 = NULL; - + _screenBounds = R2_GLOBALS._gfxManagerInstance._bounds; _rect1 = R2_GLOBALS._gfxManagerInstance._bounds; _field3C = 0; @@ -1608,7 +1608,7 @@ void AnimationPlayer::process(Event &event) { if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) && (_field3A)) { _field90C = _subData._field6; - } + } } void AnimationPlayer::dispatch() { @@ -1643,7 +1643,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { // Set the end action _endAction = endAction; - + // Load the sub data block _subData.load(_resourceFile); @@ -1659,7 +1659,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { int v = (_subData._field12 + 2) * _subData._field14 * _subData._fieldC; _field900 = (_subData._field16 / _subData._fieldC) + v + 96; } - + _animData = _fieldA = new byte[_field900]; if (_subData._fieldC <= 1) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 9af4c7b534..3c9956282a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -125,17 +125,17 @@ bool Scene100::Table::startAction(CursorType action, Event &event) { scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, (SceneItem *)NULL); } - scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3, + scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3, &scene->_stasisNegator, &R2_GLOBALS._player, NULL); } else { scene->_sceneMode = 109; - scene->setAction(&scene->_sequenceManager2, scene, 109, this, &scene->_object3, + scene->setAction(&scene->_sequenceManager2, scene, 109, this, &scene->_object3, &scene->_stasisNegator, &R2_GLOBALS._player, NULL); } return true; case CURSOR_TALK: R2_GLOBALS._player.disableControl(); - + if (_strip == 2) { SceneItem::display2(100, 18); scene->_sceneMode = 102; @@ -149,12 +149,12 @@ bool Scene100::Table::startAction(CursorType action, Event &event) { scene->_stasisNegator.setDetails(100, 21, 22, 23, 2, (SceneItem *)NULL); } - scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3, + scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3, &scene->_stasisNegator, NULL); } else { SceneItem::display2(100, 19); scene->_sceneMode = 103; - scene->setAction(&scene->_sequenceManager2, scene, 103, this, &scene->_object3, + scene->setAction(&scene->_sequenceManager2, scene, 103, this, &scene->_object3, &scene->_stasisNegator, NULL); } return true; @@ -264,7 +264,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { _bedLights2.setup(100, 3, 1); _bedLights2.setPosition(Common::Point(89, 147)); _bedLights2.fixPriority(250); - _bedLights2.animate(ANIM_MODE_7, 0, NULL); + _bedLights2.animate(ANIM_MODE_7, 0, NULL); _bedLights2._numFrames = 3; _wardrobe.postInit(); @@ -289,7 +289,7 @@ void Scene100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setVisage(10); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); - + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 100, 0, 1, -1, 1, NULL); switch (R2_GLOBALS._sceneManager._previousScene) { @@ -330,7 +330,7 @@ void Scene100::signal() { case 109: _table.setStrip(2); _table.setFrame(3); - + _object3.remove(); _stasisNegator.remove(); R2_GLOBALS._player.enableControl(); @@ -413,7 +413,7 @@ Scene125::Icon::Icon(): SceneActor() { void Scene125::Icon::postInit(SceneObjectList *OwnerList) { SceneObject::postInit(); - + _object1.postInit(); _object1.fixPriority(255); _object1.hide(); @@ -621,7 +621,7 @@ void Scene125::postInit(SceneObjectList *OwnerList) { loadScene(160); _palette.loadPalette(0); - if (R2_GLOBALS._sceneManager._previousScene != 125) + if (R2_GLOBALS._sceneManager._previousScene != 125) // Save the prior scene to return to when the console is turned off R2_GLOBALS._player._oldCharacterScene[1] = R2_GLOBALS._sceneManager._previousScene; @@ -638,7 +638,7 @@ void Scene125::postInit(SceneObjectList *OwnerList) { _object6.postInit(); _object6.setup(162, 1, 1); _object6.setPosition(Common::Point(214, 168)); - + _item4.setDetails(Rect(27, 145, 81, 159), 126, 9, -1, -1, 1, NULL); _item3.setDetails(Rect(144, 119, 286, 167), 126, 6, 7, 8, 1, NULL); _item2.setDetails(1, 126, 3, 4, 5); @@ -669,7 +669,7 @@ void Scene125::signal() { _icon1._object2.postInit(); _icon1._object2.setup(160, 7, 1); _icon1._object2.setPosition(Common::Point(106, 41)); - + _icon2.setup(160, 1, 1); _icon2.setPosition(Common::Point(80, 32)); _icon2._object2.postInit(); @@ -766,7 +766,7 @@ void Scene125::signal() { case 11: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - + if ((_consoleMode >= 27) && (_consoleMode <= 30)) { consoleAction(11); } @@ -915,7 +915,7 @@ void Scene125::consoleAction(int id) { _icon2.hideIcon(); _icon3.hideIcon(); _icon5.setIcon(24); - + _icon4.setPosition(Common::Point(52, 107)); _icon4._sceneRegionId = 9; _icon4.setIcon(25); @@ -923,7 +923,7 @@ void Scene125::consoleAction(int id) { _icon6.setIcon(26); _sceneMode = 10; - + _palette.loadPalette(161); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; @@ -958,7 +958,7 @@ void Scene125::consoleAction(int id) { _icon2.hideIcon(); _icon3.hideIcon(); _icon5.setIcon(24); - + _icon4.setPosition(Common::Point(52, 107)); _icon4._sceneRegionId = 9; _icon4.setIcon(25); @@ -966,7 +966,7 @@ void Scene125::consoleAction(int id) { _icon6.setIcon(26); _sceneMode = 10; - + _palette.loadPalette(161); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); } @@ -1089,7 +1089,7 @@ void Scene125::consoleAction(int id) { _icon3.hideIcon(); _icon4.hideIcon(); _icon5.setIcon(24); - + _icon4.setPosition(Common::Point(52, 107)); _icon4._sceneRegionId = 9; _icon4.setIcon(25); @@ -1097,7 +1097,7 @@ void Scene125::consoleAction(int id) { _icon6.setIcon(26); _sceneMode = 10; - + _palette.loadPalette(161); R2_GLOBALS._scenePalette.addFader(_palette._palette, 256, 5, this); break; @@ -1134,7 +1134,7 @@ void Scene125::consoleAction(int id) { */ void Scene125::setDetails(int resNum, int lineNum) { stop(); - + Common::String msg = g_resourceManager->getMessage(resNum, lineNum, true); if (!msg.empty()) { @@ -1243,7 +1243,7 @@ void Scene150::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setVisage(10); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); - + _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 150, 0, 1, -1, 1, NULL); _sceneMode = 100; @@ -1420,7 +1420,7 @@ void Scene160::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._uiEnabled = false; R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - + R2_GLOBALS._uiElements.hide(); R2_GLOBALS._interfaceY = SCREEN_HEIGHT; @@ -1664,7 +1664,7 @@ void Scene180::signal() { case 15: setAction(&_sequenceManager, this, 4002, &_object4, &_object5, NULL); break; - + case 17: setAction(&_sequenceManager, this, 4003, &_object4, &_object5, NULL); break; @@ -1730,7 +1730,7 @@ void Scene180::signal() { case 32: _field412 = 1; - + _object2.postInit(); _object2.setPosition(Common::Point(161, 97)); _object2.hide(); @@ -1790,7 +1790,7 @@ void Scene180::signal() { _object4.remove(); _object5.setAction(NULL); _object5.remove(); - + R2_GLOBALS._sound2.fadeOut2(NULL); R2_GLOBALS._sound1.fadeOut2(NULL); break; @@ -2389,7 +2389,7 @@ void Scene205::dispatch() { void Scene205::setup() { const Common::Point pointList1[3] = { Common::Point(2, 50), Common::Point(100, 28), Common::Point(53, 15) }; const Common::Point pointList2[3] = { Common::Point(289, 192), Common::Point(125, 60), Common::Point(130, 40) }; - const Common::Point pointList3[4] = { + const Common::Point pointList3[4] = { Common::Point(140, 149), Common::Point(91, 166), Common::Point(299, 46), Common::Point(314, 10) }; @@ -2445,13 +2445,13 @@ void Scene205::setup() { /** * Handles moving a group of stars in the scene background */ -void Scene205::processList(Object **ObjList, int count, const Common::Rect &bounds, +void Scene205::processList(Object **ObjList, int count, const Common::Rect &bounds, int xMultiply, int yMultiply, int xCenter, int yCenter) { for (int idx = 0; idx < count; ++idx) { Object *obj = ObjList[idx]; Common::Point pt(obj->_position.x - xCenter, obj->_position.y - yCenter); - if ((obj->_position.x <= 319) && (obj->_position.x >= 0) && + if ((obj->_position.x <= 319) && (obj->_position.x >= 0) && (obj->_position.y <= 199) && (obj->_position.y >= 0)) { if (!pt.x && !pt.y) { pt.x = pt.y = 1; @@ -2484,7 +2484,7 @@ void Scene205::handleText() { GfxFont font; font.setFontNumber(4); int width = font.getStringWidth(_message.c_str()); - + _textList[_textIndex].setPosition(Common::Point(160 - (width / 2), _yp)); } @@ -2681,13 +2681,13 @@ void Scene250::signal() { _field412 += 12; R2_GLOBALS._player.setPosition(Common::Point(261, 185)); ADD_MOVER(R2_GLOBALS._player, 261, 15); - + if ((_field414 - 12) == _field412) _sceneMode = 4; break; case 4: _sound1.play(21); - + _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y + 12)); R2_GLOBALS._player.setPosition(Common::Point(261, 185)); ADD_MOVER(R2_GLOBALS._player, 261, 15); @@ -2837,7 +2837,7 @@ void Scene300::Action2::signal() { case 2: if (!R2_GLOBALS._playStream.isPlaying()) _actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1); - + setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(119)); break; default: @@ -2860,7 +2860,7 @@ void Scene300::Action3::signal() { case 2: if (!R2_GLOBALS._playStream.isPlaying()) _actionIndex = R2_GLOBALS._randomSource.getRandomNumber(1); - + setDelay(60 + R2_GLOBALS._randomSource.getRandomNumber(119)); break; default: @@ -2922,7 +2922,7 @@ bool Scene300::MirandaWorkstation::startAction(CursorType action, Event &event) if (R2_GLOBALS._player._characterIndex != 3) SceneItem::display2(300, 49); else - R2_GLOBALS._sceneManager.changeScene(325); + R2_GLOBALS._sceneManager.changeScene(325); return true; case CURSOR_LOOK: @@ -2952,7 +2952,7 @@ bool Scene300::SeekerWorkstation::startAction(CursorType action, Event &event) { if (R2_GLOBALS._player._characterIndex != 2) SceneItem::display2(300, 48); else - R2_GLOBALS._sceneManager.changeScene(325); + R2_GLOBALS._sceneManager.changeScene(325); return true; default: @@ -3107,7 +3107,7 @@ bool Scene300::Seeker::startAction(CursorType action, Event &event) { scene->_sceneMode = 310; scene->setAction(&scene->_sequenceManager1, scene, 310, &R2_GLOBALS._player, NULL); return true; - + default: break; } @@ -3153,7 +3153,7 @@ bool Scene300::Doorway::startAction(CursorType action, Event &event) { Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { - if ((R2_GLOBALS._player._characterIndex == R2_QUINN) && + if ((R2_GLOBALS._player._characterIndex == R2_QUINN) && (!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 301; @@ -3161,7 +3161,7 @@ bool Scene300::Doorway::startAction(CursorType action, Event &event) { } else { SceneItem::display2(300, 45); } - + return true; } else { return SceneActor::startAction(action, event); @@ -3373,7 +3373,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setup(302, 3, 1); R2_GLOBALS._player.setPosition(Common::Point(271, 150)); R2_GLOBALS._player.setAction(&_action1); - + if (R2_GLOBALS.getFlag(55)) { if (R2_GLOBALS.getFlag(57)) { R2_GLOBALS.clearFlag(60); @@ -3689,7 +3689,7 @@ void Scene300::signal309() { if (R2_GLOBALS.getFlag(39)) R2_GLOBALS._stripManager_lookupList[1] = 2; - + if (R2_GLOBALS.getFlag(5)) R2_GLOBALS._stripManager_lookupList[1] = 3; @@ -3728,7 +3728,7 @@ Scene325::Icon::Icon(): SceneActor() { void Scene325::Icon::postInit(SceneObjectList *OwnerList) { SceneObject::postInit(); - + _object1.postInit(); _object1.fixPriority(21); _object1.hide(); @@ -3895,7 +3895,7 @@ Scene325::Scene325(): SceneExt() { _field416 = _field418 = 0; _field41A = _field41C = _field41E = _field420 = 0; _soundCount = _soundIndex = 0; - + for (int idx = 0; idx < 10; ++idx) _soundQueue[idx] = 0; } @@ -3907,7 +3907,7 @@ void Scene325::postInit(SceneObjectList *OwnerList) { R2_GLOBALS.clearFlag(50); _stripManager.addSpeaker(&_quinnSpeaker); _palette.loadPalette(0); - + R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); R2_GLOBALS._player.disableControl(); @@ -3917,7 +3917,7 @@ void Scene325::postInit(SceneObjectList *OwnerList) { _sceneMode = 1; signal(); } - + void Scene325::synchronize(Serializer &s) { SceneExt::synchronize(s); @@ -3953,7 +3953,7 @@ void Scene325::signal() { _icon4.postInit(); _icon4._sceneRegionId = 5; - setAction(&_sequenceManager1, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, + setAction(&_sequenceManager1, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, &R2_GLOBALS._player, NULL); _sceneMode = 2; break; @@ -3969,7 +3969,7 @@ void Scene325::signal() { _icon2._object2.postInit(); _icon2._object2.setup(160, 7, 2); _icon2._object2.setPosition(Common::Point(106, 56)); - + _icon3.setup(160, 1, 1); _icon3.setPosition(Common::Point(65, 47)); _icon3._object2.postInit(); @@ -4008,7 +4008,7 @@ void Scene325::signal() { _object3.postInit(); if (R2_GLOBALS.getFlag(13)) { _object4.postInit(); - setAction(&_sequenceManager1, this, 130, &R2_GLOBALS._player, &_object1, + setAction(&_sequenceManager1, this, 130, &R2_GLOBALS._player, &_object1, &_object2, &_object3, &_object4, NULL); } else { setAction(&_sequenceManager1, this, 129, &R2_GLOBALS._player, &_object1, @@ -4042,12 +4042,12 @@ void Scene325::signal() { _object13.setup(326, 4, 2); _object13.setPosition(Common::Point(149, (int)(_field420 * ADJUST_FACTOR))); _object13.fixPriority(21); - + _object10.postInit(); _object10.setup(326, 1, 1); _object10.setPosition(Common::Point(210, 20)); _object10.fixPriority(10); - + _object1.postInit(); _object1.setup(326, 1, 1); _object1.setPosition(Common::Point(210, 32)); @@ -4072,7 +4072,7 @@ void Scene325::signal() { _object5.setup(326, 1, 1); _object5.setPosition(Common::Point(210, 80)); _object5.fixPriority(10); - + _object6.postInit(); _object6.setup(326, 1, 1); _object6.setPosition(Common::Point(210, 92)); @@ -4450,7 +4450,7 @@ void Scene325::dispatch() { for (int idx = 0; idx < 4; ++idx) _objList[idx].remove(); - + if (flag) { int v = _field420 - 758; _object10.setFrame((v++ <= 0) ? 1 : v); @@ -4522,7 +4522,7 @@ void Scene325::setMessage(int resNum, int lineNum) { _text1.setPosition(Common::Point(49, 19)); R2_GLOBALS._sceneObjects->draw(); - + if ((_soundCount != 0) && (R2_GLOBALS._speechSubtitles != 2)) { _sceneMode = 15; R2_GLOBALS._playStream.play(_soundQueue[_soundIndex++], this); @@ -4804,7 +4804,7 @@ bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == R2_QUINN)) { R2_GLOBALS._player.disableControl(); - + if (R2_GLOBALS.getFlag(26)) { scene->_stripNumber = 1104; scene->_sceneMode = 524; @@ -4818,7 +4818,7 @@ bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { return SceneHotspot::startAction(action, event); } } - + /*--------------------------------------------------------------------------*/ bool Scene500::Object2::startAction(CursorType action, Event &event) { @@ -4910,7 +4910,7 @@ bool Scene500::Doorway::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); } else { scene->_sceneMode = 500; - scene->setAction(&scene->_sequenceManager1, scene, 500, &R2_GLOBALS._player, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 500, &R2_GLOBALS._player, NULL); } return true; @@ -4931,17 +4931,17 @@ bool Scene500::OxygenTanks::startAction(CursorType action, Event &event) { if (R2_GLOBALS._player._characterIndex != R2_QUINN) { SceneItem::display2(500, 52); return true; - } else if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) != 1) && + } else if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) != 1) && (R2_GLOBALS._player._characterIndex != R2_SEEKER) && !R2_GLOBALS.getFlag(28)) { R2_GLOBALS._player.disableControl(); - + if (_position.y == 120) { scene->_sceneMode = 513; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_tanks1, NULL); } else { scene->_sceneMode = 514; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_tanks2, NULL); } return true; @@ -4961,7 +4961,7 @@ bool Scene500::AirLock::startAction(CursorType action, Event &event) { if ((action == CURSOR_USE) && R2_GLOBALS.getFlag(26)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = (R2_GLOBALS._player._characterIndex == R2_QUINN) ? 521 : 522; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_object2, &scene->_airLock, NULL); return true; } else { @@ -5144,7 +5144,7 @@ void Scene500::postInit(SceneObjectList *OwnerList) { _object1.setup(502, 1, 1); _object1.setPosition(Common::Point(258, 99)); _object1.fixPriority(50); - + _object8.postInit(); _object8.setPosition(Common::Point(250, 111)); @@ -5322,16 +5322,16 @@ void Scene525::postInit(SceneObjectList *OwnerList) { loadScene(525); R2_GLOBALS._uiElements._active = false; SceneExt::postInit(); - + R2_GLOBALS._sound1.play(105); - + _actor1.postInit(); _actor1._effect = 1; - + R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); - + setAction(&_sequenceManager, this, 525, &R2_GLOBALS._player, &_actor1, NULL); } @@ -5340,7 +5340,7 @@ void Scene525::signal() { } /*-------------------------------------------------------------------------- - * Scene 600 - + * Scene 600 - * *--------------------------------------------------------------------------*/ Scene600::Scene600() { @@ -5368,28 +5368,28 @@ bool Scene600::Item1::startAction(CursorType action, Event &event) { bool Scene600::Item4::startAction(CursorType action, Event &event) { if ((action != R2_NEGATOR_GUN) || (!R2_GLOBALS.getFlag(1))) return SceneHotspot::startAction(action, event); - + if ((R2_GLOBALS.getFlag(5)) && (!R2_GLOBALS.getFlag(8))) { SceneItem::display(600, 32, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); return true; } - + if (R2_GLOBALS.getFlag(5)) { SceneItem::display(600, 30, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); return true; } - + if ((!R2_GLOBALS.getFlag(8)) || (R2_GLOBALS.getFlag(9))) return SceneHotspot::startAction(action, event); R2_GLOBALS._player.disableControl(); - + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; scene->_object1.setup2(603, 3, 1, 239, 54, 10, 0); scene->_actor3.postInit(); scene->_actor2.postInit(); - + scene->_sceneMode = 612; setAction(&scene->_sequenceManager1, this, 612, &scene->_actor3, &scene->_actor2, &R2_GLOBALS._player, NULL); return true; @@ -5405,7 +5405,7 @@ bool Scene600::Actor4::startAction(CursorType action, Event &event) { if ((action >= CURSOR_WALK) && (action < R2CURSORS_START)) // Only action cursors return SceneActor::startAction(action, event); - + return false; } @@ -5417,10 +5417,10 @@ void Scene600::Actor4::draw() { bool Scene600::Actor5::startAction(CursorType action, Event &event) { if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) return false; - + if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; if ((R2_INVENTORY.getObjectScene(R2_CLAMP) == 600) && (!R2_GLOBALS.getFlag(6))) { @@ -5431,17 +5431,17 @@ bool Scene600::Actor5::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager1, scene, 609, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor6, &scene->_actor1, NULL); return true; } - + if (_frame != 1) return false; - + if (!R2_GLOBALS.getFlag(6)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 616; scene->setAction(&scene->_sequenceManager1, scene, 616, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor6, NULL); return true; } - + if ((R2_GLOBALS.getFlag(9)) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600)) SceneItem::display(600, 31, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); else { @@ -5860,10 +5860,10 @@ bool Scene700::Actor2::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + if (R2_GLOBALS._player._position.y <= 100) return false; - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 701; scene->setAction(&scene->_sequenceManager, scene, 701, &R2_GLOBALS._player, this, NULL); @@ -5876,10 +5876,10 @@ bool Scene700::Actor3::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + if (R2_GLOBALS._player._position.y <= 100) return false; - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 702; scene->setAction(&scene->_sequenceManager, scene, 702, &R2_GLOBALS._player, this, NULL); @@ -5892,10 +5892,10 @@ bool Scene700::Actor4::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + if (R2_GLOBALS._player._position.y <= 100) return false; - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 704; scene->setAction(&scene->_sequenceManager, scene, 704, &R2_GLOBALS._player, this, NULL); @@ -5951,7 +5951,7 @@ bool Scene700::Actor5::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); break; } - + return true; } @@ -5960,7 +5960,7 @@ bool Scene700::Actor6::startAction(CursorType action, Event &event) { if ((action != CURSOR_USE) || (R2_GLOBALS._player._position.y >= 100)) return SceneActor::startAction(action, event); - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1; Common::Point pt(_position.x, 69); @@ -5973,7 +5973,7 @@ bool Scene700::Actor6::startAction(CursorType action, Event &event) { void Scene700::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 900) g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); - + loadScene(700); R2_GLOBALS._v558B6.set(60, 0, 260, 200); SceneExt::postInit(); @@ -5993,7 +5993,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) { _actor3.setPosition(Common::Point(217, 120)); _actor3.fixPriority(10); _actor3.setDetails(700, 15, -1, -1, 1, (SceneItem *) NULL); - + _actor1.postInit(); _actor1.setup(700, 4, 1); _actor1.setPosition(Common::Point(355 - ((R2_GLOBALS._v565E3 * 8) / 5), ((R2_GLOBALS._v565E1 + 20 ) / 5) - 12)); @@ -6132,7 +6132,7 @@ void Scene700::remove() { R2_GLOBALS._sound1.play(10); // CHECKME: Present in the original... But it crashes badly. // The instruction was removed as it's not used in other scene coded the same way -// and reversed by dreammaster. A double check is required in order to verify it doesn't hide +// and reversed by dreammaster. A double check is required in order to verify it doesn't hide // a memory leak // _rotation->remove(); SceneExt::remove(); @@ -6445,7 +6445,7 @@ void Scene800::postInit(SceneObjectList *OwnerList) { if (R2_INVENTORY.getObjectScene(R2_READER) == 800) { _reader.postInit(); - + if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) { _opticalFibre.setup(800, 4, 1); _reader.hide(); @@ -6776,7 +6776,7 @@ void Scene825::process(Event &event) { } void Scene825::dispatch() { - if (R2_GLOBALS._sceneObjects->contains(&_object4) && + if (R2_GLOBALS._sceneObjects->contains(&_object4) && ((_object4._frame == 1) || (_object4._frame == 3)) && (_object4._frame != _frame1)) { _sound2.play(25); @@ -6828,7 +6828,7 @@ void Scene825::doButtonPress(int buttonId) { _sceneText.setup(NO_TREATMENT_REQUIRED); } else { _button6._buttonId = 5; - + _object5.postInit(); setAction(&_sequenceManager1, this, 827, &_object5, NULL); } @@ -6853,7 +6853,7 @@ void Scene825::doButtonPress(int buttonId) { case 4: _sound4.play(27); _button6._buttonId = 5; - + _object1.postInit(); _object1.setup(826, 7, 1); _object1.setPosition(Common::Point(112, 67)); @@ -7002,7 +7002,7 @@ bool Scene850::Panel::startAction(CursorType action, Event &event) { scene->_sceneMode = 852; scene->setAction(&scene->_sequenceManager1, scene, 852, &R2_GLOBALS._player, this, &scene->_object1, NULL); return true; - } + } } /*--------------------------------------------------------------------------*/ @@ -7171,7 +7171,7 @@ bool Scene900::Actor4::startAction(CursorType action, Event &event) { scene->_aSound1.play(53); setup(900, 3, 9); R2_GLOBALS._v565E5 = 0; - + if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_actor2._frame < 8) && (scene->_actor2._animateMode != ANIM_MODE_5)) { scene->_actor2.animate(ANIM_MODE_5, NULL); } else if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_actor2._frame < 8)) { @@ -7292,7 +7292,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _actor2.postInit(); _actor2.setPosition(Common::Point(0, 0)); _actor2.fixPriority(1); - + if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) { if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 700) { _actor2.setup(901, 3, 2); @@ -7321,7 +7321,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { void Scene900::remove() { if (_sceneMode != 901) R2_GLOBALS._sound1.play(10); - + SceneExt::remove(); } @@ -7348,7 +7348,7 @@ void Scene900::signal() { break; case 2: _field412 = 2; - + _actor5.remove(); _actor6.remove(); @@ -7358,7 +7358,7 @@ void Scene900::signal() { else _actor5.setup(900, 3, 11); _actor5.setPosition(Common::Point(36, 166)); - + _actor7.sub96135(5); _actor7.setup(900, 3, 3); _actor7.setPosition(Common::Point(76, 134)); @@ -7374,7 +7374,7 @@ void Scene900::signal() { _actor10.sub96135(7); _actor10.setup(900, 3, 5); _actor10.setPosition(Common::Point(99, 144)); - + break; case 3: _field412 = 3; @@ -7405,11 +7405,11 @@ void Scene900::signal() { R2_GLOBALS._player._canWalk = false; _actor1.setup(900, 1, 1); - + _actor4.sub96135(1); _actor4.setup(900, 1, 3); _actor4.setPosition(Common::Point(77, 168)); - + _sceneMode = 1; signal(); break; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index d757080156..e39efbca3d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -45,9 +45,9 @@ class Scene50: public SceneExt { public: void signal(); }; - + public: - Action1 _action1; + Action1 _action1; virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void process(Event &event); @@ -208,7 +208,7 @@ public: SequenceManager _sequenceManager; Action1 _action1; ASoundExt _sound1; - + int _frameNumber; int _field412, _field480; int _field482, _frameInc; @@ -217,7 +217,7 @@ public: public: Scene180(); - virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void synchronize(Serializer &s); virtual void remove(); virtual void signal(); @@ -283,7 +283,7 @@ class Scene205: public SceneExt { }; private: void setup(); - void processList(Object **ObjList, int count, const Common::Rect &bounds, + void processList(Object **ObjList, int count, const Common::Rect &bounds, int xMultiply, int yMultiply, int xCenter, int yCenter); void handleText(); public: @@ -445,7 +445,7 @@ class Scene325: public SceneExt { void showIcon(); void hideIcon(); }; - + private: void removeText(); void consoleAction(int id); @@ -531,7 +531,7 @@ class Scene500: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - + /* Objects */ class Object2: public SceneActor { public: diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index e849e7137a..304d3a4298 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -118,7 +118,7 @@ void Scene1020::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 1010) _sceneMode = 0; - else + else _sceneMode = 10; } @@ -345,7 +345,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { } SceneExt::postInit(); - + if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS._sceneManager._previousScene = 1000; @@ -397,7 +397,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { _actor18.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); else _actor18.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL); - + _actor17.postInit(); _actor17.setup(1105, 3, 1); _actor17.setPosition(Common::Point(312, 165)); @@ -450,7 +450,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { _actor4._field9C = _field312; R2_GLOBALS._sound1.play(86); - + _sceneMode = 0; setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); @@ -463,7 +463,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); - + _actor16.postInit(); if (R2_GLOBALS.getFlag(52)) { @@ -492,7 +492,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; } - + if (R2_GLOBALS._player._characterIndex == 1) _actor16.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); else @@ -535,7 +535,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { _item6.setDetails(Rect(123, 69, 222, 105), 1100, 13, -1, -1, 1, NULL); _item2.setDetails(Rect(0, 0, 480, 46), 1100, 0, -1, -1, 1, NULL); _item1.setDetails(Rect(0, 0, 480, 200), 1100, 40, 41, 42, 1, NULL); -} +} void Scene1100::remove() { R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; @@ -703,7 +703,7 @@ void Scene1100::signal() { R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); _stripManager.start(302, this); - break; + break; case 27: R2_GLOBALS._player.disableControl(); setAction(&_sequenceManager1, this, 1120, &_actor16, &R2_GLOBALS._player, NULL); @@ -761,7 +761,7 @@ void Scene1100::signal() { R2_GLOBALS._player.disableControl(); _sceneMode = 1125; setAction(&_sequenceManager1, this, 1125, &R2_GLOBALS._player, &_actor16, NULL); - } else + } else R2_GLOBALS._player.enableControl(CURSOR_TALK); break; case 55: @@ -832,22 +832,22 @@ void Scene1100::dispatch() { R2_GLOBALS._scenePalette.refresh(); _field414 = 1; } - + Scene::dispatch(); - + if (R2_GLOBALS._player._bounds.contains(_actor13._position)) _actor13._shade = 3; - else + else _actor13._shade = 0; if (R2_GLOBALS._player._bounds.contains(_actor14._position)) _actor14._shade = 3; - else + else _actor14._shade = 0; if (R2_GLOBALS._player._bounds.contains(_actor15._position)) _actor15._shade = 3; - else + else _actor15._shade = 0; } @@ -952,7 +952,7 @@ void Scene1200::Area1::Actor3::init(int state) { bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + R2_GLOBALS._sound2.play(260); switch (_state) { case 1: @@ -1002,10 +1002,10 @@ bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) { default: break; } - + Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; scene->_field418 = 0; - + if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) scene->_field418 = 1; else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) @@ -1014,7 +1014,7 @@ bool Scene1200::Area1::Actor3::startAction(CursorType action, Event &event) { scene->_field418 = 3; else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 3) && (R2_GLOBALS._v56AA8 == 1)) scene->_field418 = 4; - + return true; } @@ -1035,7 +1035,7 @@ void Scene1200::Area1::postInit(SceneObjectList *OwnerList) { void Scene1200::Area1::remove() { Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; - + scene->_field41A = 0; warning("Unexpected _sceneAreas.remove() call"); // scene->_sceneAreas.remove(&_actor3); @@ -1044,14 +1044,14 @@ void Scene1200::Area1::remove() { _actor3.remove(); _actor4.remove(); _actor5.remove(); - + // sub201EA R2_GLOBALS._sceneItems.remove((SceneItem *)this); _actor2.remove(); SceneArea::remove(); R2_GLOBALS._insetUp--; // - + R2_GLOBALS._player._canWalk = true; } @@ -1388,9 +1388,9 @@ void Scene1200::signal() { void Scene1200::process(Event &event) { if (_field414 != 0) return; - + Scene::process(event); - + if (!R2_GLOBALS._player._canWalk) return; @@ -1405,10 +1405,10 @@ void Scene1200::process(Event &event) { if ((event.mousePos.x > 109) && (event.mousePos.x < 140) && (event.mousePos.y > 50) && (event.mousePos.y < 89)) sub9DAD6(2); - + if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 89) && (event.mousePos.y < 120)) sub9DAD6(3); - + if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 19) && (event.mousePos.y < 50)) sub9DAD6(4); break; @@ -1511,7 +1511,7 @@ void Scene1200::process(Event &event) { event.handled = false; return; } - + switch (event.kbd.keycode) { case Common::KEYCODE_1: warning("FIXME: keycode = 0x4800"); @@ -1538,7 +1538,7 @@ void Scene1200::process(Event &event) { return; } } - + void Scene1200::dispatch() { Rect tmpRect; Scene::dispatch(); @@ -1550,7 +1550,7 @@ void Scene1200::dispatch() { warning("tmpRect.sub14DF3();"); _field41C = 0; } - + if (_field414 != 0) { tmpRect.set(110, 20, 210, 120); _field414--; @@ -1575,7 +1575,7 @@ void Scene1200::dispatch() { _object1.sub51B02(); warning("_gfxManager.sub294AC(unk);"); warning("tmpRect.sub14DF3();"); - + if (_field416 != 0) { switch(_field412 - 1) { case 0: @@ -1664,7 +1664,7 @@ void Scene1337::Action1337::subD18B5(int resNum, int stripNum, int frameNum) { void Scene1337::Action1337::skipFrames(int32 skipCount) { uint32 firstFrameNumber = g_globals->_events.getFrameNumber(); uint32 tmpFrameNumber = firstFrameNumber; - + while (tmpFrameNumber < firstFrameNumber + skipCount) tmpFrameNumber = g_globals->_events.getFrameNumber(); @@ -1824,7 +1824,7 @@ void Scene1337::Action1::signal() { scene->_aSound1.play(62); R2_GLOBALS._sceneObjects->draw(); - + skipFrames(120); scene->_arrunkObj1337[2]._arr2[0]._object1.remove(); scene->_arrunkObj1337[2]._arr2[1]._object1.remove(); @@ -1938,7 +1938,7 @@ void Scene1337::Action1::signal() { scene->_arrunkObj1337[0]._arr1[2]._object1.fixPriority(170); R2_GLOBALS._sceneObjects->draw(); - + scene->actionDisplay(1331, 10, 159, 10, 1, 200, 0, 7, 0, 154, 154); scene->_item2._object1.setPosition(Common::Point(162, 95), 0); scene->_item2._object1.show(); @@ -1976,7 +1976,7 @@ void Scene1337::Action1::signal() { scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[2]._object1._strip); scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[2]._object1._frame); scene->_item2._object1.animate(ANIM_MODE_NONE, NULL); - + scene->_arrunkObj1337[2]._arr1[2]._field34 = 0; scene->_arrunkObj1337[2]._arr1[2]._object1.remove(); @@ -2102,7 +2102,7 @@ void Scene1337::Action1::signal() { R2_GLOBALS._sceneObjects->draw(); skipFrames(240); - + scene->_arrObject1[0].remove(); scene->_arrObject1[1].remove(); scene->_arrObject1[2].remove(); @@ -2125,7 +2125,7 @@ void Scene1337::Action1::signal() { scene->_arrunkObj1337[2]._arr3[0]._field34 = 0; scene->_arrunkObj1337[2]._arr3[0]._object1.remove(); - + scene->_item2._object1.setPosition(scene->_arrunkObj1337[2]._arr3[0]._field36, 0); scene->_item2._object1.show(); @@ -2219,7 +2219,7 @@ void Scene1337::Action1::signal() { R2_GLOBALS._sceneObjects->draw(); skipFrames(240); - + scene->_arrObject1[0].remove(); scene->_arrObject1[1].remove(); scene->_arrObject1[2].remove(); @@ -2289,7 +2289,7 @@ void Scene1337::Action1::signal() { scene->_arrObject2[0].setStrip(7); scene->_arrObject2[0].setFrame(1); scene->_arrObject2[0].fixPriority(180); - + scene->_arrObject1[1].postInit(); scene->_arrObject1[1].setVisage(1332); scene->_arrObject1[1].setPosition(Common::Point(160, 71), 0); @@ -2303,35 +2303,35 @@ void Scene1337::Action1::signal() { scene->_arrObject2[1].setStrip(7); scene->_arrObject2[1].setFrame(1); scene->_arrObject2[1].fixPriority(180); - + scene->_arrObject1[2].postInit(); scene->_arrObject1[2].setVisage(1332); scene->_arrObject1[2].setPosition(Common::Point(131, 100), 0); scene->_arrObject1[2].fixPriority(190); scene->_arrObject1[2].setStrip(4); scene->_arrObject1[2].setFrame(4); - + scene->_arrObject2[2].postInit(); scene->_arrObject2[2].setVisage(1332); scene->_arrObject2[2].setPosition(Common::Point(131, 100), 0); scene->_arrObject2[2].setStrip(7); scene->_arrObject2[2].setFrame(1); scene->_arrObject2[2].fixPriority(180); - + scene->_arrObject1[3].postInit(); scene->_arrObject1[3].setVisage(1332); scene->_arrObject1[3].setPosition(Common::Point(160, 100), 0); scene->_arrObject1[3].fixPriority(190); scene->_arrObject1[3].setStrip(4); scene->_arrObject1[3].setFrame(2); - + scene->_arrObject2[3].postInit(); scene->_arrObject2[3].setVisage(1332); scene->_arrObject2[3].setPosition(Common::Point(160, 100), 0); scene->_arrObject2[3].setStrip(7); scene->_arrObject2[3].setFrame(1); scene->_arrObject2[3].fixPriority(180); - + R2_GLOBALS._sceneObjects->draw(); skipFrames(240); @@ -2353,14 +2353,14 @@ void Scene1337::Action1::signal() { R2_GLOBALS._sceneObjects->draw(); scene->actionDisplay(1331, 19, 159, 10, 1, 220, 0, 7, 0, 154, 154); - + scene->_object1.hide(); scene->actionDisplay(1331, 20, 159, 10, 1, 220, 0, 7, 0, 154, 154); scene->actionDisplay(1331, 21, 159, 10, 1, 220, 0, 7, 0, 154, 154); scene->_item7._field34 = scene->_arrunkObj1337[2]._arr1[1]._field34; - + scene->_item2._object1.setStrip(scene->_arrunkObj1337[2]._arr1[1]._object1._strip); scene->_item2._object1.setFrame(scene->_arrunkObj1337[2]._arr1[1]._object1._frame); scene->_item2._object1.animate(ANIM_MODE_NONE, NULL); @@ -2384,7 +2384,7 @@ void Scene1337::Action1::signal() { scene->_item2._object1.animate(ANIM_MODE_2, NULL); R2_GLOBALS._sceneObjects->draw(); - + scene->actionDisplay(1331, 22, 159, 10, 1, 200, 0, 7, 0, 154, 154); int i = -1; @@ -2452,13 +2452,13 @@ void Scene1337::Action2::signal() { scene->_item7._object1.remove(); scene->_item7._field34 = 0; - + scene->_aSound1.play(60); scene->_item3._object1.animate(ANIM_MODE_5, this); break; case 1: scene->_item3._object1.setFrame(1); - + scene->_aSound1.play(60); scene->_item3._object1.animate(ANIM_MODE_5, this); break; @@ -2482,7 +2482,7 @@ void Scene1337::Action3::signal() { Scene1337 *scene = (Scene1337 *)R2_GLOBALS._sceneManager._scene; scene->_item2._object1.setPosition(Common::Point(162, 95), 0); - + switch (_actionIndex++) { case 0: { scene->_item2._object1._moveDiff = Common::Point(30, 30); @@ -2651,7 +2651,7 @@ void Scene1337::Action3::signal() { scene->_arrunkObj1337[0]._arr1[1]._object1.setFrame(1); scene->_arrunkObj1337[0]._arr1[1]._object1.fixPriority(170); scene->_aSound2.play(61); - + Common::Point pt(283, 102); NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &pt, this); @@ -2668,7 +2668,7 @@ void Scene1337::Action3::signal() { scene->_arrunkObj1337[1]._arr1[2]._object1.setFrame(4); scene->_arrunkObj1337[1]._arr1[2]._object1.fixPriority(170); scene->_aSound2.play(61); - + Common::Point pt(64, 174); NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &pt, this); @@ -2714,7 +2714,7 @@ void Scene1337::Action3::signal() { scene->_arrunkObj1337[3]._arr1[2]._object1.setFrame(3); scene->_arrunkObj1337[3]._arr1[2]._object1.fixPriority(170); scene->_aSound2.play(61); - + Common::Point pt(226, 5); NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &pt, this); @@ -2734,7 +2734,7 @@ void Scene1337::Action3::signal() { default: break; } - + if (_actionIndex > 12) { scene->_field423E = 0; R2_GLOBALS._sceneObjects->draw(); @@ -2764,9 +2764,9 @@ void Scene1337::Action4::signal() { scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 = scene->_field3E28[scene->_field3E24]; scene->_field3E28[scene->_field3E24] = 0; scene->_field3E24--; - + if (scene->_field3E24 < 0) - scene->_background2.remove(); + scene->_background2.remove(); } else { // Self call, forcing next actionIndex signal(); @@ -2786,7 +2786,7 @@ void Scene1337::Action4::signal() { if ((scene->_field4248 == 1) || (scene->_field423E == 2)) scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[0]); - + scene->_item2._object1.hide(); if ((scene->_arrunkObj1337[scene->_field423E]._arr1[0]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { if (scene->_field3E24 < 0) @@ -2798,7 +2798,7 @@ void Scene1337::Action4::signal() { NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB98, this); - + scene->_arrunkObj1337[scene->_field423E]._arr1[1]._field34 = scene->_field3E28[scene->_field3E24]; scene->_field3E28[scene->_field3E24] = 0; scene->_field3E24--; @@ -2821,7 +2821,7 @@ void Scene1337::Action4::signal() { if ((scene->_field4248 == 1) || (scene->_field423E == 2)) scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[1]); - + scene->_item2._object1.hide(); if ((scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { if (scene->_field3E24 < 0) @@ -2833,7 +2833,7 @@ void Scene1337::Action4::signal() { NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldB9C, this); - + scene->_arrunkObj1337[scene->_field423E]._arr1[2]._field34 = scene->_field3E28[scene->_field3E24]; scene->_field3E28[scene->_field3E24] = 0; scene->_field3E24--; @@ -2856,7 +2856,7 @@ void Scene1337::Action4::signal() { if ((scene->_field4248 == 1) || (scene->_field423E == 2)) scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[2]); - + scene->_item2._object1.hide(); if ((scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 == 0) && (scene->subC264B(scene->_arrunkObj1337[scene->_field423E]._arr3[0]._field34 == 0))) { if (scene->_field3E24 < 0) @@ -2868,7 +2868,7 @@ void Scene1337::Action4::signal() { NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &scene->_arrunkObj1337[scene->_field423E]._fieldBA0, this); - + scene->_arrunkObj1337[scene->_field423E]._arr1[3]._field34 = scene->_field3E28[scene->_field3E24]; scene->_field3E28[scene->_field3E24] = 0; scene->_field3E24--; @@ -2891,7 +2891,7 @@ void Scene1337::Action4::signal() { if ((scene->_field4248 == 1) || (scene->_field423E == 2)) scene->setAnimationInfo(&scene->_arrunkObj1337[scene->_field423E]._arr1[3]); - + scene->_item2._object1.hide(); switch (scene->_field423E) { case 0: @@ -2929,7 +2929,7 @@ void Scene1337::Action5::signal() { scene->_item7._object1.setPosition(scene->_item7._field36, 0); scene->_item7._object1.fixPriority(170); } - + scene->_item7._field34 = scene->_field3EF0->_field34; scene->_field3EF0->_field34 = 0; scene->_field3EF0->_object1.remove(); @@ -3095,7 +3095,7 @@ void Scene1337::Action9::signal() { subD18B5(5, 1, 4); scene->subC4CEC(); } - + scene->subC20F9(); break; default: @@ -3143,7 +3143,7 @@ void Scene1337::Action10::signal() { if (scene->_arrunkObj1337[0]._arr1[indexFound]._field34 == 29) { found = true; break; - } + } } break; case 1: @@ -3151,7 +3151,7 @@ void Scene1337::Action10::signal() { if (scene->_arrunkObj1337[1]._arr1[indexFound]._field34 == 29) { found = true; break; - } + } } break; case 2: @@ -3159,7 +3159,7 @@ void Scene1337::Action10::signal() { if (scene->_arrunkObj1337[2]._arr1[indexFound]._field34 == 29) { found = true; break; - } + } } break; case 3: @@ -3167,7 +3167,7 @@ void Scene1337::Action10::signal() { if (scene->_arrunkObj1337[3]._arr1[indexFound]._field34 == 29) { found = true; break; - } + } } break; default: @@ -3190,7 +3190,7 @@ void Scene1337::Action10::signal() { scene->subC4CD2(); if (MessageDialog::show(USE_INTERCEPTOR, NO_MSG, YES_MSG) == 0) scene->subC4CEC(); - else { + else { scene->subC51A0(&scene->_arrunkObj1337[2]._arr1[indexFound], scene->_field3EF8); found2 = true; } @@ -3213,7 +3213,7 @@ void Scene1337::Action10::signal() { if (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0) ++j; } - + if (j <= 1) { for (int i = 0; i <= 7; i++) { if (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0) { @@ -3223,11 +3223,11 @@ void Scene1337::Action10::signal() { } } else { scene->subC4CD2(); - + found2 = false; while (!found2) { scene->actionDisplay(1330, 130, 159, 10, 1, 200, 0, 7, 0, 154, 154); - + // Wait for a mouse or keypress Event event; while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) { @@ -3235,9 +3235,9 @@ void Scene1337::Action10::signal() { R2_GLOBALS._sceneObjects->draw(); g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); } - + scene->_item6._field36 = event.mousePos; - + for (int i = 0; i <= 7; i++) { if ((scene->subC2BF8(&scene->_arrunkObj1337[2]._arr2[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[2]._arr2[i]._field34 != 0)) { scene->_field3EF4 = &scene->_arrunkObj1337[2]._arr2[0]; @@ -3249,15 +3249,15 @@ void Scene1337::Action10::signal() { scene->subC4CEC(); } } - + scene->_field3E28[scene->_field3E26] = scene->_field3EF4->_field34; scene->_field3E26--; scene->_field3EF4->_field34 = 0; scene->_field3EF4->_object1.remove(); - + scene->_item2._object1.setPosition(scene->_field3EF4->_field36, 0); scene->_item2._object1.show(); - + NpcMover *mover = new NpcMover(); scene->_item2._object1.addMover(mover, &scene->_field3EF8->_field36, this); } @@ -3284,7 +3284,7 @@ void Scene1337::Action11::signal() { scene->_field3EF4->_object1.setPosition(scene->_field3EF4->_field36, 0); scene->_field3EF4->_object1.fixPriority(170); scene->_field3EF4->_field34 = 25; - + if (scene->_field4240 == 2) { scene->_item2._object1.setPosition(scene->_field3EF4->_field36, 0); subD18B5(5, 1, 4); @@ -3353,7 +3353,7 @@ void Scene1337::Action11::signal() { break; } } - + if ((found) && (scene->subC3E92(scene->_field4240) != -1)) { scene->subC4CD2(); if (MessageDialog::show(USE_DOUBLE_AGENT, NO_MSG, YES_MSG) == 0) @@ -3393,7 +3393,7 @@ void Scene1337::Action11::signal() { default: break; } - + if (!noAction) return; @@ -3431,9 +3431,9 @@ void Scene1337::Action11::signal() { R2_GLOBALS._sceneObjects->draw(); g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); } - + scene->_item6._field36 = event.mousePos; - + found = false; if (scene->_field4242 != 2) { @@ -3499,7 +3499,7 @@ void Scene1337::Action11::signal() { scene->setAnimationInfo(scene->_field3EF0); break; } - + scene->subC4A39(scene->_field3EF4); break; default: @@ -3560,7 +3560,7 @@ void Scene1337::Action12::signal() { scene->subC4CD2(); bool found = false; - + while (!found) { switch (scene->_field4240) { case 0: @@ -3582,7 +3582,7 @@ void Scene1337::Action12::signal() { R2_GLOBALS._sceneObjects->draw(); g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks); } - + scene->_item6._field36 = event.mousePos; if (scene->_field4240 == 0) { @@ -3594,7 +3594,7 @@ void Scene1337::Action12::signal() { } } } - + if (scene->_field4240 == 3) { for (i = 0; i <= 3; i++) { if ((scene->subC2BF8(&scene->_arrunkObj1337[3]._arr1[i], scene->_item6._field36) != 0) && (scene->_arrunkObj1337[3]._arr1[i]._field34 != 0)) { @@ -3882,14 +3882,14 @@ void Scene1337::dispatch() { void Scene1337::actionDisplay(int resNum, int lineNum, int x, int y, int arg5, int width, int textMode, int fontNum, int colFG, int colBGExt, int colFGExt) { // TODO: Check if it's normal that arg5 is unused and replaced by an hardcoded 0 value // May hide an original bug - + SceneItem::display(resNum, lineNum, SET_X, x, SET_Y, y, SET_KEEP_ONSCREEN, 0, SET_WIDTH, width, SET_POS_MODE, -1, SET_TEXT_MODE, textMode, SET_FONT, fontNum, SET_FG_COLOR, colFG, SET_EXT_BGCOLOR, colBGExt, SET_EXT_FGCOLOR, colFGExt, LIST_END); } void Scene1337::setAnimationInfo(unkObj1337sub1 *subObj) { if (!subObj) return; - + if (subObj->_field34 > 9) { if (subObj->_field34 > 25) { subObj->_object1.setStrip2(4); @@ -3902,7 +3902,7 @@ void Scene1337::setAnimationInfo(unkObj1337sub1 *subObj) { subObj->_object1.setStrip2(2); subObj->_object1.setFrame(subObj->_field34); } - + subObj->_object1.show(); R2_GLOBALS._sceneObjects->draw(); } @@ -3938,7 +3938,7 @@ void Scene1337::subC20F9() { default: break; } - + if (!_autoplay) _unkFctPtr412 = &Scene1337::subC20E5; else @@ -3995,7 +3995,7 @@ void Scene1337::subC2586() { switch (_field423E) { case 2: subC4CD2(); - if (_field4246 == 1) + if (_field4246 == 1) actionDisplay(1330, 114, 159, 10, 1, 200, 0, 7, 0, 154, 154); _field4246 = 0; // No break on purpose @@ -4190,7 +4190,7 @@ void Scene1337::subC2835(int arg1) { if (found) break; - + for (i = 0; i <= 3; i++) { if (_arrunkObj1337[arg1]._arr1[i]._field34 == 13) { found = true; @@ -4329,7 +4329,7 @@ void Scene1337::subC2C2F() { return; int randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - + if (_arrunkObj1337[3]._arr1[randIndx]._field34 == 1) { found = false; @@ -4358,15 +4358,15 @@ void Scene1337::subC2C2F() { for (int i = 0; i <= 7; i++) { if ((_arrunkObj1337[3]._arr2[i]._field34 == 1) && (!subC2687(_arrunkObj1337[3]._arr3[i]._field34))) { int tmpVal = 0; - + for (int j = 0; j <= 7; j++) { if ((_arrunkObj1337[3]._arr2[j]._field34 > 1) && (_arrunkObj1337[3]._arr2[j]._field34 <= 9)) ++tmpVal; } - + if (tmpVal == 7) _field424A = 3; - + subC33C0(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[3]._arr2[i]); found = true; break; @@ -4386,7 +4386,7 @@ void Scene1337::subC2C2F() { int tmpVal = -1; found = false; int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - + for (int i = 0; i <= 3; i++) { if ( (tmpRandIndx != 3) && ( (_arrunkObj1337[tmpRandIndx]._arr1[0]._field34 != 0) @@ -4396,7 +4396,7 @@ void Scene1337::subC2C2F() { tmpVal = tmpRandIndx; break; } - + ++tmpRandIndx; if (tmpRandIndx > 3) tmpRandIndx = 0; @@ -4433,7 +4433,7 @@ void Scene1337::subC2C2F() { case 24: { int tmpVal = -1; int tmpRandIndx = R2_GLOBALS._randomSource.getRandomNumber(3); - + for (int i = 0; i <= 3; i++) { if (tmpRandIndx != 3) { // The variables 'i' and 'j' are not used in the inner code of the loop. @@ -4449,11 +4449,11 @@ void Scene1337::subC2C2F() { ++tmpRandIndx; if (tmpRandIndx > 3) tmpRandIndx = 0; - + if (tmpVal != -1) break; } - + if (tmpVal != -1) { // Useless second identical check skipped subC3456(&_arrunkObj1337[3]._arr1[randIndx], &_arrunkObj1337[tmpVal]._arr3[0]); @@ -4473,7 +4473,7 @@ void Scene1337::subC318B(int arg1, unkObj1337sub1 *subObj1, int arg3) { _field4242 = arg3; int randIndx; - + for (;;) { randIndx = R2_GLOBALS._randomSource.getRandomNumber(3); if (_arrunkObj1337[arg3]._arr1[randIndx]._field34 != 0) @@ -4581,7 +4581,7 @@ void Scene1337::subC33C0(unkObj1337sub1 *subObj1, unkObj1337sub1 *subObj2) { } int Scene1337::subC3E92(int arg1) { - if ( (_arrunkObj1337[arg1]._arr1[0]._field34 == 0) + if ( (_arrunkObj1337[arg1]._arr1[0]._field34 == 0) && (_arrunkObj1337[arg1]._arr1[1]._field34 == 0) && (_arrunkObj1337[arg1]._arr1[2]._field34 == 0) && (_arrunkObj1337[arg1]._arr1[3]._field34 == 0)) @@ -4624,13 +4624,13 @@ Scene1337::unkObj1337sub1 *Scene1337::subC34EC(int arg1) { return &_arrunkObj1337[arg1]._arr2[i]; } } - + for (int i = 0; i <= 7; i++) { if ((_arrunkObj1337[arg1]._arr2[i]._field34 != 0) && (_arrunkObj1337[arg1]._arr2[i]._field34 < 10)) { return &_arrunkObj1337[arg1]._arr2[i]; } } - + return NULL; } @@ -5003,7 +5003,7 @@ void Scene1337::subCD193() { void Scene1337::subCDB90(int arg1, Common::Point pt) { bool found = false; int curReg = R2_GLOBALS._sceneRegions.indexOf(g_globals->_events._mousePos); - + if (arg1 == 3) { int i; for (i = 0; i <= 7; i++) { @@ -5015,7 +5015,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { break; } } - + if (found) { switch (curReg) { case 5: @@ -5052,7 +5052,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { || (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) ) { found = true; } - + if (found) { switch (curReg) { case 5: @@ -5140,10 +5140,10 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { } } } - + if (arg1 != 1) return; - + for (int i = 0; i <= 7; i++) { if (subC2BF8(&_arrunkObj1337[2]._arr2[i], pt)) { switch (_arrunkObj1337[2]._arr2[i]._field34) { @@ -5203,7 +5203,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { } found = true; } - + if (subC2BF8(&_arrunkObj1337[3]._arr3[0], pt)) { if (_arrunkObj1337[3]._arr3[0]._field34 != 0) { actionDisplay(1330, 145, 20, 99, 1, 136, 0, 7, 0, 172, 172); @@ -5212,7 +5212,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { } found = true; } - + if (subC2BF8(&_arrunkObj1337[1]._arr3[0], pt)) { if (_arrunkObj1337[1]._arr3[0]._field34 != 0) { actionDisplay(1330, 144, 300, 99, 1, 136, 0, 7, 0, 117, 117); @@ -5221,7 +5221,7 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { } found = true; } - + if (subC2BF8(&_arrunkObj1337[0]._arr3[0], pt)) { if (_arrunkObj1337[0]._arr3[0]._field34 != 0) { actionDisplay(1330, 1, 159, 10, 1, 200, 0, 7, 0, 154, 154); @@ -5248,12 +5248,12 @@ void Scene1337::subCDB90(int arg1, Common::Point pt) { if (found) return; - + if (_background1._bounds.contains(pt)) { subCD193(); return; } - + if (subC2BF8(&_item7, pt)) actionDisplay(1330, 9, 159, 10, 1, 200, 0, 7, 0, 154, 154); else if (subC2BF8(&_item8, pt)) @@ -5353,7 +5353,7 @@ void Scene1337::subCF31D() { int tmpIndx = subC26CB(1, i); if (tmpIndx == -1) break; - + tmpVal = 0; for (int j = 0; j <= 7; j++) { if (_arrunkObj1337[1]._arr2[j]._field34 == _arrunkObj1337[1]._arr1[tmpIndx]._field34) { @@ -5361,7 +5361,7 @@ void Scene1337::subCF31D() { break; } } - + if (tmpVal == 0) break; @@ -5373,7 +5373,7 @@ void Scene1337::subCF31D() { if ((_arrunkObj1337[1]._arr2[k]._field34 > 1) && (_arrunkObj1337[1]._arr2[k]._field34 <= 9)) ++count; } - + if (count == 7) _field424A = 1; @@ -5397,7 +5397,7 @@ void Scene1337::subCF31D() { } } } - + if (found) return; @@ -5416,9 +5416,9 @@ void Scene1337::subCF31D() { int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3); for (int i = 0; i <= 3; i++) { if (rndVal != 1) { - if ( (_arrunkObj1337[rndVal]._arr1[0]._field34 != 0) - || (_arrunkObj1337[rndVal]._arr1[1]._field34 != 0) - || (_arrunkObj1337[rndVal]._arr1[2]._field34 != 0) + if ( (_arrunkObj1337[rndVal]._arr1[0]._field34 != 0) + || (_arrunkObj1337[rndVal]._arr1[1]._field34 != 0) + || (_arrunkObj1337[rndVal]._arr1[2]._field34 != 0) || (_arrunkObj1337[rndVal]._arr1[3]._field34 == 0)) { count = rndVal; break; @@ -5435,7 +5435,7 @@ void Scene1337::subCF31D() { found = true; } } - + if (found) return; @@ -5449,7 +5449,7 @@ void Scene1337::subCF31D() { for (int j = 0; j <= 3; j++) { if (tmpVal != 1) { for (int k = 0; k <= 7; k++) { - // 'k' is not used in that loop. + // 'k' is not used in that loop. // It looks suspicious. if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(tmpVal, _arrunkObj1337[1]._arr1[i]._field34))) { count = tmpVal; @@ -5510,7 +5510,7 @@ void Scene1337::subCF31D() { if (found) { if (count == -1) - return; + return; subC3456(&_arrunkObj1337[1]._arr1[j], &_arrunkObj1337[count]._arr3[0]); } else { @@ -5561,10 +5561,10 @@ void Scene1337::subCF979() { break; } } - + if (found) return; - + int tmpVal; found = false; for (int i = 0; i <= 3; i++) { @@ -5578,7 +5578,7 @@ void Scene1337::subCF979() { break; } } - + if (!flag) { for (int j = 0; j <= 7; j++) { if ((_arrunkObj1337[0]._arr2[j]._field34 == 1) && (!subC2687(_arrunkObj1337[0]._arr3[0]._field34))) { @@ -5591,21 +5591,21 @@ void Scene1337::subCF979() { if (count == 7) _field424A = 0; - + subC33C0(&_arrunkObj1337[0]._arr1[tmpVal], &_arrunkObj1337[0]._arr2[j]); found = true; } } } } - + if (found) break; } if (found) return; - + found = false; tmpVal = subC2719(0); @@ -5618,10 +5618,10 @@ void Scene1337::subCF979() { } } } - + if (found) return; - + tmpVal = subC274D(0); if (tmpVal != -1) { for (int i = 0; i <= 7; i++) { @@ -5632,10 +5632,10 @@ void Scene1337::subCF979() { } } } - - if (found) + + if (found) return; - + tmpVal = subC2781(0); if (tmpVal != -1) { if ( (_arrunkObj1337[2]._arr1[0]._field34 != 0) @@ -5646,10 +5646,10 @@ void Scene1337::subCF979() { found = true; } } - - if (found) + + if (found) return; - + for (int i = 0; i <= 3; i++) { if (subC27B5(_arrunkObj1337[0]._arr1[i]._field34) != -1) { // The variable 'j' is not used in the inner code of the loop. It's suspect @@ -5666,7 +5666,7 @@ void Scene1337::subCF979() { } } - if (found) + if (found) return; for (int i = 0; i <= 3; i++) { @@ -5678,26 +5678,26 @@ void Scene1337::subCF979() { found = true; } } - + if (found) break; } } - - if (found) + + if (found) return; tmpVal = subC274D(0); int tmpVal2 = subC331B(0); - + if ((tmpVal != -1) && (tmpVal2 != -1)) { subC358E(&_arrunkObj1337[0]._arr1[tmpVal], tmpVal2); found = true; } - + if (found) return; - + tmpVal = subC2781(0); if (tmpVal != -1) { if ( (_arrunkObj1337[1]._arr1[0]._field34 != 0) @@ -5708,7 +5708,7 @@ void Scene1337::subCF979() { found = true; } } - + if (found) return; @@ -5722,7 +5722,7 @@ void Scene1337::subCF979() { found = true; } } - + if (!found) { // The variable 'j' is not used in the inner code of the loop. It's suspect. for (int j = 0; j <= 7; j++) { @@ -5732,7 +5732,7 @@ void Scene1337::subCF979() { } } } - + if (found) break; } @@ -5761,12 +5761,12 @@ void Scene1337::subCF979() { } } } - + if (found) break; } } - + if (found) return; @@ -5847,7 +5847,7 @@ void Scene1337::subD02CA() { _item6._object1 = _arrunkObj1337[2]._arr1[di]._object1; } } - + if (di == 4) { subCDB90(1, _item6._field36); subD0281(); @@ -5862,7 +5862,7 @@ void Scene1337::subD02CA() { subD0281(); return; } - + // That continues the block when R2_GLOBALS._v57810 == 200 and di != 4 subD18B5(1332, _item6._object1._strip, _item6._object1._frame); R2_GLOBALS._sceneObjects->draw(); @@ -5874,7 +5874,7 @@ void Scene1337::subD02CA() { || (g_globals->_events.getEvent(event, EVENT_KEYPRESS)) ){ _item6._field36 = g_globals->_events._mousePos; found_di = false; - + for (int i = 0; i <= 3; i ++) { if (subC2BF8(&_arrunkObj1337[2]._arr1[i], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { if (_arrunkObj1337[2]._arr1[i]._field34 == 0) { @@ -5897,7 +5897,7 @@ void Scene1337::subD02CA() { break; } } - + if ((!found) && (!found_di)) { if (subC2BF8(&_item7, Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { subC4A39(&_item6); @@ -5947,7 +5947,7 @@ void Scene1337::subD02CA() { } else { if (j == 7) _field424A = 2; - + subC33C0(&_item6, &_arrunkObj1337[2]._arr2[i]); return; } @@ -6048,7 +6048,7 @@ void Scene1337::subD02CA() { actionDisplay(1330, 99, 159, 10, 1, 200, 0, 7, 0, 154, 154); } } - + if (subC2BF8(&_arrunkObj1337[3]._arr4[0], Common::Point(_item6._field36.x + 12, _item6._field36.y + 12)) != 0) { if ( (_arrunkObj1337[3]._arr1[0]._field34 != 0) || (_arrunkObj1337[3]._arr1[1]._field34 != 0) @@ -6188,7 +6188,7 @@ void Scene1337::subD02CA() { } } } - + if (found) return; } else { @@ -6234,7 +6234,7 @@ int Scene1337::subD18F5() { // The cursor looks... very dummy // To be checked warning("TODO: CursorManager.setData(R2_GLOBALS.off_57705)"); - + ++R2_GLOBALS._v57709; return R2_GLOBALS._v57709; @@ -6339,7 +6339,7 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(110); } else if (R2_GLOBALS._sceneManager._previousScene == 1550) { _actor1.setPosition(Common::Point(189, 139), 5); - + _actor3.setup(1400, 2, 1); _actor3.changeZoom(-1); _actor3.setPosition(Common::Point(298, 258), 5); @@ -6505,7 +6505,7 @@ void Scene1530::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - + if (R2_GLOBALS._sceneManager._previousScene == 1000) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); @@ -6677,7 +6677,7 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._characterIndex == 1) scene->_sceneMode = 1576; - else + else scene->_sceneMode = 1584; // strcpy(scene->_arrUnkObj15502[7]._actorName, 'hatch'); scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[7], NULL); @@ -6887,7 +6887,7 @@ bool Scene1550::UnkObj15503::startAction(CursorType action, Event &event) { } else { if (scene->_actor4._frame == 1) scene->_sceneMode = 24; - else + else scene->_sceneMode = 22; scene->setAction(&scene->_sequenceManager1, scene, 1561, this, NULL); } @@ -6911,7 +6911,7 @@ void Scene1550::UnkArea1550::remove() { // if ((scene->_sceneMode >= 20) && (scene->_sceneMode <= 29)) return; - + R2_GLOBALS._player.disableControl(); if (scene->_actor4._frame == 1) { scene->_sceneMode = 1559; @@ -7016,14 +7016,14 @@ bool Scene1550::Actor7::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; scene->_sceneMode = 80; scene->signal(); - + return true; } bool Scene1550::Actor8::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + R2_GLOBALS._player.disableControl(); Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; scene->_field412 = 1; @@ -7031,7 +7031,7 @@ bool Scene1550::Actor8::startAction(CursorType action, Event &event) { scene->_sceneMode = 1552; else scene->_sceneMode = 1588; - + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor8, NULL); return true; } @@ -7071,7 +7071,7 @@ bool Scene1550::Actor10::startAction(CursorType action, Event &event) { scene->_sceneMode = 1589; scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor10, NULL); - return true; + return true; } bool Scene1550::Actor11::startAction(CursorType action, Event &event) { @@ -7087,7 +7087,7 @@ bool Scene1550::Actor11::startAction(CursorType action, Event &event) { scene->_sceneMode = 1587; scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor11, NULL); - return true; + return true; } bool Scene1550::Actor12::startAction(CursorType action, Event &event) { @@ -7132,7 +7132,7 @@ bool Scene1550::Actor13::startAction(CursorType action, Event &event) { case CURSOR_USE: if (scene->_field415 != 2) return SceneActor::startAction(action, event); - + if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1564; @@ -7180,13 +7180,13 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { loadScene(1234); else loadScene(1550); - + scalePalette(65, 65, 65); setZoomPercents(30, 75, 170, 100); _field417 = 1550; _field419 = 0; SceneExt::postInit(); - + if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS.setFlag(R2_ATTRACTOR_CABLE_HARNESS); @@ -7194,12 +7194,12 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterScene[1] = 1550; R2_GLOBALS._player._characterScene[2] = 1550; } - + _stripManager.setColors(60, 255); _stripManager.setFontNumber(3); _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - + R2_GLOBALS._player.postInit(); R2_GLOBALS._player._effect = 6; @@ -7209,19 +7209,19 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setup(1505, 3, 1); R2_GLOBALS._player._moveDiff = Common::Point(5, 3); - + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11)) R2_GLOBALS._player.setPosition(Common::Point(157, 135)); else R2_GLOBALS._player.setPosition(Common::Point(160, 100)); - + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); - + _field414 = 0; _actor7.changeZoom(-1); R2_GLOBALS._player.changeZoom(-1); - + switch (R2_GLOBALS._sceneManager._previousScene) { case 1530: R2_GLOBALS._v565AE = 0; @@ -7237,9 +7237,9 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1580) { R2_GLOBALS._player.disableControl(); R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); - + _field412 = 1; - + _actor1.postInit(); _arrUnkObj15502[7].subA5CDF(8); _arrUnkObj15502[7].hide(); @@ -7247,7 +7247,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { _sceneMode = 1577; else _sceneMode = 1578; - + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_arrUnkObj15502[7], NULL); R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550; } else { @@ -7257,13 +7257,13 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { default: break; } - + subA2B2F(); - + _item1.setDetails(16, 1550, 10, -1, -1); _item2.setDetails(24, 1550, 10, -1, -1); _item3.setDetails(Rect(0, 0, 320, 200), 1550, 0, 1, -1, 1, NULL); - + if ((R2_GLOBALS._sceneManager._previousScene == 1500) && (R2_GLOBALS.getFlag(16))) { _sceneMode = 70; if (!R2_GLOBALS._sceneObjects->contains(&_actor7)) @@ -7454,7 +7454,7 @@ void Scene1550::signal() { ++R2_GLOBALS._v565AE; if (R2_GLOBALS._player._characterIndex == 1) _stripManager.start(499 + R2_GLOBALS._v565AE, this); - else + else _stripManager.start(502 + R2_GLOBALS._v565AE, this); } } else { @@ -7470,7 +7470,7 @@ void Scene1550::signal() { ++R2_GLOBALS._v565AE; if (R2_GLOBALS._player._characterIndex == 1) _stripManager.start(563 + R2_GLOBALS._v565AE, this); - else + else _stripManager.start(567 + R2_GLOBALS._v565AE, this); } } @@ -7635,11 +7635,11 @@ void Scene1550::process(Event &event) { _field412 = 1; else _field412 = 0; - + if ((curReg == 13) || (curReg == 14)) _field412 = 0; } - + Scene::process(event); } @@ -7675,10 +7675,10 @@ void Scene1550::dispatch() { break; } } - + if (_field412 != 0) return; - + switch (R2_GLOBALS._player.getRegionIndex() - 11) { case 0: // No break on purpose @@ -7687,9 +7687,9 @@ void Scene1550::dispatch() { _sceneMode = 1; _field412 = 1; --R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; - + subA2B2F(); - + R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 108) * 172) / 100), 145)); if (R2_GLOBALS._player._position.x < 160) { Common::Point pt(R2_GLOBALS._player._position.x + 5, 135); @@ -7710,9 +7710,9 @@ void Scene1550::dispatch() { _sceneMode = 3; _field412 = 1; ++R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; - + subA2B2F(); - + R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 172) * 108) / 100), 19)); if (R2_GLOBALS._player._position.x < 160) { Common::Point pt(R2_GLOBALS._player._position.x + 5, 29); @@ -7733,9 +7733,9 @@ void Scene1550::dispatch() { _sceneMode = 5; _field412 = 1; ++R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]; - + subA2B2F(); - + if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11) && (R2_GLOBALS._player._position.y > 50) && (R2_GLOBALS._player._position.y < 135)) { if (R2_GLOBALS._player._position.y >= 85) { R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 10)); @@ -7792,7 +7792,7 @@ void Scene1550::dispatch() { void Scene1550::saveCharacter(int characterIndex) { if (R2_GLOBALS._player._characterIndex == 3) R2_GLOBALS._sound1.fadeOut2(NULL); - + SceneExt::saveCharacter(characterIndex); } @@ -7913,7 +7913,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { fixPriority(2); if (scene->_field414 == 2) setup(1553, 2, 1); - else + else setup(1556, 2, 1); setPosition(Common::Point(160, 44)); break; @@ -7943,7 +7943,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { } else { fixPriority(2); } - + if (frameNumber != 1) setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL); @@ -7984,40 +7984,40 @@ void Scene1550::subA2B2F() { Rect tmpRect; _field419 = 0; _field415 = 0; - + tmpRect = R2_GLOBALS._v5589E; - + _actor14.remove(); _actor17.remove(); _actor15.remove(); _actor19.remove(); _actor16.remove(); _actor18.remove(); - + for (int i = 0; i < 8; ++i) _arrUnkObj15501[i].remove(); - + _actor6.remove(); for (int i = 0; i < 8; ++i) _arrUnkObj15502[i].remove(); - + _actor8.remove(); _actor9.remove(); _actor10.remove(); _actor3.remove(); _actor11.remove(); - + if ((_sceneMode != 1577) && (_sceneMode != 1578)) _actor1.remove(); - + _actor2.remove(); _actor7.remove(); _actor13.remove(); _actor5.remove(); _actor12.remove(); _actor4.remove(); - + switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2]) { case 0: switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { @@ -8218,7 +8218,7 @@ void Scene1550::subA2B2F() { } else { _field414 = 2; } - + if (R2_GLOBALS._sceneManager._sceneNumber == 1550){ warning("Mouse_hideIfNeeded()"); warning("gfx_set_pane_p"); @@ -8528,7 +8528,7 @@ void Scene1550::subA2B2F() { _actor6.setPosition(Common::Point(243, 131)); _actor6.fixPriority(10); _actor6.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - + _actor1.postInit(); _actor1.setup(1550, 2, 3); _actor1.setPosition(Common::Point(243, 64)); @@ -8658,7 +8658,7 @@ void Scene1550::subA2B2F() { } /*-------------------------------------------------------------------------- - * Scene 1575 - + * Scene 1575 - * *--------------------------------------------------------------------------*/ Scene1575::Scene1575() { @@ -8709,7 +8709,7 @@ void Scene1575::Hotspot1::process(Event &event) { return; } int di = scene->_actor1._position.x; - + switch (_field34 - 1) { case 0: if (R2_GLOBALS.getFlag(18)) { @@ -8730,10 +8730,10 @@ void Scene1575::Hotspot1::process(Event &event) { di -= 65; di += 2; scene->_field41A += 2; - + for (int i = 0; i < 17; i++) scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y)); - + scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y)); scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y)); scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y)); @@ -8745,12 +8745,12 @@ void Scene1575::Hotspot1::process(Event &event) { if (scene->_field41A > 0) { if (di < -8) di += 65; - + di -= 2; scene->_field41A -= 2; for (int i = 0; i < 178; i++) scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y)); - + scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y)); scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y)); scene->_actor1.setPosition(Common::Point(di, scene->_actor1._position.y)); @@ -9061,9 +9061,9 @@ bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) { scene->_actor2.setup(1580, 1, 4); scene->_actor2.setPosition(Common::Point(159, 163)); scene->_actor2.setDetails(1550, 78, -1, -1, 2, (SceneItem *) NULL); - + scene->_arrActor[5].remove(); - + return true; } @@ -9082,12 +9082,12 @@ bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) { scene->_actor3.setup(1580, 1, 1); scene->_actor3.setPosition(Common::Point(124, 108)); scene->_actor3.fixPriority(10); - + if (R2_INVENTORY.getObjectScene(26) == 1580) scene->_actor3.setDetails(1550, 14, -1, -1, 5, &scene->_actor2); else scene->_actor3.setDetails(1550, 14, -1, -1, 2, (SceneItem *)NULL); - + scene->_actor1.postInit(); scene->_actor1.setup(1580, 3, 1); scene->_actor1.setPosition(Common::Point(124, 109)); @@ -9115,7 +9115,7 @@ bool Scene1580::Actor2::startAction(CursorType action, Event &event) { scene->_stripManager.start(536, scene); else scene->_stripManager.start(537, scene); - + return true; } @@ -9132,35 +9132,35 @@ bool Scene1580::Actor3::startAction(CursorType action, Event &event) { remove(); return true; } - + return SceneActor::startAction(action, event); } bool Scene1580::Actor4::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); R2_GLOBALS._sceneItems.remove(&scene->_actor4); scene->_sceneMode = 0; animate(ANIM_MODE_5, scene); - + return true; } bool Scene1580::Actor5::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); setFrame(2); scene->_sceneMode = 20; scene->setAction(&scene->_sequenceManager, scene, 2, &R2_GLOBALS._player, NULL); - + return true; } @@ -9238,9 +9238,9 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _stripManager.setFontNumber(3); _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - + _sceneMode = 0; - + R2_GLOBALS._player.disableControl(); if (R2_INVENTORY.getObjectScene(26) == 1580) { _actor2.postInit(); @@ -9250,14 +9250,14 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { } else { _item1.setDetails(Rect(141, 148, 179, 167), 1550, 79, -1, -1, 1, NULL); } - + if (R2_INVENTORY.getObjectScene(51) == 1580) { _actor3.postInit(); _actor3.setup(1580, 1, 1); _actor3.setPosition(Common::Point(124, 108)); _actor3.fixPriority(10); _actor3.setDetails(1550, 13, -1, -1, 1, (SceneItem *) NULL); - + _actor1.postInit(); _actor1.setup(1580, 1, 3); _actor1.setPosition(Common::Point(124, 96)); @@ -9273,7 +9273,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor1.setup(1580, 3, 1); _actor1.setPosition(Common::Point(124, 109)); _actor1.fixPriority(20); - + _sceneMode = 10; } else { _item2.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 1, NULL); @@ -9289,7 +9289,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor4.setPosition(Common::Point(216, 108)); _actor4.fixPriority(100); - + _actor5.postInit(); _actor5.setup(1580, 4, 1); _actor5.setPosition(Common::Point(291, 147)); @@ -9303,7 +9303,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor6.fixPriority(50); _actor6.setDetails(1550, 32, -1, 34, 1, (SceneItem *) NULL); } - + if (R2_INVENTORY.getObjectScene(27) == 1580) { _actor7.postInit(); _actor7.setup(1580, 6, 1); @@ -9311,13 +9311,13 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor7.fixPriority(50); _actor7.setDetails(1550, 38, -1, 34, 1, (SceneItem *) NULL); } - + R2_GLOBALS._player.postInit(); R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1580; R2_GLOBALS._player.hide(); setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); _item3.setDetails(Rect(0, 0, 320, 200), 1550, 50, -1, -1, 1, NULL); - + } void Scene1580::signal() { @@ -9334,7 +9334,7 @@ void Scene1580::signal() { _arrActor[0].setup(1580, 2, 1); _arrActor[0].setPosition(Common::Point(138, 56)); } - + if (R2_INVENTORY.getObjectScene(25) != 0) { _arrActor[1].postInit(); _arrActor[1].setup(1580, 2, 2); @@ -9663,7 +9663,7 @@ void Scene1625::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 1700 - + * Scene 1700 - * *--------------------------------------------------------------------------*/ Scene1700::Scene1700() { @@ -9751,7 +9751,7 @@ void Scene1700::Exit3::changeScene() { void Scene1700::subAF3F8() { Rect tmpRect; R2_GLOBALS._walkRegions.load(1700); - + _actor3.remove(); _actor4.remove(); _actor5.remove(); @@ -9759,22 +9759,22 @@ void Scene1700::subAF3F8() { _actor7.remove(); _actor8.remove(); _actor11.remove(); - + if (_sceneMode != 40) { _actor9.remove(); _actor10.remove(); } - + warning("tmpRect = _v5589E;"); warning("Mouse_hideIfNeeded"); warning("set_pane_p(_paneNumber);"); warning("Big loop calling gfx_draw_slice_p"); - + if (_field77A == 0) _field77A = 1; else _field77A = 0; - + warning("set_pane_p(_paneNumber);"); if ((_sceneMode != 40) && (R2_GLOBALS._v565F6 != 0)){ @@ -9784,57 +9784,57 @@ void Scene1700::subAF3F8() { _actor9.setDetails(1700, 6, -1, -1, 2, (SceneItem *) NULL); R2_GLOBALS._walkRegions.enableRegion(2); R2_GLOBALS._walkRegions.enableRegion(12); - } - + } + if ((R2_GLOBALS._v565F6 + 2) % 4 == 0) { _actor3.postInit(); _actor3.setup(1700, 1, 1); _actor3.setPosition(Common::Point(222, 82)); _actor3.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); - + _actor5.postInit(); _actor5.setup(1700, 2, 1); _actor5.setPosition(Common::Point(177, 82)); _actor5.fixPriority(0); - + _actor6.postInit(); _actor6.setup(1700, 2, 2); _actor6.setPosition(Common::Point(332, 96)); _actor6.fixPriority(0); - + _actor4.postInit(); _actor4.setup(1700, 1, 2); _actor4.setPosition(Common::Point(424, 84)); - + R2_GLOBALS._walkRegions.enableRegion(11); } - + if ((R2_GLOBALS._v565F6 + 399) % 800 == 0) { _actor7.postInit(); _actor7.setup(1700, 3, 2); _actor7.setPosition(Common::Point(51, 141)); _actor7.fixPriority(0); _actor7.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); - + _exit3._enabled = true; } else { R2_GLOBALS._walkRegions.enableRegion(1); _exit3._enabled = false; } - - if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._v565F6 == 25) || (R2_GLOBALS._v565F6 == -3))) + + if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._v565F6 == 25) || (R2_GLOBALS._v565F6 == -3))) || ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._v565F6 == R2_GLOBALS._v565FA)) ) { R2_GLOBALS._v565FA = R2_GLOBALS._v565F6; if (!R2_GLOBALS.getFlag(15)) _field77C = 1; - + _actor11.postInit(); _actor11.setup(1700, 3, 1); _actor11.setPosition(Common::Point(338, 150)); _actor11.setDetails(1700, 9, -1, -1, 2, (SceneItem *) NULL); _actor11.fixPriority(15); - + _actor8.postInit(); _actor8.setup(1700, 4, 1); _actor8.setPosition(Common::Point(312, 106)); @@ -9847,14 +9847,14 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS._sceneManager._previousScene = 1530; - + scalePalette(65, 65, 65); _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); _field77A = 0; _field77C = 0; - + _exit1.setDetails(Rect(94, 0, 319, 12), EXITCURSOR_N, 1700); _exit2.setDetails(Rect(0, 161, 319, 168), EXITCURSOR_S, 1700); _exit3.setDetails(Rect(0, 0, 2, 138), EXITCURSOR_W, 1800); @@ -9869,11 +9869,11 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setVisage(1506); R2_GLOBALS._player._moveDiff = Common::Point(3, 1); } - + _actor12.postInit(); _actor12.animate(ANIM_MODE_1, NULL); _actor12.setObjectWrapper(new SceneObjectWrapper()); - + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _actor12.setVisage(1506); _actor12._moveDiff = Common::Point(3, 1); @@ -9883,41 +9883,41 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { _actor12._moveDiff = Common::Point(2, 1); _actor12.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL); } - + R2_GLOBALS._sound1.play(134); - + _actor1.postInit(); _actor1.fixPriority(10); - + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _actor1.setVisage(1112); - else + else _actor1.setVisage(1111); - + _actor1._effect = 5; _actor1._field9C = _field312; R2_GLOBALS._player._linkedActor = &_actor1; - + _actor2.postInit(); _actor2.fixPriority(10); if (R2_GLOBALS._player._characterIndex == R2_QUINN) _actor2.setVisage(1111); - else + else _actor2.setVisage(1112); - + _actor2._effect = 5; _actor2._field9C = _field312; _actor12._linkedActor = &_actor2; - + R2_GLOBALS._sound1.play(134); - + switch (R2_GLOBALS._sceneManager._previousScene) { case 1530: R2_GLOBALS._player._characterIndex = R2_QUINN; R2_GLOBALS._player.disableControl(); R2_GLOBALS._player.hide(); _actor12.hide(); - + _actor10.postInit(); warning("_actor10._actorName = \"hatch\";"); _actor10.hide(); @@ -9926,7 +9926,7 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { _actor9.setup(1701, 1, 1); _actor9.setPosition(Common::Point(220, 137)); _actor9.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL); - + _actor1.hide(); _actor2.hide(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -10003,7 +10003,7 @@ void Scene1700::signal() { Common::Point pt(R2_GLOBALS._player._position.x, 160); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); - + if (R2_GLOBALS._player._position.x < 132) { _actor12.setPosition(Common::Point(156, 170)); Common::Point pt2(156, 160); @@ -10028,7 +10028,7 @@ void Scene1700::signal() { Common::Point pt(R2_GLOBALS._player._position.x, 10); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); - + if (R2_GLOBALS._player._position.x >= 171) { _actor12.setPosition(Common::Point(155, 0)); Common::Point pt2(155, 10); @@ -10112,7 +10112,7 @@ void Scene1700::signal() { R2_GLOBALS._walkRegions.enableRegion(15); else R2_GLOBALS._walkRegions.enableRegion(17); - + R2_GLOBALS._player.enableControl(); break; case 1704: @@ -10130,7 +10130,7 @@ void Scene1700::signal() { } /*-------------------------------------------------------------------------- - * Scene 1750 - + * Scene 1750 - * *--------------------------------------------------------------------------*/ Scene1750::Actor4::Actor4() { @@ -10193,7 +10193,7 @@ void Scene1750::Actor4::subB1A76(int arg1, int arg2, int arg3, int arg4, int arg _fieldA8 = arg3; _fieldAA = arg4; _fieldAC = arg5; - + postInit(); setup(1750, 1, 1); fixPriority(255); @@ -10227,7 +10227,7 @@ void Scene1750::Actor4::process(Event &event) { addMover(NULL); subB1B27(); } - + if (_fieldAE != 0) { event.handled = true; if (event.mousePos.y >= _fieldA8) { @@ -10251,7 +10251,7 @@ bool Scene1750::Actor4::startAction(CursorType action, Event &event) { bool Scene1750::Actor5::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene; switch (_fieldA4) { @@ -10294,7 +10294,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._uiElements._active = false; R2_GLOBALS._v5589E.set(0, 0, 320, 200); SceneExt::postInit(); - + R2_GLOBALS._player._characterScene[1] = 1750; R2_GLOBALS._player._characterScene[2] = 1750; R2_GLOBALS._player._oldCharacterScene[1] = 1750; @@ -10304,7 +10304,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { _rotation->setDelay(0); _rotation->_idxChange = 0; _rotation->_countdown = 2; - + switch ((R2_GLOBALS._v565F6 + 2) % 4) { case 0: _rotation->_currIndex = 247; @@ -10321,7 +10321,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { default: break; } - + byte tmpPal[768]; for (int i = 224; i < 255; i++) { @@ -10348,40 +10348,40 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { _actor3.setPosition(Common::Point(49, 185)); _actor3.fixPriority(7); _actor3.setDetails(1750, 30, -1, -1, 1, (SceneItem *) NULL); - + _actor1.postInit(); _actor1.setup(1750, 2, 1); _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._v565F6 % 800) * 4) - 1440)); _actor1.fixPriority(8); - + _actor2.postInit(); _actor2.setup(1750, 1, 4); - + int tmpVar = abs(_actor1._position.y - 158) / 100; - + if (tmpVar >= 8) _actor2.hide(); else if (_actor1._position.y <= 158) _actor2.setPosition(Common::Point(137, (tmpVar * 7) + 122)); else _actor2.setPosition(Common::Point(148, (tmpVar * 7) + 122)); - + _actor4.subB1A76(1, 286, 143, 41, 15); _actor4.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL); - + _actor5.postInit(); _actor5._fieldA4 = 1; _actor5.setup(1750, 1, 2); _actor5.setPosition(Common::Point(192, 140)); _actor5.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); - + _actor6.postInit(); _actor6._fieldA4 = 2; _actor6.setup(1750, 1, 3); _actor6.setPosition(Common::Point(192, 163)); _actor6.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); _actor6.hide(); - + _actor7.postInit(); _actor7._fieldA4 = 3; _actor7.setup(1750, 1, 5); @@ -10393,7 +10393,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { _field413 = 0; _field415 = 0; _field419 = ((_rotation->_currIndex - 218) / 4) % 4; - + _item2.setDetails(Rect(129, 112, 155, 175), 1750, 21, -1, -1, 1, NULL); _item3.setDetails(Rect(93, 122, 126, 172), 1750, 15, -1, -1, 1, NULL); _item4.setDetails(Rect(3, 3, 157, 99), 1750, 9, -1, -1, 1, NULL); @@ -10403,15 +10403,15 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { void Scene1750::remove() { _rotation->remove(); - + if (R2_GLOBALS._v565F6 == 2400) R2_GLOBALS._v565F6 = 2399; - + if (R2_GLOBALS._v565F6 == -2400) R2_GLOBALS._v565F6 = -2399; - + R2_GLOBALS._v565FA = R2_GLOBALS._v565F6; - + SceneExt::remove(); R2_GLOBALS._sound1.fadeOut2(NULL); R2_GLOBALS._v5589E.top = 3; @@ -10432,7 +10432,7 @@ void Scene1750::process(Event &event) { void Scene1750::dispatch() {} /*-------------------------------------------------------------------------- - * Scene 1800 - + * Scene 1800 - * *--------------------------------------------------------------------------*/ Scene1800::Scene1800() { @@ -10448,10 +10448,10 @@ void Scene1800::synchronize(Serializer &s) { bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { if ((action != R2_COM_SCANNER) && (action != R2_COM_SCANNER_2)) return false; - + Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS._v565F6 == 1201) { @@ -10624,41 +10624,41 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(116); _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - + if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS._v565F6 = 1201; - + if (R2_GLOBALS._v565F6 == 1201) _field412 = 2; else _field412 = 0; - + scalePalette(65, 65, 65); _exit1.setDetails(Rect(0, 160, 319, 168), EXITCURSOR_S, 1800); _item5.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL); - + _actor6.postInit(); _actor6.setup(1801, 4, 1); _actor6.setPosition(Common::Point(170, 24)); _actor6.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL); - + _actor7.postInit(); _actor7.setup(1801, 3, 1); _actor7.setPosition(Common::Point(160, 139)); _actor7.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL); - + _actor8.postInit(); _actor8.setup(1800, 1, 1); _actor8.setPosition(Common::Point(110, 78)); _actor8.fixPriority(135); _actor8.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); - + _actor9.postInit(); _actor9.setup(1800, 2, 1); _actor9.setPosition(Common::Point(209, 78)); _actor9.fixPriority(135); _actor9.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); - + _actor4.postInit(); if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64))) _actor4.setup(1801, 2, 1); @@ -10666,7 +10666,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { _actor4.setup(1801, 2, 10); _actor4.setPosition(Common::Point(76, 142)); _actor4.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); - + _actor5.postInit(); if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64))) _actor5.setup(1801, 1, 1); @@ -10674,7 +10674,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { _actor5.setup(1801, 1, 10); _actor5.setPosition(Common::Point(243, 142)); _actor5.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); - + R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { @@ -10693,7 +10693,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setVisage(1503); R2_GLOBALS._player._moveDiff = Common::Point(2, 2); } - + _actor2.postInit(); _actor2.animate(ANIM_MODE_1, NULL); _actor2.setObjectWrapper(new SceneObjectWrapper()); @@ -10716,7 +10716,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { _actor2.setVisage(1503); _actor2._moveDiff = Common::Point(2, 2); } - + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setPosition(Common::Point(114, 150)); @@ -10751,34 +10751,34 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { _actor2.setPosition(Common::Point(140, 160)); } } - + _actor1.postInit(); _actor1.fixPriority(10); if (R2_GLOBALS._player._characterIndex == R2_QUINN) _actor1.setVisage(1111); else _actor1.setVisage(1110); - + _actor1._effect = 5; _actor1._field9C = _field312; R2_GLOBALS._player._linkedActor = &_actor1; - + _actor3.postInit(); _actor3.fixPriority(10); if (R2_GLOBALS._player._characterIndex == R2_QUINN) _actor3.setVisage(1110); else _actor3.setVisage(1111); - + _actor3._effect = 5; _actor3._field9C = _field312; - + _actor2._linkedActor = &_actor3; - + R2_GLOBALS._player._characterScene[1] = 1800; R2_GLOBALS._player._characterScene[2] = 1800; - + _item2.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL); _item1.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL); @@ -10786,7 +10786,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { // This is *wrong*. The following statement is a wild guess based on good common sense _item3.setDetails(11, 1800, 23, 24, 25); _item4.setDetails(Rect(0, 0, 320, 200), 1800, 17, -1, 19, 1, NULL); - + R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) { if ((R2_GLOBALS.getFlag(14)) && (R2_GLOBALS._player._characterIndex == R2_SEEKER)) { @@ -10822,7 +10822,7 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_actor2, NULL); } } - + R2_GLOBALS._player._oldCharacterScene[1] = 1800; R2_GLOBALS._player._oldCharacterScene[2] = 1800; } @@ -10956,7 +10956,7 @@ void Scene1800::saveCharacter(int characterIndex) { } /*-------------------------------------------------------------------------- - * Scene 1850 - + * Scene 1850 - * *--------------------------------------------------------------------------*/ Scene1850::Scene1850() { @@ -10970,7 +10970,7 @@ void Scene1850::synchronize(Serializer &s) { bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneHotspot::startAction(action, event); - + Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); @@ -10988,7 +10988,7 @@ bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL); else scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_actor5, NULL); - + R2_GLOBALS.clearFlag(30); } else { scene->_sceneMode = 1853; @@ -10998,7 +10998,7 @@ bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { else scene->setAction(&scene->_sequenceManager1, scene, 1853, &R2_GLOBALS._player, NULL); } - + return true; } @@ -11009,10 +11009,10 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { case CURSOR_USE: if ((R2_GLOBALS._player._characterIndex != R2_SEEKER) || (R2_GLOBALS.getFlag(33)) || (R2_GLOBALS.getFlag(30))) return SceneActor::startAction(action, event); - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1857; - + if (R2_GLOBALS.getFlag(32)) scene->setAction(&scene->_sequenceManager1, scene, 1858, &R2_GLOBALS._player, &scene->_actor5, NULL); else @@ -11026,7 +11026,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { SceneItem::display(1850, 2, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); else SceneItem::display(1850, 1, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); - + return true; break; case R2_AIRBAG: @@ -11046,7 +11046,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1875; scene->_actor2.postInit(); - + if (R2_GLOBALS.getFlag(32)) scene->setAction(&scene->_sequenceManager1, scene, 1876, &R2_GLOBALS._player, &scene->_actor2, NULL); else @@ -11059,7 +11059,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); scene->_stripManager.start(557, scene); R2_GLOBALS.setFlag(69); - + return true; } else { return SceneActor::startAction(action, event); @@ -11074,7 +11074,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { scene->_sceneMode = 1878; scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor2, NULL); } - + return true; break; default: @@ -11086,31 +11086,31 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { bool Scene1850::Actor6::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneHotspot::startAction(action, event); - + Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; - + if (R2_GLOBALS.getFlag(32)) { SceneItem::display(3240, 4, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); return true; } - + R2_GLOBALS._player.disableControl(); if (scene->_field412 == 1851) R2_GLOBALS._player._effect = 1; - + if (_position.x >= 160) R2_GLOBALS.setFlag(29); - else + else R2_GLOBALS.clearFlag(29); - + if ((R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { if (_position.x >= 160) scene->_field41E = 3; else scene->_field41E = 2; - + scene->_sceneMode = 1860; - + if (R2_GLOBALS.getFlag(32)) { scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL); } else { @@ -11136,13 +11136,13 @@ bool Scene1850::Actor8::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1881; - + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { scene->setAction(&scene->_sequenceManager1, scene, 1881, &R2_GLOBALS._player, NULL); } else { scene->setAction(&scene->_sequenceManager1, scene, 1880, &R2_GLOBALS._player, NULL); } - + return true; } @@ -11166,10 +11166,10 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 3150) R2_GLOBALS._sound1.play(116); - + _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - + _field418 = 0; _field41E = 0; _field41A = Common::Point(0, 0); @@ -11192,7 +11192,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._walkRegions.enableRegion(1); _actor5.postInit(); - + if (R2_GLOBALS.getFlag(34)) { R2_GLOBALS._walkRegions.enableRegion(2); _actor5.setup(1851, 4, 3); @@ -11371,7 +11371,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setPosition(Common::Point(164, 106)); } - } + } R2_GLOBALS._player.enableControl(); } else { // R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850 @@ -11412,7 +11412,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { } _actor8.fixPriority(113); - + if (R2_GLOBALS.getFlag(34)) { _actor8.setDetails(1850, 25, -1, -1, 4, &_actor5); } else { @@ -11435,7 +11435,7 @@ void Scene1850::remove() { R2_GLOBALS._scenePalette._palette[765] = 255; R2_GLOBALS._scenePalette._palette[766] = 255; R2_GLOBALS._scenePalette._palette[767] = 255; - + SceneExt::remove(); } @@ -11447,9 +11447,9 @@ void Scene1850::signal() { _actor1._effect = 6; _actor1._shade = 6; - + R2_GLOBALS._walkRegions.enableRegion(5); - + if (R2_GLOBALS.getFlag(68)) { R2_GLOBALS._player.enableControl(); } else { @@ -11495,7 +11495,7 @@ void Scene1850::signal() { _palette1.loadPalette(1851); _field412 = 1851; } - + _field418 = 1; if (R2_GLOBALS.getFlag(30)) { _actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL); @@ -11511,33 +11511,33 @@ void Scene1850::signal() { R2_GLOBALS.setFlag(62); R2_GLOBALS.setFlag(34); R2_GLOBALS._walkRegions.enableRegion(2); - + _actor2.postInit(); _actor2.setDetails(1850, 6, -1, -1, 5, &_actor5); - + _sceneMode = 1879; _actor8.setAction(&_sequenceManager2, this, 1879, &_actor5, &_actor8, &_actor2, NULL); } else { _actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL); } - + if (R2_GLOBALS.getFlag(34)) R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, NULL); else R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, this); - + if (_field412 == 1851) _field416 = -20; else _field416 = 20; - + _field414 = 20; - + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (_sceneMode == 1879) _sceneMode = 1854; - + if (R2_GLOBALS.getFlag(32)) { setAction(&_sequenceManager1, NULL, 1873, &R2_GLOBALS._player, NULL); } else { @@ -11546,7 +11546,7 @@ void Scene1850::signal() { } else { if (_sceneMode == 1879) _sceneMode = 1855; - + if (R2_GLOBALS.getFlag(32)) { setAction(&_sequenceManager1, NULL, 1874, &R2_GLOBALS._player, NULL); } else { @@ -11583,10 +11583,10 @@ void Scene1850::signal() { PlayerMover *mover = new PlayerMover(); R2_GLOBALS._player.addMover(mover, &_field41A, this); - + _field41A = Common::Point(0, 0); } - + switch (_field41E) { case 1: _sceneMode = 1853; @@ -11608,7 +11608,7 @@ void Scene1850::signal() { default: break; } - + _field41E = 0; break; case 1870: @@ -11632,16 +11632,16 @@ void Scene1850::signal() { } else { _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *)NULL); } - + _actor4.postInit(); _actor4._effect = 6; - + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _actor4.setDetails(1850, 29, -1, -1, 2, (SceneItem *)NULL); } else { _actor4.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); } - + if (R2_GLOBALS.getFlag(31)) { _actor3._shade = 0; _actor4._shade = 0; @@ -11649,12 +11649,12 @@ void Scene1850::signal() { _actor3._shade = 6; _actor4._shade = 6; } - + R2_GLOBALS.clearFlag(30); _sceneMode = 15; setAction(&_sequenceManager1, this, 1869, &R2_GLOBALS._player, &_actor3, NULL); setAction(&_sequenceManager2, this, 1868, &_actor1, &_actor4, NULL); - break; + break; case 1878: R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1850); R2_GLOBALS.setFlag(33); @@ -11678,7 +11678,7 @@ void Scene1850::signal() { } void Scene1850::process(Event &event) { - if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_ARROW) + if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_ARROW) && (R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { _field41A = event.mousePos; R2_GLOBALS._player.disableControl(); @@ -11691,7 +11691,7 @@ void Scene1850::process(Event &event) { R2_GLOBALS.clearFlag(32); event.handled = true; } - + Scene::process(event); } @@ -11700,7 +11700,7 @@ void Scene1850::dispatch() { _field414--; if (_field414 == 0) _field418 = 0; - + if (_field416 >= 0) { R2_GLOBALS._player._shade = (_field414 * 6) / _field416; } else { @@ -11726,12 +11726,12 @@ void Scene1850::dispatch() { if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { _actor2.setPosition(Common::Point(_actor8._position.x + 20, _actor8._position.y - 71)); } - + Scene::dispatch(); } /*-------------------------------------------------------------------------- - * Scene 1875 - + * Scene 1875 - * *--------------------------------------------------------------------------*/ Scene1875::Actor1875::Actor1875() { @@ -11821,7 +11821,7 @@ void Scene1875::Actor1875::subB8271(int indx) { void Scene1875::Actor1875::process(Event &event) { if ((R2_GLOBALS._player._uiEnabled) || (event.handled)) return; - + Scene1875 *scene = (Scene1875 *)R2_GLOBALS._sceneManager._scene; if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_STEPPING_DISKS) && (_bounds.contains(event.mousePos)) && (_fieldA6 == 0)) { @@ -11841,7 +11841,7 @@ void Scene1875::Actor1875::process(Event &event) { _fieldA6 = 1; event.handled = true; } - + if ((event.eventType == EVENT_BUTTON_UP) && (_fieldA6 != 0)) { if ((_fieldA4 == 3) || (_fieldA4 == 4) || (_fieldA4 == 5)) { setStrip(1); @@ -11855,10 +11855,10 @@ void Scene1875::Actor1875::process(Event &event) { void Scene1875::postInit(SceneObjectList *OwnerList) { loadScene(1875); SceneExt::postInit(); - + R2_GLOBALS._player._characterScene[1] = 1875; R2_GLOBALS._player._characterScene[2] = 1875; - + _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); @@ -11867,11 +11867,11 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { _actor6.subB8271(3); _actor7.subB8271(4); _actor8.subB8271(5); - + _actor1.postInit(); _actor1.setup(1855, 4, 1); _actor1.setPosition(Common::Point(160, 116)); - + R2_GLOBALS._player.postInit(); if (R2_GLOBALS._sceneManager._previousScene == 1625) { R2_GLOBALS._sound1.play(122); @@ -11885,10 +11885,10 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; } - + _item2.setDetails(Rect(43, 14, 275, 122), 1875, 9, 1, -1, 1, NULL); _item1.setDetails(Rect(0, 0, 320, 200), 1875, 3, -1, -1, 1, NULL); - + R2_GLOBALS._player._characterScene[1] = 1875; R2_GLOBALS._player._characterScene[2] = 1875; R2_GLOBALS._player._oldCharacterScene[1] = 1875; @@ -11930,7 +11930,7 @@ void Scene1875::signal() { void Scene1875::process(Event &event) { Scene::process(event); - + _actor4.process(event); _actor5.process(event); _actor6.process(event); @@ -11939,7 +11939,7 @@ void Scene1875::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 1900 - + * Scene 1900 - * *--------------------------------------------------------------------------*/ bool Scene1900::Actor2::startAction(CursorType action, Event &event) { @@ -12005,11 +12005,11 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene != 1875) R2_GLOBALS._sound1.play(200); - + _stripManager.setColors(60, 255); _stripManager.setFontNumber(3); _stripManager.addSpeaker(&_seekerSpeaker); - + _exit1.setDetails(Rect(0, 105, 14, 145), R2_COM_SCANNER, 2000); _exit1.setDest(Common::Point(14, 135)); @@ -12027,7 +12027,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { else R2_GLOBALS._player._moveDiff = Common::Point(5, 3); R2_GLOBALS._player.disableControl(); - + if (R2_GLOBALS._sceneManager._previousScene != 1925) R2_GLOBALS.clearFlag(29); @@ -12061,7 +12061,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { _object2.setPosition(Common::Point(223, 109)); _object2.fixPriority(80); } - + if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1875) { R2_GLOBALS._player._characterIndex = R2_QUINN; _actor1.postInit(); @@ -12129,7 +12129,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1900; } - + _item2.setDetails(Rect(77, 2, 240, 103), 1900, 6, -1, -1, 1, NULL); _item1.setDetails(Rect(0, 0, 320, 200), 1900, 3, -1, -1, 1, NULL); } @@ -12242,17 +12242,17 @@ bool Scene1925::Hotspot3::startAction(CursorType action, Event &event) { scene->_sceneMode = 1925; scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, NULL); return true; - } - + } + if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 20) && (event.mousePos.y >= 30)) { scene->_sceneMode = 1931; } else if ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 200) && (event.mousePos.y < 140)) { scene->_sceneMode = 1932; - } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) + } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) || ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110)) ) && (event.mousePos.y >= 100)) { scene->_sceneMode = 1926; - } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) + } else if ( ( ((R2_GLOBALS._player._position.x == 112) && (R2_GLOBALS._player._position.y == 101)) || ((R2_GLOBALS._player._position.x == 154) && (R2_GLOBALS._player._position.y == 110)) ) && (event.mousePos.y < 60)) { scene->_sceneMode = 1927; @@ -12415,7 +12415,7 @@ void Scene1925::postInit(SceneObjectList *OwnerList) { _actor1.setDetails(1925, 0, 1, 2, 1, (SceneItem *) NULL); _item2.setDetails(Rect(133, 68, 140, 77), 1925, 3, -1, 5, 1, NULL); // No break on purpose - case -3: + case -3: _exit3.setDetails(Rect(83, 38, 128, 101), EXITCURSOR_W, 1925); // No break on purpose default: @@ -12510,7 +12510,7 @@ void Scene1925::signal() { } /*-------------------------------------------------------------------------- - * Scene 1945 - + * Scene 1945 - * *--------------------------------------------------------------------------*/ Scene1945::Scene1945() { @@ -12588,7 +12588,7 @@ bool Scene1945::Hotspot4::startAction(CursorType action, Event &event) { R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; } - + if (scene->_sceneMode != 0) scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, NULL); @@ -12822,7 +12822,7 @@ void Scene1945::signal() { } /*-------------------------------------------------------------------------- - * Scene 1950 - + * Scene 1950 - * *--------------------------------------------------------------------------*/ Scene1950::Area1::Area1() { @@ -12831,7 +12831,7 @@ Scene1950::Area1::Area1() { } void Scene1950::Area1::synchronize(Serializer &s) { SceneArea::synchronize(s); - + s.syncAsByte(_field20); s.syncAsSint16LE(_fieldB65); } @@ -12846,7 +12846,7 @@ Scene1950::Scene1950() { void Scene1950::synchronize(Serializer &s) { SceneExt::synchronize(s); - + s.syncAsSint16LE(_field412); s.syncAsSint16LE(_field414); s.syncAsSint16LE(_field416); @@ -12863,7 +12863,7 @@ Scene1950::Area1::Actor10::Actor10() { void Scene1950::Area1::Actor10::synchronize(Serializer &s) { SceneActor::synchronize(s); - + s.syncAsSint16LE(_fieldA4); s.syncAsSint16LE(_fieldA6); s.syncAsSint16LE(_fieldA8); @@ -12925,7 +12925,7 @@ void Scene1950::Area1::remove() { SceneArea::remove(); R2_GLOBALS._insetUp--; // - + if (!R2_GLOBALS.getFlag(37)) R2_GLOBALS._sound2.play(278); @@ -12990,7 +12990,7 @@ void Scene1950::Area1::proc12(int visage, int stripFrameNum, int frameNum, int p _areaActor.fixPriority(248); scene->_exit3._enabled = false; proc13(1950, 27, 28, 27); - + for (_fieldB65 = 0; _fieldB65 < 16; _fieldB65++) _arrActor1[_fieldB65].init(_fieldB65); } @@ -13068,7 +13068,7 @@ Scene1950::Actor8::Actor8() { void Scene1950::Actor8::synchronize(Serializer &s) { SceneActor::synchronize(s); - + s.syncAsSint16LE(_fieldA4); s.syncAsSint16LE(_fieldA6); s.syncAsSint16LE(_fieldA8); @@ -13111,7 +13111,7 @@ void Scene1950::Actor8::signal() { _fieldA6 = _position.y -4; setVisage(1961); - + if (R2_GLOBALS._v566A5 == 3) setStrip(2); else @@ -13155,7 +13155,7 @@ void Scene1950::Actor8::signal() { for (_fieldAF = 0; _fieldAF < 18; ++_fieldAF) if (R2_GLOBALS._v56613[4 * _fieldAF] == 0) ++_fieldAE; - + if (_fieldAE == 18) { R2_GLOBALS.setFlag(36); _fieldAC = 23; @@ -13197,14 +13197,14 @@ bool Scene1950::Actor8::startAction(CursorType action, Event &event) { if ((R2_GLOBALS._v56613[(scene->_field41C - 1) * 4] == 0) || (action != R2_PHOTON_STUNNER)) return SceneActor::startAction(action, event); - + R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1] <= 1) _fieldAC = 21; else _fieldAC = 20; - + R2_GLOBALS._player.setVisage(25); if (R2_GLOBALS._v566A5 == 3) R2_GLOBALS._player.setStrip(2); @@ -13212,7 +13212,7 @@ bool Scene1950::Actor8::startAction(CursorType action, Event &event) { R2_GLOBALS._player.setStrip(1); R2_GLOBALS._player.animate(ANIM_MODE_5, this); R2_GLOBALS._sound3.play(99); - + return true; } @@ -13305,7 +13305,7 @@ void Scene1950::Exit6::changeScene() { Common::Point pt(-20, 160); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); - } else { + } else { if (!R2_GLOBALS.getFlag(36)) SceneItem::display(1950, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); if ((R2_INVENTORY.getObjectScene(34) == 1950) || (R2_INVENTORY.getObjectScene(35) == 1950)) @@ -13612,7 +13612,7 @@ void Scene1950::subBDC1E() { default: break; } - + if (R2_GLOBALS._v566A4 != 1) R2_GLOBALS._walkRegions.load(1950); @@ -13806,11 +13806,11 @@ void Scene1950::subBDC1E() { R2_GLOBALS._walkRegions.enableRegion(13); break; } - + _object1.remove(); _object1.removeObject(); _actor1.remove(); - + switch (R2_GLOBALS._v566A4 - 4) { case 0: // No break on purpose @@ -13934,7 +13934,7 @@ void Scene1950::subBDC1E() { _actor1.fixPriority(220); break; } - + switch (R2_GLOBALS._v566A4 - 3) { case 0: // No break on purpose @@ -14162,7 +14162,7 @@ void Scene1950::subBE59B() { _actor6.setFrame(1); _actor6.setPosition(Common::Point(193, 158)); _actor6.setDetails(1950, 3, 4, 5, 2, (SceneItem *) NULL); - + _actor7.postInit(); _actor7.setVisage(1970); _actor7.setStrip(3); @@ -14172,7 +14172,7 @@ void Scene1950::subBE59B() { _actor7.fixPriority(159); _item2.setDetails(Rect(188, 124, 199, 133), 1950, 27, 28, -1, 2, NULL); - + if (R2_INVENTORY.getObjectScene(34) == 1950) { _actor5.postInit(); _actor5.setVisage(1970); @@ -14180,7 +14180,7 @@ void Scene1950::subBE59B() { _actor5.setFrame(2); _actor5.fixPriority(160); } - + if (R2_GLOBALS.getFlag(37)) { _actor5.setPosition(Common::Point(192, 118)); _actor5.setDetails(1950, 9, 4, -1, 2, (SceneItem *) NULL); @@ -14193,11 +14193,11 @@ void Scene1950::subBE59B() { _actor4.setPosition(Common::Point(192, 121)); _actor4.fixPriority(159); _actor4.setDetails(1950, 6, 7, 8, 2, (SceneItem *) NULL); - + _actor5.setPosition(Common::Point(192, 109)); _actor5.setDetails(1950, 9, 7, 8, 2, (SceneItem *) NULL); } - + _actor3.postInit(); _actor3.setVisage(1972); _actor3.setStrip(1); @@ -14208,7 +14208,7 @@ void Scene1950::subBE59B() { _actor3.setFrame(2); else _actor3.setFrame(1); - + _field414 = 1; } else if (_field414 != 0) { _actor6.remove(); @@ -14219,7 +14219,7 @@ void Scene1950::subBE59B() { _item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 2, NULL); } - + switch (R2_GLOBALS._v566A5) { case 0: _sceneMode = 1950; @@ -14263,7 +14263,7 @@ void Scene1950::subBE59B() { _actor8.setStrip(2); NpcMover *mover = new NpcMover(); _actor8.addMover(mover, &_field418, this); - + R2_GLOBALS._player.setPosition(Common::Point(-20, 160)); Common::Point pt2(30, 160); NpcMover *mover2 = new NpcMover(); @@ -14311,11 +14311,11 @@ void Scene1950::subBE59B() { R2_GLOBALS._v56AAB = 0; R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; - + _actor8.setStrip(1); NpcMover *mover = new NpcMover(); _actor8.addMover(mover, &_field418, this); - + R2_GLOBALS._player.setPosition(Common::Point(340, 160)); Common::Point pt2(289, 160); NpcMover *mover2 = new NpcMover(); @@ -14335,7 +14335,7 @@ void Scene1950::subBF4B4(int indx) { si = 3; } else si = 4; - + if (_area1._arrActor1[si]._fieldA8 == 0) { _area1._arrActor1[si].setFrame(2); _area1._arrActor1[si]._fieldA8 = 1; @@ -14343,14 +14343,14 @@ void Scene1950::subBF4B4(int indx) { _area1._arrActor1[si].setFrame(1); _area1._arrActor1[si]._fieldA8 = 0; } - + si = indx + 1; if ((indx / 4) == (si / 4)) { if (si > 15) si = 12; } else si -= 4; - + if (_area1._arrActor1[si]._fieldA8 == 0) { _area1._arrActor1[si].setFrame(2); _area1._arrActor1[si]._fieldA8 = 1; @@ -14358,7 +14358,7 @@ void Scene1950::subBF4B4(int indx) { _area1._arrActor1[si].setFrame(1); _area1._arrActor1[si]._fieldA8 = 0; } - + si = indx - 4; if (si < 0) si += 16; @@ -14370,7 +14370,7 @@ void Scene1950::subBF4B4(int indx) { _area1._arrActor1[si].setFrame(1); _area1._arrActor1[si]._fieldA8 = 0; } - + si = indx + 4; if (si > 15) si -= 16; @@ -14395,7 +14395,7 @@ void Scene1950::subBF4B4(int indx) { } else { R2_GLOBALS.setFlag(37); _sceneMode = 24; - // TODO: check if correct. The original doesn't countain a sceneActor in + // TODO: check if correct. The original doesn't countain a sceneActor in // this call, but it's extremely unusual setAction(&_sequenceManager, this, 1976, NULL); } @@ -14408,45 +14408,45 @@ void Scene1950::postInit(SceneObjectList *OwnerList) { _field41C = 0; if (R2_GLOBALS._sceneManager._previousScene == 300) R2_GLOBALS._v566A4 = 103; - + subBDC1E(); SceneExt::postInit(); R2_GLOBALS._sound1.play(105); _exit1.setDetails(Rect(130, 46, 189, 135), SHADECURSOR_UP, 1950); _exit1.setDest(Common::Point(160, 145)); - + _exit2.setDetails(Rect(208, 0, 255, 73), EXITCURSOR_N, 1950); _exit2.setDest(Common::Point(200, 151)); - + _exit3.setDetails(Rect(305, 95, 320, 147), EXITCURSOR_E, 1950); _exit3.setDest(Common::Point(312, 160)); - + _exit4.setDetails(Rect(208, 99, 255, 143), EXITCURSOR_S, 1950); _exit4.setDest(Common::Point(200, 151)); - + _exit5.setDetails(Rect(113, 154, 206, 168), SHADECURSOR_DOWN, 1950); _exit5.setDest(Common::Point(160, 165)); - + _exit6.setDetails(Rect(0, 95, 14, 147), EXITCURSOR_W, 1950); _exit6.setDest(Common::Point(7, 160)); - + _exit7.setDetails(Rect(72, 54, 120, 128), EXITCURSOR_NW, 1950); _exit7.setDest(Common::Point(120, 140)); - + _exit8.setDetails(Rect(258, 60, 300, 145), EXITCURSOR_NE, 1950); _exit8.setDest(Common::Point(268, 149)); - + R2_GLOBALS._player.postInit(); - if ( (R2_INVENTORY.getObjectScene(32) == 0) && (R2_INVENTORY.getObjectScene(33) == 0) + if ( (R2_INVENTORY.getObjectScene(32) == 0) && (R2_INVENTORY.getObjectScene(33) == 0) && (R2_INVENTORY.getObjectScene(46) == 0) && (!R2_GLOBALS.getFlag(36)) ) R2_GLOBALS._player.setVisage(22); else R2_GLOBALS._player.setVisage(20); - + R2_GLOBALS._player._moveDiff = Common::Point(5, 3); _item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 1, NULL); - + subBE59B(); } @@ -14578,7 +14578,7 @@ void Scene1950::signal() { R2_GLOBALS._player.setVisage(20); else R2_GLOBALS._player.setVisage(22); - + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); Common::Point pt(218, 165); NpcMover *mover = new NpcMover(); @@ -14593,7 +14593,7 @@ void Scene1950::signal() { R2_GLOBALS._player.setVisage(20); else R2_GLOBALS._player.setVisage(22); - R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); break; default: R2_GLOBALS._v56AAB = 0; @@ -14604,7 +14604,7 @@ void Scene1950::signal() { void Scene1950::process(Event &event) { if ( (event.eventType == EVENT_BUTTON_DOWN) - && (R2_GLOBALS._player._uiEnabled) + && (R2_GLOBALS._player._uiEnabled) && (R2_GLOBALS._events.getCursor() == R2_LIGHT_BULB) && (R2_GLOBALS._player._bounds.contains(event.mousePos)) && (R2_INVENTORY.getObjectScene(31) == 0)) { diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 5906030c5f..f65a89972d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -142,7 +142,7 @@ class Scene1200 : public SceneExt { virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY); virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; - + public: NamedHotspot _item1; SceneActor _actor1; @@ -567,7 +567,7 @@ class Scene1575 : public SceneExt { public: int _field34; int _field36; - + Hotspot1(); void synchronize(Serializer &s); void subA910D(int indx); @@ -750,7 +750,7 @@ public: Exit2 _exit2; Exit3 _exit3; SequenceManager _sequenceManager; - + int _field77A; int _field77C; @@ -772,7 +772,7 @@ class Scene1750 : public SceneExt { int _fieldAA; int _fieldAC; int _fieldAE; - + Actor4(); virtual void synchronize(Serializer &s); void subB1A76(int arg1, int arg2, int arg3, int arg4, int arg5); @@ -782,11 +782,11 @@ class Scene1750 : public SceneExt { virtual void process(Event &event); virtual bool startAction(CursorType action, Event &event); }; - + class Actor5 : public SceneActor { public: int _fieldA4; - + Actor5(); virtual void synchronize(Serializer &s); @@ -845,7 +845,7 @@ class Scene1800 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - + class Exit1 : public SceneExit { public: virtual void changeScene(); @@ -897,7 +897,7 @@ class Scene1850 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - + public: int _field412; int _field414; @@ -936,11 +936,11 @@ class Scene1875 : public SceneExt { public: int _fieldA4; int _fieldA6; - + Actor1875(); void subB84AB(); void subB8271(int indx); - + void synchronize(Serializer &s); virtual void process(Event &event); }; diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 5567519046..6a030e5b44 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -261,7 +261,7 @@ void Scene2000::initExits() { _mazePlayerMode = 0; } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) _mazePlayerMode = 1; - else + else _mazePlayerMode = 10; R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; R2_GLOBALS._sceneManager._previousScene = 2000; @@ -422,12 +422,12 @@ void Scene2000::Action1::signal() { default: break; } - + if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) scene->_objList1[_state].show(); else scene->_objList1[_state].hide(); - + signal(); break; case 5: { @@ -783,7 +783,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(200); initExits(); g_globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE; - + R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -1003,9 +1003,9 @@ void Scene2000::signal() { } void Scene2000::process(Event &event) { - if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && + if ((R2_GLOBALS._player._canWalk) && (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)) { - + Common::Point pt(event.mousePos.x, 129); PlayerMover *mover = new PlayerMover(); R2_GLOBALS._player.addMover(mover, &pt, this); @@ -1048,7 +1048,7 @@ bool Scene2350::Actor3::startAction(CursorType action, Event &event) { void Scene2350::ExitUp::changeScene() { Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; - + R2_GLOBALS._player.disableControl(CURSOR_CROSSHAIRS); scene->_sceneMode = 12; if (R2_GLOBALS._player._characterIndex == 1) @@ -1056,7 +1056,7 @@ void Scene2350::ExitUp::changeScene() { else scene->setAction(&scene->_sequenceManager, scene, 2352, &R2_GLOBALS._player, NULL); } - + void Scene2350::ExitWest::changeScene() { Scene2350 *scene = (Scene2350 *)R2_GLOBALS._sceneManager._scene; @@ -1129,7 +1129,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 34) { if (R2_GLOBALS._player._characterIndex == 1) _sceneMode = 2351; - else + else _sceneMode = 2353; setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, NULL); } else { @@ -1147,7 +1147,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2350; } - + void Scene2350::remove() { R2_GLOBALS._sound1.fadeOut(NULL); SceneExt::remove(); @@ -1189,7 +1189,7 @@ void Scene2350::signal() { } void Scene2350::process(Event &event) { - if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) && + if ((R2_GLOBALS._player._canWalk) && (event.eventType != EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_CROSSHAIRS)){ Common::Point pt(event.mousePos.x, 129); PlayerMover *mover = new PlayerMover(); @@ -1205,7 +1205,7 @@ void Scene2350::process(Event &event) { *--------------------------------------------------------------------------*/ void Scene2400::Exit1::changeScene() { Scene2400 *scene = (Scene2400 *)R2_GLOBALS._sceneManager._scene; - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -1214,7 +1214,7 @@ void Scene2400::Exit1::changeScene() { R2_GLOBALS._player.addMover(mover, &pt, scene); } - + void Scene2400::Exit2::changeScene() { Scene2400 *scene = (Scene2400 *)R2_GLOBALS._sceneManager._scene; @@ -1244,7 +1244,7 @@ void Scene2400::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager, this, 2401, &R2_GLOBALS._player, NULL); } } - + void Scene2400::signal() { switch (_sceneMode) { case 10: @@ -1339,7 +1339,7 @@ bool Scene2425::Actor1::startAction(CursorType action, Event &event) { } } else if (R2_GLOBALS._events.getCursor() == R2_GUNPOWDER) return false; - else + else return SceneActor::startAction(action, event); } @@ -1405,7 +1405,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { _actor1.setup(2426, 1, 1); else _actor1.setup(2426, 1, 2); - + _actor1.setPosition(Common::Point(290, 9)); _actor1.fixPriority(20); _actor1.setDetails(2455, 12, -1, -1, 1, (SceneItem *)NULL); @@ -1511,7 +1511,7 @@ bool Scene2430::Actor3::startAction(CursorType action, Event &event) { void Scene2430::Exit1::changeScene() { Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene; - + scene->_sceneMode = 0; R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); R2_GLOBALS._player.disableControl(); @@ -1790,7 +1790,7 @@ bool Scene2440::Actor2::startAction(CursorType action, Event &event) { scene->_sceneMode = 2440; scene->setAction(&scene->_sequenceManager, scene, 2440, &R2_GLOBALS._player, &scene->_actor2, NULL); return true; - } + } return SceneActor::startAction(action, event); } @@ -2296,7 +2296,7 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { _actor1.setup(2456, 3, 3); _actor1.setPosition(Common::Point(162, 165)); _actor1.setDetails(2455, 15, 1, -1, 1, (SceneItem *)NULL); - } + } } else { _actor3.postInit(); _actor3.setup(2456, 3, 1); @@ -2309,9 +2309,9 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { _actor2.setup(2456, 3, 2); _actor2.setDetails(2455, 9, 1, -1, 1, (SceneItem *)NULL); } else { - if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455)) + if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455)) _actor2.setup(2455, 1, 1); - else + else _actor2.setup(2456, 1, 1); _actor2.setDetails(2455, 3, 1, -1, 1, (SceneItem *)NULL); } @@ -3679,7 +3679,7 @@ void Scene2700::process(Event &event) { break; } } - } + } } Scene::process(event); } @@ -4184,7 +4184,7 @@ bool Scene2800::Actor1::startAction(CursorType action, Event &event) { scene->_sceneMode = 10; scene->setAction(&scene->_sequenceManager, scene, 2802, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor1, NULL); return true; - } else + } else return SceneActor::startAction(action, event); } @@ -4432,7 +4432,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) { _actor1.animate(ANIM_MODE_NONE, NULL); _actor1.setDetails(2800, -1, -1, -1, 1, (SceneItem *)NULL); } - + _item1.setDetails(Rect(0, 0, 320, 200), 2800, -1, -1, -1, 1, NULL); _stripManager.setColors(60, 255); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 2b97cba8e9..3dd566c900 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -30,7 +30,7 @@ namespace TsAGE { namespace Ringworld2 { /*-------------------------------------------------------------------------- - * Scene 3100 - + * Scene 3100 - * *--------------------------------------------------------------------------*/ Scene3100::Scene3100() { @@ -131,7 +131,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { _guard.changeZoom(50); _guard.setPosition(Common::Point(10, 149)); _guard.setDetails(3100, 6, -1, -1, 2, (SceneItem *)NULL); - + _actor4.postInit(); _actor4.setup(3103, 1, 1); _actor4.setPosition(Common::Point(278, 113)); @@ -152,7 +152,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(243); } - + R2_GLOBALS._player._oldCharacterScene[1] = 3100; } @@ -322,7 +322,7 @@ void Scene3125::postInit(SceneObjectList *OwnerList) { _actor4.setup(3126, 1, 1); _actor4.setPosition(Common::Point(171, 160)); _actor4.fixPriority(201); - + _item3.setDetails(12, 3125, 9, 13, -1); _item2.setDetails(11, 3125, 15, 13, -1); _item1.setDetails(Rect(0, 0, 320, 200), 3125, 0, 1, 2, 1, NULL); @@ -442,7 +442,7 @@ bool Scene3150::Actor4::startAction(CursorType action, Event &event) { case CURSOR_USE: if (R2_GLOBALS.getFlag(75)) return SceneActor::startAction(action, event); - + R2_GLOBALS._player.disableControl(); scene->_sceneMode = 3151; scene->setAction(&scene->_sequenceManager, scene, 3151, &R2_GLOBALS._player, &scene->_actor4, NULL); @@ -504,7 +504,7 @@ bool Scene3150::Actor7::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager, scene, 3160, &R2_GLOBALS._player, &scene->_actor7, NULL); return true; } - + return SceneActor::startAction(action, event); } @@ -554,7 +554,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player.disableControl(); - + _actor2.postInit(); _actor2.setPosition(Common::Point(64, 139)); if (R2_GLOBALS.getFlag(78)) { @@ -686,7 +686,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor5.postInit(); _actor5._effect = 6; _actor5._shade = 3; - + setAction(&_sequenceManager, this, 3156, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor5, NULL); } else { if (R2_GLOBALS._v56AA0 != 2) @@ -1699,7 +1699,7 @@ void Scene3350::signal() { } /*-------------------------------------------------------------------------- - * Scene 3375 - + * Scene 3375 - * *--------------------------------------------------------------------------*/ Scene3375::Scene3375() { @@ -1799,13 +1799,13 @@ bool Scene3375::Actor1::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; if (R2_GLOBALS._player._characterIndex == 2) scene->_stripManager.start(3302, scene); else scene->_stripManager.start(3304, scene); - + return true; } @@ -1814,13 +1814,13 @@ bool Scene3375::Actor2::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; if (R2_GLOBALS._player._characterIndex == 3) scene->_stripManager.start(3302, scene); else scene->_stripManager.start(3301, scene); - + return true; } @@ -1829,10 +1829,10 @@ bool Scene3375::Actor3::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; scene->_stripManager.start(3303, scene); - + return true; } @@ -1841,7 +1841,7 @@ bool Scene3375::Actor4::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); - + if (R2_GLOBALS._v56A9E != 0) { R2_GLOBALS._walkRegions.disableRegion(2); R2_GLOBALS._walkRegions.disableRegion(3); @@ -1855,10 +1855,10 @@ bool Scene3375::Actor4::startAction(CursorType action, Event &event) { R2_GLOBALS._walkRegions.disableRegion(8); R2_GLOBALS._player.disableControl(CURSOR_ARROW); - + scene->_sceneMode = 3375; scene->setAction(&scene->_sequenceManager, scene, 3375, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL); - + return true; } @@ -1944,10 +1944,10 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _field148A[1] = 3377; _field148A[2] = 3375; _field148A[3] = 3378; - + loadScene(_field148A[R2_GLOBALS._v56A9E]); SceneExt::postInit(); - + R2_GLOBALS._sound1.play(313); _stripManager.setColors(60, 255); @@ -1963,14 +1963,14 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { setZoomPercents(126, 55, 200, 167); R2_GLOBALS._player.postInit(); - + if (R2_GLOBALS._player._characterIndex == 2) { R2_GLOBALS._player._moveDiff = Common::Point(5, 3); } else { R2_GLOBALS._player._moveDiff = Common::Point(3, 2); } R2_GLOBALS._player.changeZoom(-1); - + switch (R2_GLOBALS._player._characterIndex) { case 2: if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -1991,7 +1991,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setup(10, 3, 1); break; } - + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); @@ -2005,21 +2005,21 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { } _actor1.changeZoom(-1); _actor1._effect = 1; - + int tmpStrip, tmpVisage; if (R2_GLOBALS._sceneManager._previousScene == 3385) tmpStrip = 1; else tmpStrip = 4; - + if (R2_GLOBALS._player._characterIndex == 2) tmpVisage = 10; else tmpVisage = 20; - + _actor1.setup(tmpVisage, tmpStrip, 1); _actor1.animate(ANIM_MODE_1, NULL); - + _actor2.postInit(); _actor2._moveDiff = Common::Point(3, 2); _actor2.changeZoom(-1); @@ -2033,10 +2033,10 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { tmpVisage = 10; else tmpVisage = 30; - + _actor2.setup(tmpVisage, tmpStrip, 1); _actor2.animate(ANIM_MODE_1, NULL); - + _actor3.postInit(); _actor3._moveRate = 7; _actor3._moveDiff = Common::Point(5, 3); @@ -2049,34 +2049,34 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _actor3.setup(40, tmpStrip, 1); _actor3.animate(ANIM_MODE_1, NULL); - + _actor2.setDetails(3375, -1, -1, -1, 1, (SceneItem *)NULL); _actor3.setDetails(3375, 21, -1, -1, 1, (SceneItem *)NULL); _actor1.setDetails(3375, -1, -1, -1, 1, (SceneItem *)NULL); - + _actor4.postInit(); _actor4.setup(3375, 1, 1); _actor4.setPosition(Common::Point(254, 166)); _actor4.fixPriority(140); _actor4.hide(); - + _exit1.setDetails(Rect(0, 84, 24, 167), EXITCURSOR_W, 3375); _exit1.setDest(Common::Point(65, 155)); _exit2.setDetails(Rect(103, 152, 183, 170), SHADECURSOR_DOWN, 3375); _exit2.setDest(Common::Point(158, 151)); _exit3.setDetails(Rect(180, 75, 213, 132), EXITCURSOR_E, 3375); _exit3.setDest(Common::Point(201, 131)); - + for (int i = 0; i <= 12; ++i) _itemArray[i].setDetails(i, 3375, 3, -1, -1); - + _item1.setDetails(Rect(0, 0, 320, 200), 3375, 0, -1, 1, 1, NULL); if (R2_GLOBALS._sceneManager._previousScene == 3385) _sceneMode = 3379; else _sceneMode = 0; - + subFC696(_sceneMode); } @@ -2186,7 +2186,7 @@ void Scene3375::dispatch() { } /*-------------------------------------------------------------------------- - * Scene 3385 - + * Scene 3385 - * *--------------------------------------------------------------------------*/ Scene3385::Scene3385() { @@ -2204,13 +2204,13 @@ bool Scene3385::Actor1::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; if (R2_GLOBALS._player._characterIndex == 2) scene->_stripManager.start(3302, scene); else scene->_stripManager.start(3304, scene); - + return true; } @@ -2219,13 +2219,13 @@ bool Scene3385::Actor2::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; if (R2_GLOBALS._player._characterIndex == 3) scene->_stripManager.start(3302, scene); else scene->_stripManager.start(3301, scene); - + return true; } @@ -2234,10 +2234,10 @@ bool Scene3385::Actor3::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; scene->_stripManager.start(3303, scene); - + return true; } @@ -2253,7 +2253,7 @@ bool Scene3385::Actor4::startAction(CursorType action, Event &event) { scene->_sceneMode = 3386; scene->setAction(&scene->_sequenceManager, scene, 3386, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL); - + return true; } @@ -2303,21 +2303,21 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { setZoomPercents(102, 40, 200, 160); R2_GLOBALS._player.postInit(); - + if (R2_GLOBALS._player._characterIndex == 2) R2_GLOBALS._player._moveDiff = Common::Point(5, 3); else R2_GLOBALS._player._moveDiff = Common::Point(3, 2); R2_GLOBALS._player.changeZoom(-1); - + if (R2_GLOBALS._player._characterIndex == 2) R2_GLOBALS._player.setup(20, _field11B2, 1); else if (R2_GLOBALS._player._characterIndex == 3) R2_GLOBALS._player.setup(30, _field11B2, 1); else R2_GLOBALS._player.setup(10, _field11B2, 1); - + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); @@ -2337,7 +2337,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _actor1.setup(20, _field11B2, 1); _actor1.animate(ANIM_MODE_1, NULL); _actor1.setDetails(3385, -1, -1, -1, 1, (SceneItem *) NULL); - + _actor2.postInit(); _actor2._moveDiff = Common::Point(3, 2); _actor2.changeZoom(-1); @@ -2356,15 +2356,15 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _actor3.setup(40, _field11B2, 1); _actor3.animate(ANIM_MODE_1, NULL); _actor3.setDetails(3385, 15, -1, -1, 1, (SceneItem *) NULL); - + _exit1.setDetails(Rect(103, 152, 217, 170), SHADECURSOR_DOWN, 3395); _exit1.setDest(Common::Point(158, 151)); - + _actor4.postInit(); _actor4.setPosition(Common::Point(160, 100)); _actor4.fixPriority(90); _actor4.setDetails(3385, 3, 4, -1, 1, (SceneItem *) NULL); - + if (R2_GLOBALS._sceneManager._previousScene == 3375) { R2_GLOBALS._player.setPosition(Common::Point(158, 102)); _actor1.setPosition(Common::Point(164, 100)); @@ -2385,7 +2385,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _actor4.setup(3385, 1, 1); _sceneMode = 3385; setAction(&_sequenceManager, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_actor2, &_actor3, NULL); - } + } _item1.setDetails(Rect(0, 0, 320, 200), 3385, 0, -1, -1, 1, NULL); R2_GLOBALS._v56A9E = 0; @@ -2418,7 +2418,7 @@ void Scene3385::signal() { } /*-------------------------------------------------------------------------- - * Scene 3395 - + * Scene 3395 - * *--------------------------------------------------------------------------*/ Scene3395::Scene3395() { @@ -2436,13 +2436,13 @@ bool Scene3395::Actor1::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; if (R2_GLOBALS._player._characterIndex == 2) scene->_stripManager.start(3302, scene); else scene->_stripManager.start(3304, scene); - + return true; } @@ -2451,13 +2451,13 @@ bool Scene3395::Actor2::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; if (R2_GLOBALS._player._characterIndex == 3) scene->_stripManager.start(3302, scene); else scene->_stripManager.start(3301, scene); - + return true; } @@ -2466,10 +2466,10 @@ bool Scene3395::Actor3::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); - + scene->_sceneMode = 9999; scene->_stripManager.start(3303, scene); - + return true; } @@ -2485,7 +2485,7 @@ bool Scene3395::Actor4::startAction(CursorType action, Event &event) { scene->_sceneMode = 3396; scene->setAction(&scene->_sequenceManager, scene, 3396, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL); - + return true; } @@ -2523,21 +2523,21 @@ void Scene3395::postInit(SceneObjectList *OwnerList) { setZoomPercents(51, 40, 200, 137); R2_GLOBALS._player.postInit(); - + if (R2_GLOBALS._player._characterIndex == 2) R2_GLOBALS._player._moveDiff = Common::Point(5, 3); else R2_GLOBALS._player._moveDiff = Common::Point(3, 2); R2_GLOBALS._player.changeZoom(-1); - + if (R2_GLOBALS._player._characterIndex == 2) R2_GLOBALS._player.setup(20, _field142E, 1); else if (R2_GLOBALS._player._characterIndex == 3) R2_GLOBALS._player.setup(30, _field142E, 1); else R2_GLOBALS._player.setup(10, _field142E, 1); - + R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); @@ -2576,7 +2576,7 @@ void Scene3395::postInit(SceneObjectList *OwnerList) { _actor3.setup(40, _field142E, 1); _actor3.animate(ANIM_MODE_1, NULL); _actor3.setDetails(3385, 18, -1, -1, 1, (SceneItem *) NULL); - + _actor4.postInit(); _actor4.setPosition(Common::Point(159, 50)); _actor4.fixPriority(40); @@ -2638,7 +2638,7 @@ void Scene3395::signal() { } /*-------------------------------------------------------------------------- - * Scene 3400 - + * Scene 3400 - * *--------------------------------------------------------------------------*/ Scene3400::Scene3400() { @@ -2802,7 +2802,7 @@ void Scene3400::signal() { _sceneMode = 3403; if (R2_GLOBALS._player._characterIndex == 2) setAction(&_sequenceManager, this, 3403, &R2_GLOBALS._player, &_actor3, &_actor7, NULL); - else + else setAction(&_sequenceManager, this, 3403, &_actor1, &_actor3, &_actor7, NULL); break; case 3309: @@ -2811,7 +2811,7 @@ void Scene3400::signal() { _sceneMode = 3405; if (R2_GLOBALS._player._characterIndex == 3) setAction(&_sequenceManager, this, 3405, &R2_GLOBALS._player, &_actor7, NULL); - else + else setAction(&_sequenceManager, this, 3405, &_actor2, &_actor7, NULL); break; case 3310: @@ -2885,7 +2885,7 @@ void Scene3400::signal() { } /*-------------------------------------------------------------------------- - * Scene 3500 - + * Scene 3500 - * *--------------------------------------------------------------------------*/ Scene3500::Action1::Action1() { @@ -2910,10 +2910,10 @@ void Scene3500::Action1::sub108670(int arg1) { _field1E = arg1; _field20 = 1; _field24 = 1; - + scene->_actor9.setStrip(2); scene->_actor9.show(); - + if (_field1E == 1) scene->_actor6.show(); else @@ -2954,7 +2954,7 @@ void Scene3500::Action1::sub108732(int arg1) { Common::Point pt(160, 73); NpcMover *mover = new NpcMover(); scene->_actor8.addMover(mover, &pt, NULL); - + scene->_fieldB9E = 160 - (_field1E * 2 * 160); Common::Point pt2(scene->_fieldB9E, 73); NpcMover *mover2 = new NpcMover(); @@ -3153,7 +3153,7 @@ void Scene3500::sub107F71(int arg1) { _action1.signal(); } else if (_action == 0) { _action1.sub108670(1); - setAction(&_action1, &_actor1, NULL); + setAction(&_action1, &_actor1, NULL); } break; case 104: @@ -3177,7 +3177,7 @@ void Scene3500::sub107F71(int arg1) { _action1.signal(); } else if (_action == 0) { _action1.sub108670(-1); - setAction(&_action1, &_actor1, NULL); + setAction(&_action1, &_actor1, NULL); } break; default: @@ -3221,16 +3221,16 @@ void Scene3500::Action1::signal() { int var4 = scene->_unkObj1.sub1097EF(scene->_field127C + 46) - 46; int di = abs(var2 - scene->_field127A); int var6 = abs(var4 - scene->_field127C); - + if ((scene->_actor1._frame % 2) != 0) { scene->_actor1._frameChange = _field1E; scene->_actor1.setFrame(scene->_actor1.changeFrame()); } int var8 = (scene->_action1._field1E * 2 + scene->_field1276); - if (var8 > 7) + if (var8 > 7) var8 = 1; - else if (var8 < 1) + else if (var8 < 1) var8 = 7; switch (var8) { @@ -3293,7 +3293,7 @@ void Scene3500::Action1::signal() { Common::Point pt(scene->_fieldAF8, 73); NpcMover *mover = new NpcMover(); scene->_actor8.addMover(mover, &pt, this); - + scene->_actor9.setPosition(Common::Point(160 + ((_field1E * 2) * 160), 73));; scene->_actor9._moveDiff.x = 160 - scene->_field126E; scene->_fieldB9E = 160; @@ -3315,7 +3315,7 @@ void Scene3500::Action1::signal() { else scene->_actor8.setStrip(2); scene->_actor8.fixPriority(1); - + scene->_actor9.setPosition(Common::Point(-160, 73)); scene->_actor9.setStrip(9); scene->_actor9.fixPriority(11); @@ -3343,12 +3343,12 @@ void Scene3500::Action1::signal() { // The following code allows the switch to work properly. warning("Checkme: fix for dead code"); int var_8 = (_field1E * 2 + scene->_field1276); - if (var_8 > 7) + if (var_8 > 7) var_8 = 1; - else if (var_8 < 1) + else if (var_8 < 1) var_8 = 7; // - + switch (var_8 - 1) { case 0: // No break on purpose @@ -3378,7 +3378,7 @@ void Scene3500::Action1::signal() { Common::Point pt(160, 73); NpcMover *mover = new NpcMover(); scene->_actor8.addMover(mover, &pt, NULL); - + scene->_fieldB9E = 160 - (_field1E * 2 * 160); Common::Point pt2(scene->_fieldB9E, 73); NpcMover *mover2 = new NpcMover(); @@ -3419,7 +3419,7 @@ void Scene3500::Action1::dispatch() { if ((_actionIndex == 1) && (scene->_field126E <= 4)) { scene->_rotation->_idxChange = 0; signal(); - } + } } void Scene3500::Action2::sub10831F(int arg1) { @@ -3451,12 +3451,12 @@ void Scene3500::Action2::signal() { scene->_fieldB9E = scene->_actor9._position.y; di = scene->_fieldB9E; } - + scene->_actor8._moveDiff.y = 9 - (scene->_field126E / 2); Common::Point pt(si, 73 - (_field1E * 12)); NpcMover *mover = new NpcMover(); scene->_actor8.addMover(mover, &pt, NULL); - + scene->_actor9._moveDiff.y = 9 - (scene->_field126E / 2); Common::Point pt2(di, 73 - (_field1E * 12)); NpcMover *mover2 = new NpcMover(); @@ -3474,7 +3474,7 @@ void Scene3500::Action2::signal() { si = scene->_actor8._position.x; di = scene->_actor9._position.x; } - + scene->_actor7.sub1094ED(); scene->_actor8._moveDiff.y = 9 - (scene->_field126E / 2); @@ -3486,7 +3486,7 @@ void Scene3500::Action2::signal() { Common::Point pt2(di, 73); NpcMover *mover2 = new NpcMover(); scene->_actor9.addMover(mover2, &pt2, NULL); - + scene->_actor3.setFrame2(2); } break; @@ -3500,13 +3500,13 @@ bool Scene3500::Item4::startAction(CursorType action, Event &event) { if (scene->_field1286 == 0) return true; - + if (scene->_field1286 != 4) return SceneHotspot::startAction(action, event); - + R2_GLOBALS._sound2.play(14); scene->sub107F71(_field34); - + return true; } @@ -3515,22 +3515,22 @@ void Scene3500::Actor7::process(Event &event) { if (scene->_field1286 == 0) return; - + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos))) { _fieldAE = 1 + event.mousePos.y - _position.y; event.eventType = EVENT_NONE; } - + if ((event.eventType == EVENT_BUTTON_UP) && (_fieldAE != 0)) { _fieldAE = 0; event.handled = true; if (scene->_action1._field24 == 0) sub1094ED(); } - + if (_fieldAE == 0) return; - + R2_GLOBALS._sound2.play(338); event.handled = true; @@ -3550,10 +3550,10 @@ bool Scene3500::Actor7::startAction(CursorType action, Event &event) { if (scene->_field1286 == 0) return true; - + if (scene->_field1286 == 4) return false; - + return SceneActor::startAction(action, event); } @@ -3586,7 +3586,7 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { if (tmpIndex > 254) tmpIndex--; - + tmpPal[3 * i] = R2_GLOBALS._scenePalette._palette[3 * tmpIndex]; tmpPal[(3 * i) + 1] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 1]; tmpPal[(3 * i) + 2] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 2]; @@ -3597,7 +3597,7 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._scenePalette._palette[(3 * i) + 1] = tmpPal[(3 * i) + 1]; R2_GLOBALS._scenePalette._palette[(3 * i) + 2] = tmpPal[(3 * i) + 2]; } - + _actor7.sub109466(38, 165, 16, 32, _field1270); _actor7.setDetails(3500, 6, 7, -1, 1, (SceneItem *)NULL); R2_GLOBALS._sound1.play(276); @@ -3696,7 +3696,7 @@ void Scene3500::signal() { void Scene3500::process(Event &event) { if (_field1286 == 0) return; - + if (event.eventType == EVENT_KEYPRESS) { switch (event.kbd.keycode) { case Common::KEYCODE_1: @@ -3765,7 +3765,7 @@ void Scene3500::process(Event &event) { break; } } - + if (!event.handled) _actor7.process(event); @@ -3864,7 +3864,7 @@ void Scene3500::dispatch() { var_a = abs(var_6 - di); tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); - if ( (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4)) && (di <= var_6) && (_field127C>= var_6)) + if ( (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4)) && (di <= var_6) && (_field127C>= var_6)) || (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5) || (tmpVar == 14) || (tmpVar == 15)) && (_field126E >= var_a) && (_field126E > 3) && (_action1._field24 != 0)) ) { di = var_6; if ((tmpVar != 25) && (tmpVar != 26) && (tmpVar != 5) && (tmpVar != 14) && (tmpVar == 15)) @@ -3894,7 +3894,7 @@ void Scene3500::dispatch() { break; case 2: tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); - if ( ((tmpVar == 12) || (tmpVar == 13) || (tmpVar == 11) || (tmpVar == 16) || (tmpVar == 31)) + if ( ((tmpVar == 12) || (tmpVar == 13) || (tmpVar == 11) || (tmpVar == 16) || (tmpVar == 31)) || (((tmpVar == 25) || (tmpVar == 23) || (tmpVar == 14) || (tmpVar == 5) || (tmpVar == 4)) && (var_a > 3)) ) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; @@ -4003,7 +4003,7 @@ void Scene3500::dispatch() { var_6 = _unkObj1.sub1097EF(di + 46) - 46; var_a = abs(di - var_6); tmpVar = _unkObj1.sub109C09(Common::Point(var_field127A + 70, di + 46)); - if ( (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5)) && (di >= var_6) && (_field127C <= var_6)) + if ( (((tmpVar == 25) || (tmpVar == 26) || (tmpVar == 5)) && (di >= var_6) && (_field127C <= var_6)) || (((tmpVar == 23) || (tmpVar == 24) || (tmpVar == 4) || (tmpVar == 14) || (tmpVar == 15)) && (_field126E >= var_a) && (_field126E <= 3) && (_action1._field24 != 0)) ){ if ((tmpVar != 23) && (tmpVar != 24) && (tmpVar != 4) && (tmpVar != 14) && (tmpVar != 15)) R2_GLOBALS._sound2.play(339); @@ -4179,7 +4179,7 @@ void Scene3500::dispatch() { } /*-------------------------------------------------------------------------- - * Scene 3600 - + * Scene 3600 - * *--------------------------------------------------------------------------*/ Scene3600::Scene3600() { @@ -4227,7 +4227,7 @@ void Scene3600::Action3600::signal() { R2_GLOBALS._sound2.fade(127, 5, 10, false, NULL); } setDelay(1); - warning("TODO: Palette fader using parameter 2 = 256"); + warning("TODO: Palette fader using parameter 2 = 256"); R2_GLOBALS._scenePalette.fade((const byte *)&scene->_palette1._palette, true, _field20); if (_field20 > 0) _field20 -= 2; @@ -4359,7 +4359,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { g_globals->gfxManager()._bounds.moveTo(Common::Point(160, 0)); R2_GLOBALS._v558B6.set(25, 0, 260, 200); } - + loadScene(3600); SceneExt::postInit(); _field254C = 0; @@ -4502,7 +4502,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _action1._field1E = 1; _action1._field20 = 0; _action1.setActionIndex(1); - + _actor3.setAction(&_action1); _sceneMode = 3623; @@ -4768,7 +4768,7 @@ void Scene3600::signal() { R2_GLOBALS.setFlag(71); _sceneMode = 3626; setAction(&_sequenceManager1, this, 3626, &_actor13, NULL); - } + } break; case 3624: R2_GLOBALS._player.disableControl(); @@ -4946,7 +4946,7 @@ void Scene3700::signal() { } /*-------------------------------------------------------------------------- - * Scene 3800 - + * Scene 3800 - * *--------------------------------------------------------------------------*/ Scene3800::Scene3800() { @@ -5227,7 +5227,7 @@ void Scene3800::postInit(SceneObjectList *OwnerList) { _field412 = 0; initScene3800(); - + SceneExt::postInit(); R2_GLOBALS._sound1.play(231); @@ -5338,7 +5338,7 @@ void Scene3800::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 3900 - + * Scene 3900 - * *--------------------------------------------------------------------------*/ void Scene3900::Exit1::changeScene() { @@ -5350,7 +5350,7 @@ void Scene3900::Exit1::changeScene() { R2_GLOBALS._v566AA = 1; R2_GLOBALS._v566A8 = 1; scene->_sceneMode = 14; - + Common::Point pt(160, 115); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -5365,7 +5365,7 @@ void Scene3900::Exit2::changeScene() { R2_GLOBALS._v566AA = 2; R2_GLOBALS._v566A8 = 1; scene->_sceneMode = 14; - + Common::Point pt(330, 145); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -5380,7 +5380,7 @@ void Scene3900::Exit3::changeScene() { R2_GLOBALS._v566AA = 3; R2_GLOBALS._v566A8 = 1; scene->_sceneMode = 14; - + Common::Point pt(160, 220); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -5395,7 +5395,7 @@ void Scene3900::Exit4::changeScene() { R2_GLOBALS._v566AA = 4; R2_GLOBALS._v566A8 = 1; scene->_sceneMode = 14; - + Common::Point pt(-10, 145); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); @@ -5407,7 +5407,7 @@ void Scene3900::Exit5::changeScene() { _enabled = false; R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 13; - + if (R2_GLOBALS._v566A9 == 4) { Common::Point pt(-10, 135); NpcMover *mover = new NpcMover(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 6088c88479..44787b9eef 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -494,7 +494,7 @@ public: Exit1 _exit1; Action1 _action1; SequenceManager _sequenceManager; - + int _field11B2; Scene3385(); @@ -536,7 +536,7 @@ public: Actor4 _actor4; Action1 _action1; SequenceManager _sequenceManager; - + int _field142E; Scene3395(); @@ -600,10 +600,10 @@ class Scene3500 : public SceneExt { class Item4 : public NamedHotspot { public: int _field34; - + Item4(); virtual void synchronize(Serializer &s); - + virtual bool startAction(CursorType action, Event &event); }; @@ -615,7 +615,7 @@ class Scene3500 : public SceneExt { int _fieldAA; int _fieldAC; int _fieldAE; - + Actor7(); virtual void synchronize(Serializer &s); @@ -695,7 +695,7 @@ class Scene3600 : public SceneExt { class Action3600: public ActionExt { public: int _field1E, _field20; - + Action3600(); virtual void synchronize(Serializer &s); virtual void signal(); diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index f729881e8f..da1449efdf 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -159,7 +159,7 @@ void VisualSpeaker::setText(const Common::String &msg) { if (s.empty()) _numFrames = 0; - + if (_fieldF6) { if ((R2_GLOBALS._speechSubtitles & SPEECH_TEXT) || !_soundId) _sceneText.hide(); @@ -229,7 +229,7 @@ void SpeakerCaptain3210::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -285,7 +285,7 @@ void SpeakerChief1100::proc15() { _object1.setPosition(_object2->_position); _object1._numFrames = 7; - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -342,7 +342,7 @@ void SpeakerGuard2800::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -382,7 +382,7 @@ void SpeakerJocko3200::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -405,7 +405,7 @@ void SpeakerJocko3220::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -428,7 +428,7 @@ void SpeakerJocko3230::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -442,7 +442,7 @@ void SpeakerJocko3230::proc15() { } //---------------------------------------------------------------------------- -// Classes related to MIRANDA +// Classes related to MIRANDA //---------------------------------------------------------------------------- SpeakerMiranda::SpeakerMiranda(): VisualSpeaker() { @@ -472,7 +472,7 @@ void SpeakerMiranda300::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -507,7 +507,7 @@ void SpeakerMiranda1625::proc15() { _object1.postInit(); _object1.setPosition(Common::Point(196, 65)); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -547,7 +547,7 @@ void SpeakerMiranda3375::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == 3) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor2; @@ -558,7 +558,7 @@ void SpeakerMiranda3375::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (scene->_actor1._position.y != 163) R2_GLOBALS._player.setStrip(8); else @@ -574,7 +574,7 @@ void SpeakerMiranda3375::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -597,7 +597,7 @@ void SpeakerMiranda3385::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == 3) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor2; @@ -608,7 +608,7 @@ void SpeakerMiranda3385::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3375) R2_GLOBALS._player.setStrip(4); else @@ -623,7 +623,7 @@ void SpeakerMiranda3385::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -646,7 +646,7 @@ void SpeakerMiranda3395::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == 3) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor2; @@ -657,7 +657,7 @@ void SpeakerMiranda3395::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3385) R2_GLOBALS._player.setStrip(4); else @@ -673,7 +673,7 @@ void SpeakerMiranda3395::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -696,7 +696,7 @@ void SpeakerMiranda3400::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == 3) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor2; @@ -740,7 +740,7 @@ void SpeakerMiranda3600::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == 3) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor12; @@ -858,7 +858,7 @@ void SpeakerNej2700::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -893,7 +893,7 @@ void SpeakerNej2750::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -925,7 +925,7 @@ void SpeakerNej2800::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1002,7 +1002,7 @@ void SpeakerPrivate3210::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1047,7 +1047,7 @@ void SpeakerProtector3600::proc15() { R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1107,7 +1107,7 @@ void SpeakerQuinn300::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1122,7 +1122,7 @@ void SpeakerQuinn300::proc15() { _object1.animate(ANIM_MODE_6, this); } else { ((SceneItem *)_action)->_sceneRegionId = 0; - + switch (_object2->_visage) { case 10: _object1.setup((v - 1) / 4 + 4010, ((v - ((v - 1) / 4 * 4) - 1) % 8) * 2 + 1, 1); @@ -1158,7 +1158,7 @@ void SpeakerQuinn1100::proc15() { _object1.setPosition(_object2->_position); _object1._numFrames = 7; - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1250,7 +1250,7 @@ void SpeakerQuinn2700::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1281,7 +1281,7 @@ void SpeakerQuinn2750::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1312,7 +1312,7 @@ void SpeakerQuinn2800::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1371,9 +1371,9 @@ void SpeakerQuinn3375::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 1) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) + else if (R2_GLOBALS._player._characterIndex == 2) _object2 = &scene->_actor1; else _object2 = &scene->_actor2; @@ -1384,7 +1384,7 @@ void SpeakerQuinn3375::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (scene->_actor1._position.y != 163) R2_GLOBALS._player.setStrip(8); else @@ -1399,7 +1399,7 @@ void SpeakerQuinn3375::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -1422,9 +1422,9 @@ void SpeakerQuinn3385::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 1) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) + else if (R2_GLOBALS._player._characterIndex == 2) _object2 = &scene->_actor1; else _object2 = &scene->_actor2; @@ -1435,7 +1435,7 @@ void SpeakerQuinn3385::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3375) R2_GLOBALS._player.setStrip(4); else @@ -1450,7 +1450,7 @@ void SpeakerQuinn3385::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -1477,9 +1477,9 @@ void SpeakerQuinn3395::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 1) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) + else if (R2_GLOBALS._player._characterIndex == 2) _object2 = &scene->_actor1; else _object2 = &scene->_actor2; @@ -1490,7 +1490,7 @@ void SpeakerQuinn3395::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3385) R2_GLOBALS._player.setStrip(4); else @@ -1505,7 +1505,7 @@ void SpeakerQuinn3395::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -1532,9 +1532,9 @@ void SpeakerQuinn3400::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 1) _object2 = &R2_GLOBALS._player; - else if (R2_GLOBALS._player._characterIndex == 2) + else if (R2_GLOBALS._player._characterIndex == 2) _object2 = &scene->_actor1; else _object2 = &scene->_actor2; @@ -1581,7 +1581,7 @@ void SpeakerQuinn3600::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == 1) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor10; @@ -1736,7 +1736,7 @@ void SpeakerRalf3245::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1788,7 +1788,7 @@ void SpeakerRocko3200::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1811,7 +1811,7 @@ void SpeakerRocko3220::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1834,7 +1834,7 @@ void SpeakerRocko3230::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1879,7 +1879,7 @@ void SpeakerSeeker300::proc15() { _object1.fixPriority(140); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1918,7 +1918,7 @@ void SpeakerSeeker1100::proc15() { _object1.setPosition(_object2->_position); _object1._numFrames = 7; - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -1974,7 +1974,7 @@ void SpeakerSeeker1900::proc15() { _object1.setPosition(_object2->_position); _object1._numFrames = 7; - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2045,7 +2045,7 @@ void SpeakerSeeker3375::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor1; @@ -2056,7 +2056,7 @@ void SpeakerSeeker3375::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (scene->_actor1._position.y != 163) R2_GLOBALS._player.setStrip(8); else @@ -2071,7 +2071,7 @@ void SpeakerSeeker3375::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -2094,7 +2094,7 @@ void SpeakerSeeker3385::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor1; @@ -2105,7 +2105,7 @@ void SpeakerSeeker3385::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3375) R2_GLOBALS._player.setStrip(4); else @@ -2120,7 +2120,7 @@ void SpeakerSeeker3385::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -2143,7 +2143,7 @@ void SpeakerSeeker3395::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor1; @@ -2154,7 +2154,7 @@ void SpeakerSeeker3395::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3385) R2_GLOBALS._player.setStrip(4); else @@ -2169,7 +2169,7 @@ void SpeakerSeeker3395::proc15() { if (_object2->_mover) _object2->addMover(NULL); } - + switch (v) { case 0: @@ -2192,7 +2192,7 @@ void SpeakerSeeker3400::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor1; @@ -2251,7 +2251,7 @@ void SpeakerSeeker3600::proc15() { int v = _fieldF6; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) + if (R2_GLOBALS._player._characterIndex == 2) _object2 = &R2_GLOBALS._player; else _object2 = &scene->_actor11; @@ -2394,7 +2394,7 @@ void SpeakerSocko3200::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2434,7 +2434,7 @@ void SpeakerSoldier300::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2478,7 +2478,7 @@ void SpeakerTeal300::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2502,7 +2502,7 @@ void SpeakerTeal1625::proc15() { _object1.postInit(); _object1.setPosition(Common::Point(68, 68)); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2525,7 +2525,7 @@ void SpeakerTeal3240::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2677,7 +2677,7 @@ void SpeakerTomko3245::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2729,7 +2729,7 @@ void SpeakerWebbster3240::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); - if (_object2->_mover) + if (_object2->_mover) _object2->addMover(NULL); } @@ -2755,7 +2755,7 @@ void SpeakerWebbster3375::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (scene->_actor1._position.y != 163) R2_GLOBALS._player.setStrip(8); else @@ -2799,7 +2799,7 @@ void SpeakerWebbster3385::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3375) R2_GLOBALS._player.setStrip(4); else @@ -2843,7 +2843,7 @@ void SpeakerWebbster3395::proc15() { _object1._numFrames = 7; _object1._effect = 1; _object1.changeZoom(-1); - + if (R2_GLOBALS._sceneManager._previousScene == 3385) R2_GLOBALS._player.setStrip(4); else -- cgit v1.2.3 From d5127d49ee50e9b3cfb8bcc6643dfb81b49ca96b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 26 Feb 2012 17:29:45 +1100 Subject: TSAGE: Implemented the initial loading logic for R2R animation player --- engines/tsage/ringworld2/ringworld2_logic.cpp | 120 ++++++++++++++++++++---- engines/tsage/ringworld2/ringworld2_logic.h | 50 ++++++++-- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 10 +- 3 files changed, 148 insertions(+), 32 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index b420a375a3..8a1030597a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1551,14 +1551,52 @@ void Scene1200::sub9DAD6(int indx) { /*--------------------------------------------------------------------------*/ +void AnimationSplice::load(Common::File &f) { + _spliceOffset = f.readUint32LE(); + f.skip(6); + _drawMode = f.readByte(); + _fieldB = f.readByte(); +} + +/*--------------------------------------------------------------------------*/ + +AnimationSplices::AnimationSplices() { + _pixelData = NULL; +} + +AnimationSplices::~AnimationSplices() { + delete[] _pixelData; +} + +void AnimationSplices::load(Common::File &f) { + f.skip(4); + _dataSize = f.readUint32LE(); + f.skip(40); + + // Load the four splice indexes + for (int idx = 0; idx < 4; ++idx) + _splices[idx].load(f); +} + +int AnimationSplices::loadPixels(Common::File &f, int splicesSize) { + delete[] _pixelData; + _pixelData = new byte[splicesSize]; + return f.read(_pixelData, splicesSize); +} + +/*--------------------------------------------------------------------------*/ + void AnimationPlayerSubData::load(Common::File &f) { + uint32 posStart = f.pos(); + f.skip(6); _field6 = f.readUint16LE(); f.skip(2); _fieldA = f.readUint16LE(); _fieldC = f.readUint16LE(); - f.skip(4); - _field12 = f.readUint16LE(); + _fieldE = f.readUint16LE(); + f.skip(2); + _sliceSize = f.readUint16LE(); _field14 = f.readUint16LE(); _field16 = f.readUint16LE(); f.skip(4); @@ -1567,7 +1605,10 @@ void AnimationPlayerSubData::load(Common::File &f) { f.read(_palData, 768); _field320 = f.readSint32LE(); f.skip(12); - f.read(_field330, 96); + _splices.load(f); + + uint32 posEnd = f.pos(); + assert((posEnd - posStart) == 0x390); } /*--------------------------------------------------------------------------*/ @@ -1575,14 +1616,14 @@ void AnimationPlayerSubData::load(Common::File &f) { AnimationPlayer::AnimationPlayer(): EventHandler() { _endAction = NULL; - _fieldA = NULL; - _field16 = NULL; + _animData1 = NULL; + _animData2 = NULL; _screenBounds = R2_GLOBALS._gfxManagerInstance._bounds; _rect1 = R2_GLOBALS._gfxManagerInstance._bounds; - _field3C = 0; + _paletteMode = 0; _field3A = 1; - _field5A = 0; + _sliceHeight = 0; _field58 = 0; _endAction = NULL; } @@ -1590,6 +1631,9 @@ AnimationPlayer::AnimationPlayer(): EventHandler() { AnimationPlayer::~AnimationPlayer() { if (!method3()) method4(); + + delete[] _animData; + delete[] _animData2; } void AnimationPlayer::synchronize(Serializer &s) { @@ -1654,33 +1698,71 @@ bool AnimationPlayer::load(int animId, Action *endAction) { _gameFrame = R2_GLOBALS._events.getFrameNumber() - _field910; if (_subData._field320) { - _field900 = _subData._field320; + _dataNeeded = _subData._field320; } else { - int v = (_subData._field12 + 2) * _subData._field14 * _subData._fieldC; - _field900 = (_subData._field16 / _subData._fieldC) + v + 96; + int v = (_subData._sliceSize + 2) * _subData._field14 * _subData._fieldC; + _dataNeeded = (_subData._field16 / _subData._fieldC) + v + 96; } + + debugC(1, ktSageDebugGraphics, "Data needed %d", _dataNeeded); - _animData = _fieldA = new byte[_field900]; + // Set up animation data array + _animData1 = new AnimationData[_dataNeeded / 60]; + _animData = _animData1; if (_subData._fieldC <= 1) { - _subData._field16 = NULL; + _animData2 = NULL; _animPtr = _animData; } else { - _field16 = new byte[_field900]; - _animPtr = _field16; + _animData2 = new AnimationData[_dataNeeded / 60]; + _animPtr = _animData2; } _field90C = 0; _field90E = 1; - // TODO: Stuff - - if (_field3C) { + // Load up the first splices set + _animData->_dataSize = _subData._splices._dataSize; + _animData->_splices = _subData._splices; + int splicesSize = _animData->_dataSize - 96; + int readSize = _animData->_splices.loadPixels(_resourceFile, splicesSize); + _animData->_animSlicesSize = readSize + 96; + if (_animPtr != _animData) { + getSlices(); } + // Handle starting palette + switch (_paletteMode) { + case 0: + // Use existing active palette + _palette.getPalette(); + for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) { + uint r, g, b; + _palette.getEntry(idx, &r, &g, &b); + R2_GLOBALS._scenePalette.setEntry(idx, r, g, b); + } - return false; + R2_GLOBALS._sceneManager._hasPalette = true; + break; + case 2: + break; + + default: + for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) { + byte r = _subData._palData[idx * 3]; + byte g = _subData._palData[idx * 3 + 1]; + byte b = _subData._palData[idx * 3 + 2]; + + int palIndex = R2_GLOBALS._scenePalette.indexOf(r, g, b); + _palIndexes[idx] = palIndex; + } + break; + } + + ++R2_GLOBALS._animationCtr; + _field38 = 1; + return true; } void AnimationPlayer::drawFrame(int frameIndex) { @@ -1713,7 +1795,7 @@ bool AnimationPlayer::method3() { void AnimationPlayer::method4() { if (_field38) { - switch (_field3C) { + switch (_paletteMode) { case 0: R2_GLOBALS._scenePalette.replace(&_palette); changePane(); diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 651cfec763..4ad0c3b15a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -325,38 +325,71 @@ public: virtual Common::String getClassName() { return "UnkObject1200"; } }; +/*--------------------------------------------------------------------------*/ + +class AnimationSplice { +public: + int _spliceOffset; + int _drawMode; + int _fieldB; +public: + void load(Common::File &f); +}; + +class AnimationSplices { +public: + int _dataSize; + AnimationSplice _splices[4]; + byte *_pixelData; +public: + AnimationSplices(); + ~AnimationSplices(); + + void load(Common::File &f); + int loadPixels(Common::File &f, int splicesSize); +}; + class AnimationPlayerSubData { public: int _field6; int _fieldA; int _fieldC; - int _field12; + int _fieldE; + int _sliceSize; int _field14; int _field16; int _palStart; int _palSize; byte _palData[256 * 3]; int32 _field320; - byte _field330[96]; + AnimationSplices _splices; public: void load(Common::File &f); }; +class AnimationData { +public: + AnimationSplices _splices; + int _dataSize; + int _animSlicesSize; +}; + class AnimationPlayer: public EventHandler { public: - byte *_fieldA; - byte *_field16; - byte *_animData, *_animPtr; + AnimationData *_animData; + AnimationData *_animData1, *_animData2; + AnimationData *_animPtr; Common::File _resourceFile; Rect _rect1, _screenBounds; int _field38; - int _field3A, _field3C; + int _field3A, _paletteMode; int _field56; - int _field58, _field5A; + int _field58, _sliceHeight; + byte _palIndexes[256]; ScenePalette _palette; AnimationPlayerSubData _subData; Action *_endAction; - int _field900; + int _dataNeeded; int _field904; int _field908; int _field90C; @@ -381,6 +414,7 @@ public: bool method3(); void method4(); void method5() {} + void getSlices() {} }; class AnimationPlayerExt: public AnimationPlayer { diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 3c9956282a..7d5ab6318d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1555,7 +1555,7 @@ void Scene180::signal() { case 1: _field412 = 1; R2_GLOBALS._sceneManager._hasPalette = true; - _animationPlayer._field3C = 2; + _animationPlayer._paletteMode = 2; _animationPlayer._v = 1; _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 1; @@ -1598,7 +1598,7 @@ void Scene180::signal() { break; case 5: - _animationPlayer._field3C = 2; + _animationPlayer._paletteMode = 2; _animationPlayer._v = 1; _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 2; @@ -1701,7 +1701,7 @@ void Scene180::signal() { case 29: _field412 = 1; - _animationPlayer._field3C = 0; + _animationPlayer._paletteMode = 0; _animationPlayer._v = 1; _animationPlayer._field56 = 42; R2_GLOBALS._scene180Mode = 3; @@ -1801,7 +1801,7 @@ void Scene180::signal() { break; case 40: - _animationPlayer._field3C = 2; + _animationPlayer._paletteMode = 2; _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 4; if (_animationPlayer.load(4)) { @@ -1839,7 +1839,7 @@ void Scene180::signal() { case 48: _field412 = 1; - _animationPlayer._field3C = 2; + _animationPlayer._paletteMode = 2; _animationPlayer._v = 1; _animationPlayer._field56 = 1; R2_GLOBALS._scene180Mode = 15; -- cgit v1.2.3 From b341ff04faba379a524d941db0bcc918a9238b22 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 26 Feb 2012 21:34:38 +1100 Subject: TSAGE: Implement R2R Animation Player drawing code --- engines/tsage/ringworld2/ringworld2_logic.cpp | 129 ++++++++++++++++++++++---- engines/tsage/ringworld2/ringworld2_logic.h | 8 +- 2 files changed, 117 insertions(+), 20 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 8a1030597a..37fbceb532 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1555,7 +1555,7 @@ void AnimationSplice::load(Common::File &f) { _spliceOffset = f.readUint32LE(); f.skip(6); _drawMode = f.readByte(); - _fieldB = f.readByte(); + _secondaryIndex = f.readByte(); } /*--------------------------------------------------------------------------*/ @@ -1597,7 +1597,7 @@ void AnimationPlayerSubData::load(Common::File &f) { _fieldE = f.readUint16LE(); f.skip(2); _sliceSize = f.readUint16LE(); - _field14 = f.readUint16LE(); + _ySlices = f.readUint16LE(); _field16 = f.readUint16LE(); f.skip(4); _palStart = f.readUint16LE(); @@ -1700,7 +1700,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { if (_subData._field320) { _dataNeeded = _subData._field320; } else { - int v = (_subData._sliceSize + 2) * _subData._field14 * _subData._fieldC; + int v = (_subData._sliceSize + 2) * _subData._ySlices * _subData._fieldC; _dataNeeded = (_subData._field16 / _subData._fieldC) + v + 96; } @@ -1765,24 +1765,94 @@ bool AnimationPlayer::load(int animId, Action *endAction) { return true; } -void AnimationPlayer::drawFrame(int frameIndex) { -/* - uint32 v = READ_LE_UINT32(_dataP); -warning("v = %d", v); -//TODO +void AnimationPlayer::drawFrame(int spliceIndex) { + assert(spliceIndex < 4); + AnimationSplices &splices = _animData->_splices; + AnimationSplice &splice = _animData->_splices._splices[spliceIndex]; - // End check - if (_field56 == 42) { - _screenBounds.expandPanes(); + byte *sliceDataStart = &splices._pixelData[splice._spliceOffset]; + byte *sliceData1 = sliceDataStart; - R2_GLOBALS._sceneObjects->draw(); - } else { - if (R2_GLOBALS._sceneManager._hasPalette) { - R2_GLOBALS._sceneManager._hasPalette = false; - R2_GLOBALS._scenePalette.refresh(); + Rect playerBounds = _screenBounds; + int y = _screenBounds.top; + R2_GLOBALS._screenSurface.addDirtyRect(playerBounds); + + Graphics::Surface surface = R2_GLOBALS._screenSurface.lockSurface(); + + // Handle different drawing modes + switch (splice._drawMode) { + case 0: + // Draw from uncompressed source + for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { + for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { + // TODO: Check of _subData._fieldE was done for two different kinds of + // line slice drawing in original + const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); + byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); + + Common::copy(pSrc, pSrc + _subData._sliceSize, pDest); + } } + break; + + case 1: + switch (splice._secondaryIndex) { + case 0xfe: + // Draw from uncompressed source with optional skipped rows + for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { + for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { + int offset = READ_LE_UINT16(sliceData1 + sliceNum * 2); + + if (offset) { + const byte *pSrc = (const byte *)sliceDataStart + offset; + byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); + + Common::copy(pSrc, pSrc + _subData._sliceSize, pDest); + } + } + } + break; + case 0xff: + // Draw from RLE compressed source + for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { + for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { + // TODO: Check of _subData._fieldE was done for two different kinds of + // line slice drawing in original + const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); + byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); + + rleDecode(pSrc, pDest, _subData._sliceSize); + } + } + break; + default: { + // Draw from two splice sets simultaneously + AnimationSplice &splice2 = _animData->_splices._splices[splice._secondaryIndex]; + byte *sliceData2 = &splices._pixelData[splice2._spliceOffset]; + + for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { + for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { + const byte *pSrc1 = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData2 + sliceNum * 2); + const byte *pSrc2 = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); + byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); + + if (splice2._drawMode == 0) { + // Uncompressed background, foreground compressed + Common::copy(pSrc1, pSrc1 + _subData._sliceSize, pDest); + rleDecode(pSrc2, pDest, _subData._sliceSize); + } else { + // Both background and foreground is compressed + rleDecode(pSrc1, pDest, _subData._sliceSize); + rleDecode(pSrc2, pDest, _subData._sliceSize); + } + } + } + break; + } + } + default: + break; } -*/ } void AnimationPlayer::method2() { @@ -1813,6 +1883,31 @@ void AnimationPlayer::method4() { // TODO } +void AnimationPlayer::rleDecode(const byte *pSrc, byte *pDest, int size) { + while (size > 0) { + byte v = *pSrc++; + if (!(v & 0x80)) { + // Following uncompressed set of bytes + Common::copy(pSrc, pSrc + v, pDest); + pSrc += v; + pDest += v; + size -= v; + } else { + int count = v & 0x3F; + size -= count; + + if (!(v & 0x40)) { + // Skip over a number of bytes + pDest += count; + } else { + // Replicate a number of bytes + Common::fill(pDest, pDest + count, *pSrc++); + pDest += count; + } + } + } +} + /*--------------------------------------------------------------------------*/ AnimationPlayerExt::AnimationPlayerExt(): AnimationPlayer() { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 4ad0c3b15a..c575927827 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -331,7 +331,7 @@ class AnimationSplice { public: int _spliceOffset; int _drawMode; - int _fieldB; + int _secondaryIndex; public: void load(Common::File &f); }; @@ -356,7 +356,7 @@ public: int _fieldC; int _fieldE; int _sliceSize; - int _field14; + int _ySlices; int _field16; int _palStart; int _palSize; @@ -375,6 +375,8 @@ public: }; class AnimationPlayer: public EventHandler { +private: + void rleDecode(const byte *pSrc, byte *pDest, int size); public: AnimationData *_animData; AnimationData *_animData1, *_animData2; @@ -409,7 +411,7 @@ public: virtual void proc14() {} bool load(int animId, Action *endAction = NULL); - void drawFrame(int frameIndex); + void drawFrame(int spliceIndex); void method2(); bool method3(); void method4(); -- cgit v1.2.3 From 44e3d324faa52508c68dbb6f5ede960332c88e3e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 26 Feb 2012 22:54:25 +1100 Subject: TSAGE: Implemented some of the remaining R2R Animation Player support methods --- engines/tsage/ringworld2/ringworld2_logic.cpp | 93 ++++++++++++++++++------- engines/tsage/ringworld2/ringworld2_logic.h | 17 ++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 3 files changed, 78 insertions(+), 34 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 37fbceb532..3c5530feec 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1571,7 +1571,9 @@ AnimationSplices::~AnimationSplices() { void AnimationSplices::load(Common::File &f) { f.skip(4); _dataSize = f.readUint32LE(); - f.skip(40); + f.skip(8); + _dataSize2 = f.readUint32LE(); + f.skip(28); // Load the four splice indexes for (int idx = 0; idx < 4; ++idx) @@ -1623,17 +1625,14 @@ AnimationPlayer::AnimationPlayer(): EventHandler() { _rect1 = R2_GLOBALS._gfxManagerInstance._bounds; _paletteMode = 0; _field3A = 1; - _sliceHeight = 0; - _field58 = 0; + _sliceHeight = 1; + _field58 = 1; _endAction = NULL; } AnimationPlayer::~AnimationPlayer() { if (!method3()) - method4(); - - delete[] _animData; - delete[] _animData2; + close(); } void AnimationPlayer::synchronize(Serializer &s) { @@ -1707,28 +1706,28 @@ bool AnimationPlayer::load(int animId, Action *endAction) { debugC(1, ktSageDebugGraphics, "Data needed %d", _dataNeeded); // Set up animation data array - _animData1 = new AnimationData[_dataNeeded / 60]; - _animData = _animData1; + _animData1 = new AnimationData(); + _sliceCurrent = _animData1; if (_subData._fieldC <= 1) { _animData2 = NULL; - _animPtr = _animData; + _sliceNext = _sliceCurrent; } else { - _animData2 = new AnimationData[_dataNeeded / 60]; - _animPtr = _animData2; + _animData2 = new AnimationData(); + _sliceNext = _animData2; } _field90C = 0; _field90E = 1; // Load up the first splices set - _animData->_dataSize = _subData._splices._dataSize; - _animData->_splices = _subData._splices; - int splicesSize = _animData->_dataSize - 96; - int readSize = _animData->_splices.loadPixels(_resourceFile, splicesSize); - _animData->_animSlicesSize = readSize + 96; + _sliceCurrent->_dataSize = _subData._splices._dataSize; + _sliceCurrent->_splices = _subData._splices; + int splicesSize = _sliceCurrent->_dataSize - 96; + int readSize = _sliceCurrent->_splices.loadPixels(_resourceFile, splicesSize); + _sliceCurrent->_animSlicesSize = readSize + 96; - if (_animPtr != _animData) { + if (_sliceNext != _sliceCurrent) { getSlices(); } @@ -1767,8 +1766,8 @@ bool AnimationPlayer::load(int animId, Action *endAction) { void AnimationPlayer::drawFrame(int spliceIndex) { assert(spliceIndex < 4); - AnimationSplices &splices = _animData->_splices; - AnimationSplice &splice = _animData->_splices._splices[spliceIndex]; + AnimationSplices &splices = _sliceCurrent->_splices; + AnimationSplice &splice = _sliceCurrent->_splices._splices[spliceIndex]; byte *sliceDataStart = &splices._pixelData[splice._spliceOffset]; byte *sliceData1 = sliceDataStart; @@ -1827,7 +1826,7 @@ void AnimationPlayer::drawFrame(int spliceIndex) { break; default: { // Draw from two splice sets simultaneously - AnimationSplice &splice2 = _animData->_splices._splices[splice._secondaryIndex]; + AnimationSplice &splice2 = _sliceCurrent->_splices._splices[splice._secondaryIndex]; byte *sliceData2 = &splices._pixelData[splice2._spliceOffset]; for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { @@ -1856,14 +1855,29 @@ void AnimationPlayer::drawFrame(int spliceIndex) { } void AnimationPlayer::method2() { - + _field90C = _field90E++; + _field904 = _field90C * _subData._fieldC; + _field908 = _field904 - 1; + + if (_sliceNext == _sliceCurrent) { + int dataSize = _sliceCurrent->_splices._dataSize2; + _sliceCurrent->_dataSize = dataSize; + + dataSize -= 96; + assert(dataSize >= 0); + _sliceCurrent->_splices.load(_resourceFile); + _sliceCurrent->_animSlicesSize = _sliceCurrent->_splices.loadPixels(_resourceFile, dataSize); + } else { + SWAP(_sliceCurrent, _sliceNext); + getSlices(); + } } bool AnimationPlayer::method3() { return (_field90C >= _subData._field6); } -void AnimationPlayer::method4() { +void AnimationPlayer::close() { if (_field38) { switch (_paletteMode) { case 0: @@ -1872,7 +1886,7 @@ void AnimationPlayer::method4() { R2_GLOBALS._sceneManager._hasPalette = true; break; case 2: - proc14(); + closing(); break; default: changePane(); @@ -1880,7 +1894,21 @@ void AnimationPlayer::method4() { } } -// TODO + // Close the resource file + _resourceFile.close(); + + if (_field56 != 42) { + // flip screen in original + } + + // Free animation objects + delete _animData1; + delete _animData2; + _animData1 = NULL; + _animData2 = NULL; + + _field38 = 0; + R2_GLOBALS._animationCtr = MAX(R2_GLOBALS._animationCtr, 0); } void AnimationPlayer::rleDecode(const byte *pSrc, byte *pDest, int size) { @@ -1908,6 +1936,21 @@ void AnimationPlayer::rleDecode(const byte *pSrc, byte *pDest, int size) { } } +void AnimationPlayer::getSlices() { + assert((_sliceNext == _animData1) || (_sliceNext == _animData2)); + assert((_sliceCurrent == _animData1) || (_sliceCurrent == _animData2)); + + _sliceNext->_dataSize = _sliceCurrent->_splices._dataSize2; + if (_sliceNext->_dataSize) { + if (_sliceNext->_dataSize >= _dataNeeded) + error("Bogus dataNeeded == %d / %d", _sliceNext->_dataSize, _dataNeeded); + } + + int dataSize = _sliceNext->_dataSize - 96; + _sliceNext->_splices.load(_resourceFile); + _sliceNext->_animSlicesSize = _sliceNext->_splices.loadPixels(_resourceFile, dataSize); +} + /*--------------------------------------------------------------------------*/ AnimationPlayerExt::AnimationPlayerExt(): AnimationPlayer() { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index c575927827..6100efc8bc 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -339,6 +339,7 @@ public: class AnimationSplices { public: int _dataSize; + int _dataSize2; AnimationSplice _splices[4]; byte *_pixelData; public: @@ -377,10 +378,14 @@ public: class AnimationPlayer: public EventHandler { private: void rleDecode(const byte *pSrc, byte *pDest, int size); + + void drawFrame(int spliceIndex); + void method2(); + void getSlices(); public: - AnimationData *_animData; AnimationData *_animData1, *_animData2; - AnimationData *_animPtr; + AnimationData *_sliceCurrent; + AnimationData *_sliceNext; Common::File _resourceFile; Rect _rect1, _screenBounds; int _field38; @@ -408,15 +413,11 @@ public: virtual void dispatch(); virtual void flipPane() {} virtual void changePane() {} - virtual void proc14() {} + virtual void closing() {} bool load(int animId, Action *endAction = NULL); - void drawFrame(int spliceIndex); - void method2(); bool method3(); - void method4(); - void method5() {} - void getSlices() {} + void close(); }; class AnimationPlayerExt: public AnimationPlayer { diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 7d5ab6318d..292e9c2f5e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1900,7 +1900,7 @@ void Scene180::dispatch() { if (_animationPlayer._v) { if (_animationPlayer.method3()) { _animationPlayer._v = 0; - _animationPlayer.method4(); + _animationPlayer.close(); _animationPlayer.remove(); signal(); -- cgit v1.2.3 From 1e8b286c849a799059b7394eabf253827d6ec73f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 27 Feb 2012 20:45:55 +1100 Subject: TSAGE: Bugfixes for R2R animation player --- engines/tsage/ringworld2/ringworld2_logic.cpp | 115 +++++++++++++----------- engines/tsage/ringworld2/ringworld2_logic.h | 28 +++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 3 files changed, 79 insertions(+), 66 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 3c5530feec..e5e932b1e1 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1551,8 +1551,9 @@ void Scene1200::sub9DAD6(int indx) { /*--------------------------------------------------------------------------*/ -void AnimationSplice::load(Common::File &f) { - _spliceOffset = f.readUint32LE(); +void AnimationSlice::load(Common::File &f) { + f.skip(2); + _sliceOffset = f.readUint16LE(); f.skip(6); _drawMode = f.readByte(); _secondaryIndex = f.readByte(); @@ -1560,30 +1561,30 @@ void AnimationSplice::load(Common::File &f) { /*--------------------------------------------------------------------------*/ -AnimationSplices::AnimationSplices() { +AnimationSlices::AnimationSlices() { _pixelData = NULL; } -AnimationSplices::~AnimationSplices() { +AnimationSlices::~AnimationSlices() { delete[] _pixelData; } -void AnimationSplices::load(Common::File &f) { +void AnimationSlices::load(Common::File &f) { f.skip(4); _dataSize = f.readUint32LE(); f.skip(8); _dataSize2 = f.readUint32LE(); f.skip(28); - // Load the four splice indexes + // Load the four slice indexes for (int idx = 0; idx < 4; ++idx) - _splices[idx].load(f); + _slices[idx].load(f); } -int AnimationSplices::loadPixels(Common::File &f, int splicesSize) { +int AnimationSlices::loadPixels(Common::File &f, int slicesSize) { delete[] _pixelData; - _pixelData = new byte[splicesSize]; - return f.read(_pixelData, splicesSize); + _pixelData = new byte[slicesSize]; + return f.read(_pixelData, slicesSize); } /*--------------------------------------------------------------------------*/ @@ -1592,8 +1593,7 @@ void AnimationPlayerSubData::load(Common::File &f) { uint32 posStart = f.pos(); f.skip(6); - _field6 = f.readUint16LE(); - f.skip(2); + _duration = f.readUint32LE(); _fieldA = f.readUint16LE(); _fieldC = f.readUint16LE(); _fieldE = f.readUint16LE(); @@ -1607,7 +1607,7 @@ void AnimationPlayerSubData::load(Common::File &f) { f.read(_palData, 768); _field320 = f.readSint32LE(); f.skip(12); - _splices.load(f); + _slices.load(f); uint32 posEnd = f.pos(); assert((posEnd - posStart) == 0x390); @@ -1631,7 +1631,7 @@ AnimationPlayer::AnimationPlayer(): EventHandler() { } AnimationPlayer::~AnimationPlayer() { - if (!method3()) + if (!isCompleted()) close(); } @@ -1650,7 +1650,7 @@ void AnimationPlayer::remove() { void AnimationPlayer::process(Event &event) { if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) && (_field3A)) { - _field90C = _subData._field6; + _position = _subData._duration; } } @@ -1661,10 +1661,10 @@ void AnimationPlayer::dispatch() { if (gameDiff >= _field910) { drawFrame(_field904 % _subData._fieldC); ++_field904; - _field90C = _field904 / _subData._fieldC; + _position = _field904 / _subData._fieldC; - if (_field90C == _field90E) - method2(); + if (_position == _field90E) + nextSlices(); _field908 = _field904; _gameFrame = gameFrame; @@ -1717,14 +1717,14 @@ bool AnimationPlayer::load(int animId, Action *endAction) { _sliceNext = _animData2; } - _field90C = 0; + _position = 0; _field90E = 1; - // Load up the first splices set - _sliceCurrent->_dataSize = _subData._splices._dataSize; - _sliceCurrent->_splices = _subData._splices; - int splicesSize = _sliceCurrent->_dataSize - 96; - int readSize = _sliceCurrent->_splices.loadPixels(_resourceFile, splicesSize); + // Load up the first slices set + _sliceCurrent->_dataSize = _subData._slices._dataSize; + _sliceCurrent->_slices = _subData._slices; + int slicesSize = _sliceCurrent->_dataSize - 96; + int readSize = _sliceCurrent->_slices.loadPixels(_resourceFile, slicesSize); _sliceCurrent->_animSlicesSize = readSize + 96; if (_sliceNext != _sliceCurrent) { @@ -1764,12 +1764,12 @@ bool AnimationPlayer::load(int animId, Action *endAction) { return true; } -void AnimationPlayer::drawFrame(int spliceIndex) { - assert(spliceIndex < 4); - AnimationSplices &splices = _sliceCurrent->_splices; - AnimationSplice &splice = _sliceCurrent->_splices._splices[spliceIndex]; +void AnimationPlayer::drawFrame(int sliceIndex) { + assert(sliceIndex < 4); + AnimationSlices &slices = _sliceCurrent->_slices; + AnimationSlice &slice = _sliceCurrent->_slices._slices[sliceIndex]; - byte *sliceDataStart = &splices._pixelData[splice._spliceOffset]; + byte *sliceDataStart = &slices._pixelData[slice._sliceOffset - 96]; byte *sliceData1 = sliceDataStart; Rect playerBounds = _screenBounds; @@ -1779,7 +1779,7 @@ void AnimationPlayer::drawFrame(int spliceIndex) { Graphics::Surface surface = R2_GLOBALS._screenSurface.lockSurface(); // Handle different drawing modes - switch (splice._drawMode) { + switch (slice._drawMode) { case 0: // Draw from uncompressed source for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { @@ -1795,18 +1795,19 @@ void AnimationPlayer::drawFrame(int spliceIndex) { break; case 1: - switch (splice._secondaryIndex) { + switch (slice._secondaryIndex) { case 0xfe: // Draw from uncompressed source with optional skipped rows for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { - for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { + for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex, playerBounds.top++) { int offset = READ_LE_UINT16(sliceData1 + sliceNum * 2); if (offset) { const byte *pSrc = (const byte *)sliceDataStart + offset; - byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); + byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, playerBounds.top); - Common::copy(pSrc, pSrc + _subData._sliceSize, pDest); + //Common::copy(pSrc, pSrc + playerBounds.width(), pDest); + rleDecode(pSrc, pDest, playerBounds.width()); } } } @@ -1814,20 +1815,20 @@ void AnimationPlayer::drawFrame(int spliceIndex) { case 0xff: // Draw from RLE compressed source for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { - for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { + for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex, playerBounds.top++) { // TODO: Check of _subData._fieldE was done for two different kinds of // line slice drawing in original const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); - byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); + byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, playerBounds.top); rleDecode(pSrc, pDest, _subData._sliceSize); } } break; default: { - // Draw from two splice sets simultaneously - AnimationSplice &splice2 = _sliceCurrent->_splices._splices[splice._secondaryIndex]; - byte *sliceData2 = &splices._pixelData[splice2._spliceOffset]; + // Draw from two slice sets simultaneously + AnimationSlice &slice2 = _sliceCurrent->_slices._slices[slice._secondaryIndex]; + byte *sliceData2 = &slices._pixelData[slice2._sliceOffset - 96]; for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { @@ -1835,7 +1836,7 @@ void AnimationPlayer::drawFrame(int spliceIndex) { const byte *pSrc2 = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); - if (splice2._drawMode == 0) { + if (slice2._drawMode == 0) { // Uncompressed background, foreground compressed Common::copy(pSrc1, pSrc1 + _subData._sliceSize, pDest); rleDecode(pSrc2, pDest, _subData._sliceSize); @@ -1852,29 +1853,41 @@ void AnimationPlayer::drawFrame(int spliceIndex) { default: break; } + + if (_field56 == 42) { + _screenBounds.expandPanes(); + R2_GLOBALS._sceneObjects->draw(); + } else { + if (R2_GLOBALS._sceneManager._hasPalette) + R2_GLOBALS._scenePalette.refresh(); + } } -void AnimationPlayer::method2() { - _field90C = _field90E++; - _field904 = _field90C * _subData._fieldC; +/** + * Read the next frame's slice set + */ +void AnimationPlayer::nextSlices() { + _position = _field90E++; + _field904 = _position * _subData._fieldC; _field908 = _field904 - 1; if (_sliceNext == _sliceCurrent) { - int dataSize = _sliceCurrent->_splices._dataSize2; + int dataSize = _sliceCurrent->_slices._dataSize2; _sliceCurrent->_dataSize = dataSize; + debugC(1, ktSageDebugGraphics, "Next frame size = %xh", dataSize); dataSize -= 96; assert(dataSize >= 0); - _sliceCurrent->_splices.load(_resourceFile); - _sliceCurrent->_animSlicesSize = _sliceCurrent->_splices.loadPixels(_resourceFile, dataSize); + _sliceCurrent->_slices.load(_resourceFile); + _sliceCurrent->_animSlicesSize = _sliceCurrent->_slices.loadPixels(_resourceFile, dataSize); } else { SWAP(_sliceCurrent, _sliceNext); getSlices(); } } -bool AnimationPlayer::method3() { - return (_field90C >= _subData._field6); +bool AnimationPlayer::isCompleted() { + return (_position >= _subData._duration); } void AnimationPlayer::close() { @@ -1940,15 +1953,15 @@ void AnimationPlayer::getSlices() { assert((_sliceNext == _animData1) || (_sliceNext == _animData2)); assert((_sliceCurrent == _animData1) || (_sliceCurrent == _animData2)); - _sliceNext->_dataSize = _sliceCurrent->_splices._dataSize2; + _sliceNext->_dataSize = _sliceCurrent->_slices._dataSize2; if (_sliceNext->_dataSize) { if (_sliceNext->_dataSize >= _dataNeeded) error("Bogus dataNeeded == %d / %d", _sliceNext->_dataSize, _dataNeeded); } int dataSize = _sliceNext->_dataSize - 96; - _sliceNext->_splices.load(_resourceFile); - _sliceNext->_animSlicesSize = _sliceNext->_splices.loadPixels(_resourceFile, dataSize); + _sliceNext->_slices.load(_resourceFile); + _sliceNext->_animSlicesSize = _sliceNext->_slices.loadPixels(_resourceFile, dataSize); } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 6100efc8bc..d582370599 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -327,32 +327,32 @@ public: /*--------------------------------------------------------------------------*/ -class AnimationSplice { +class AnimationSlice { public: - int _spliceOffset; + int _sliceOffset; int _drawMode; int _secondaryIndex; public: void load(Common::File &f); }; -class AnimationSplices { +class AnimationSlices { public: int _dataSize; int _dataSize2; - AnimationSplice _splices[4]; + AnimationSlice _slices[4]; byte *_pixelData; public: - AnimationSplices(); - ~AnimationSplices(); + AnimationSlices(); + ~AnimationSlices(); void load(Common::File &f); - int loadPixels(Common::File &f, int splicesSize); + int loadPixels(Common::File &f, int slicesSize); }; class AnimationPlayerSubData { public: - int _field6; + int _duration; int _fieldA; int _fieldC; int _fieldE; @@ -363,14 +363,14 @@ public: int _palSize; byte _palData[256 * 3]; int32 _field320; - AnimationSplices _splices; + AnimationSlices _slices; public: void load(Common::File &f); }; class AnimationData { public: - AnimationSplices _splices; + AnimationSlices _slices; int _dataSize; int _animSlicesSize; }; @@ -379,8 +379,8 @@ class AnimationPlayer: public EventHandler { private: void rleDecode(const byte *pSrc, byte *pDest, int size); - void drawFrame(int spliceIndex); - void method2(); + void drawFrame(int sliceIndex); + void nextSlices(); void getSlices(); public: AnimationData *_animData1, *_animData2; @@ -399,7 +399,7 @@ public: int _dataNeeded; int _field904; int _field908; - int _field90C; + int _position; int _field90E; uint _field910; uint32 _gameFrame; @@ -416,7 +416,7 @@ public: virtual void closing() {} bool load(int animId, Action *endAction = NULL); - bool method3(); + bool isCompleted(); void close(); }; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 292e9c2f5e..460646c05d 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1898,7 +1898,7 @@ void Scene180::dispatch() { } if (_animationPlayer._v) { - if (_animationPlayer.method3()) { + if (_animationPlayer.isCompleted()) { _animationPlayer._v = 0; _animationPlayer.close(); _animationPlayer.remove(); -- cgit v1.2.3 From 46c590940aa8ca02075a81990b854014781c5e04 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 27 Feb 2012 22:29:16 +1100 Subject: TSAGE: Renamed many of the unknown fields in the R2R Animation Player --- engines/tsage/ringworld2/ringworld2_logic.cpp | 57 ++++++++++++++------------- engines/tsage/ringworld2/ringworld2_logic.h | 16 ++++---- 2 files changed, 38 insertions(+), 35 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e5e932b1e1..582458afed 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1594,18 +1594,18 @@ void AnimationPlayerSubData::load(Common::File &f) { f.skip(6); _duration = f.readUint32LE(); - _fieldA = f.readUint16LE(); - _fieldC = f.readUint16LE(); - _fieldE = f.readUint16LE(); + _frameRate = f.readUint16LE(); + _framesPerSlices = f.readUint16LE(); + _drawType = f.readUint16LE(); f.skip(2); _sliceSize = f.readUint16LE(); _ySlices = f.readUint16LE(); - _field16 = f.readUint16LE(); - f.skip(4); + _field16 = f.readUint32LE(); + f.skip(2); _palStart = f.readUint16LE(); _palSize = f.readUint16LE(); f.read(_palData, 768); - _field320 = f.readSint32LE(); + _totalSize = f.readSint32LE(); f.skip(12); _slices.load(f); @@ -1650,6 +1650,7 @@ void AnimationPlayer::remove() { void AnimationPlayer::process(Event &event) { if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) && (_field3A)) { + // Move the current position to the end _position = _subData._duration; } } @@ -1658,15 +1659,15 @@ void AnimationPlayer::dispatch() { uint32 gameFrame = R2_GLOBALS._events.getFrameNumber(); uint32 gameDiff = (gameFrame > _gameFrame) ? gameFrame - _gameFrame : _gameFrame - gameFrame; - if (gameDiff >= _field910) { - drawFrame(_field904 % _subData._fieldC); - ++_field904; - _position = _field904 / _subData._fieldC; + if (gameDiff >= _frameDelay) { + drawFrame(_playbackTick % _subData._framesPerSlices); + ++_playbackTick; + _position = _playbackTick / _subData._framesPerSlices; - if (_position == _field90E) + if (_position == _ticksPerSlices) nextSlices(); - _field908 = _field904; + _playbackTickPrior = _playbackTick; _gameFrame = gameFrame; } } @@ -1691,16 +1692,16 @@ bool AnimationPlayer::load(int animId, Action *endAction) { _subData.load(_resourceFile); // Set other properties - _field908 = -1; - _field904 = 0; - _field910 = 60 / _subData._fieldA; - _gameFrame = R2_GLOBALS._events.getFrameNumber() - _field910; + _playbackTickPrior = -1; + _playbackTick = 0; + _frameDelay = 60 / _subData._frameRate; + _gameFrame = R2_GLOBALS._events.getFrameNumber() - _frameDelay; - if (_subData._field320) { - _dataNeeded = _subData._field320; + if (_subData._totalSize) { + _dataNeeded = _subData._totalSize; } else { - int v = (_subData._sliceSize + 2) * _subData._ySlices * _subData._fieldC; - _dataNeeded = (_subData._field16 / _subData._fieldC) + v + 96; + int v = (_subData._sliceSize + 2) * _subData._ySlices * _subData._framesPerSlices; + _dataNeeded = (_subData._field16 / _subData._framesPerSlices) + v + 96; } debugC(1, ktSageDebugGraphics, "Data needed %d", _dataNeeded); @@ -1709,7 +1710,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { _animData1 = new AnimationData(); _sliceCurrent = _animData1; - if (_subData._fieldC <= 1) { + if (_subData._framesPerSlices <= 1) { _animData2 = NULL; _sliceNext = _sliceCurrent; } else { @@ -1718,7 +1719,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { } _position = 0; - _field90E = 1; + _ticksPerSlices = 1; // Load up the first slices set _sliceCurrent->_dataSize = _subData._slices._dataSize; @@ -1784,7 +1785,7 @@ void AnimationPlayer::drawFrame(int sliceIndex) { // Draw from uncompressed source for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex) { - // TODO: Check of _subData._fieldE was done for two different kinds of + // TODO: Check of _subData._drawType was done for two different kinds of // line slice drawing in original const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, y++); @@ -1816,7 +1817,7 @@ void AnimationPlayer::drawFrame(int sliceIndex) { // Draw from RLE compressed source for (int sliceNum = 0; sliceNum < _subData._ySlices; ++sliceNum) { for (int yIndex = 0; yIndex < _sliceHeight; ++yIndex, playerBounds.top++) { - // TODO: Check of _subData._fieldE was done for two different kinds of + // TODO: Check of _subData._drawType was done for two different kinds of // line slice drawing in original const byte *pSrc = (const byte *)sliceDataStart + READ_LE_UINT16(sliceData1 + sliceNum * 2); byte *pDest = (byte *)surface.getBasePtr(playerBounds.left, playerBounds.top); @@ -1867,14 +1868,16 @@ void AnimationPlayer::drawFrame(int sliceIndex) { * Read the next frame's slice set */ void AnimationPlayer::nextSlices() { - _position = _field90E++; - _field904 = _position * _subData._fieldC; - _field908 = _field904 - 1; + _position = _ticksPerSlices++; + _playbackTick = _position * _subData._framesPerSlices; + _playbackTickPrior = _playbackTick - 1; if (_sliceNext == _sliceCurrent) { int dataSize = _sliceCurrent->_slices._dataSize2; _sliceCurrent->_dataSize = dataSize; debugC(1, ktSageDebugGraphics, "Next frame size = %xh", dataSize); + if (dataSize == 0) + return; dataSize -= 96; assert(dataSize >= 0); diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index d582370599..3d2ffd9f78 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -353,16 +353,16 @@ public: class AnimationPlayerSubData { public: int _duration; - int _fieldA; - int _fieldC; - int _fieldE; + int _frameRate; + int _framesPerSlices; + int _drawType; int _sliceSize; int _ySlices; int _field16; int _palStart; int _palSize; byte _palData[256 * 3]; - int32 _field320; + int32 _totalSize; AnimationSlices _slices; public: void load(Common::File &f); @@ -397,11 +397,11 @@ public: AnimationPlayerSubData _subData; Action *_endAction; int _dataNeeded; - int _field904; - int _field908; + int _playbackTick; + int _playbackTickPrior; int _position; - int _field90E; - uint _field910; + int _ticksPerSlices; + uint _frameDelay; uint32 _gameFrame; public: AnimationPlayer(); -- cgit v1.2.3 From b60a2f012a92729591ab4e3221a980d98a5ceaf0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 29 Feb 2012 21:22:08 +1100 Subject: TSAGE: Slow down the animation player to match the original game --- engines/tsage/ringworld2/ringworld2_logic.cpp | 15 +++++++++------ engines/tsage/ringworld2/ringworld2_logic.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 582458afed..fb5f4a0eab 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1657,14 +1657,14 @@ void AnimationPlayer::process(Event &event) { void AnimationPlayer::dispatch() { uint32 gameFrame = R2_GLOBALS._events.getFrameNumber(); - uint32 gameDiff = (gameFrame > _gameFrame) ? gameFrame - _gameFrame : _gameFrame - gameFrame; + uint32 gameDiff = gameFrame - _gameFrame; if (gameDiff >= _frameDelay) { drawFrame(_playbackTick % _subData._framesPerSlices); ++_playbackTick; _position = _playbackTick / _subData._framesPerSlices; - if (_position == _ticksPerSlices) + if (_position == _nextSlicesPosition) nextSlices(); _playbackTickPrior = _playbackTick; @@ -1694,8 +1694,11 @@ bool AnimationPlayer::load(int animId, Action *endAction) { // Set other properties _playbackTickPrior = -1; _playbackTick = 0; - _frameDelay = 60 / _subData._frameRate; - _gameFrame = R2_GLOBALS._events.getFrameNumber() - _frameDelay; + + // The final multiplication is used to deliberately slow down playback, since the original + // was slowed down by the amount of time spent to decode and display the frames + _frameDelay = (60 / _subData._frameRate) * 8; + _gameFrame = R2_GLOBALS._events.getFrameNumber(); if (_subData._totalSize) { _dataNeeded = _subData._totalSize; @@ -1719,7 +1722,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { } _position = 0; - _ticksPerSlices = 1; + _nextSlicesPosition = 1; // Load up the first slices set _sliceCurrent->_dataSize = _subData._slices._dataSize; @@ -1868,7 +1871,7 @@ void AnimationPlayer::drawFrame(int sliceIndex) { * Read the next frame's slice set */ void AnimationPlayer::nextSlices() { - _position = _ticksPerSlices++; + _position = _nextSlicesPosition++; _playbackTick = _position * _subData._framesPerSlices; _playbackTickPrior = _playbackTick - 1; diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 3d2ffd9f78..b63c0ac2a7 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -400,7 +400,7 @@ public: int _playbackTick; int _playbackTickPrior; int _position; - int _ticksPerSlices; + int _nextSlicesPosition; uint _frameDelay; uint32 _gameFrame; public: -- cgit v1.2.3 From 21d570af83bed7b6edcc485b991fc52ecc9f4ab6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 29 Feb 2012 21:39:48 +1100 Subject: TSAGE: Bugfixes for startup sequence in R2R Scene 180 --- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 460646c05d..94a119338a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1621,14 +1621,16 @@ void Scene180::signal() { break; case 7: + // Title screen. Wait until title music finishes playing R2_GLOBALS._scene180Mode = 2; - if (R2_GLOBALS._sound1.isPaused()) + if (R2_GLOBALS._sound1.isPlaying()) _sceneMode = 7; setFrameInc(1); break; case 9: R2_GLOBALS._sound1.play(3); + clearScreen(); setFrameInc(2); break; -- cgit v1.2.3 From 83f193edbd97af01904c45934bfaafb4c11efecc Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 3 Mar 2012 14:13:40 +1100 Subject: TSAGE: Fix memory leak and error in R2R Animation Player free --- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index fb5f4a0eab..4cfcc29d24 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1927,7 +1927,8 @@ void AnimationPlayer::close() { _animData2 = NULL; _field38 = 0; - R2_GLOBALS._animationCtr = MAX(R2_GLOBALS._animationCtr, 0); + if (g_globals != NULL) + R2_GLOBALS._animationCtr = MAX(R2_GLOBALS._animationCtr, 0); } void AnimationPlayer::rleDecode(const byte *pSrc, byte *pDest, int size) { -- cgit v1.2.3 From dac35ac1cc2f94022ba3435b4231b9dd4ac8d60f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 4 Mar 2012 20:24:54 +1100 Subject: TSAGE: Some cleanup of R2R Animation Player, and fix for playing when objects are active --- engines/tsage/ringworld2/ringworld2_logic.cpp | 38 +++++++++++----- engines/tsage/ringworld2/ringworld2_logic.h | 5 ++- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 58 ++++++++++++------------- engines/tsage/ringworld2/ringworld2_scenes0.h | 2 +- 4 files changed, 62 insertions(+), 41 deletions(-) (limited to 'engines/tsage/ringworld2') diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index 4cfcc29d24..a06899fe5a 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -1623,7 +1623,7 @@ AnimationPlayer::AnimationPlayer(): EventHandler() { _screenBounds = R2_GLOBALS._gfxManagerInstance._bounds; _rect1 = R2_GLOBALS._gfxManagerInstance._bounds; - _paletteMode = 0; + _paletteMode = ANIMPALMODE_REPLACE_PALETTE; _field3A = 1; _sliceHeight = 1; _field58 = 1; @@ -1709,7 +1709,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { debugC(1, ktSageDebugGraphics, "Data needed %d", _dataNeeded); - // Set up animation data array + // Set up animation data objects _animData1 = new AnimationData(); _sliceCurrent = _animData1; @@ -1737,21 +1737,25 @@ bool AnimationPlayer::load(int animId, Action *endAction) { // Handle starting palette switch (_paletteMode) { - case 0: - // Use existing active palette + case ANIMPALMODE_REPLACE_PALETTE: + // Use the palette provided with the animation directly _palette.getPalette(); for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) { - uint r, g, b; - _palette.getEntry(idx, &r, &g, &b); + byte r = _subData._palData[idx * 3]; + byte g = _subData._palData[idx * 3 + 1]; + byte b = _subData._palData[idx * 3 + 2]; + R2_GLOBALS._scenePalette.setEntry(idx, r, g, b); } R2_GLOBALS._sceneManager._hasPalette = true; break; - case 2: + case ANIMPALMODE_NONE: break; default: + // ANIMPALMODE_CURR_PALETTE + // Use the closest matching colours in the currently active palette to those specified in the animation for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) { byte r = _subData._palData[idx * 3]; byte g = _subData._palData[idx * 3 + 1]; @@ -1858,12 +1862,26 @@ void AnimationPlayer::drawFrame(int sliceIndex) { break; } - if (_field56 == 42) { + // Unlock the screen surface + R2_GLOBALS._screenSurface.unlockSurface(); + + if (_objectMode == 42) { _screenBounds.expandPanes(); + + // Copy the drawn frame to the back surface + Rect srcRect = R2_GLOBALS._screenSurface.getBounds(); + Rect destRect = srcRect; + destRect.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y); + R2_GLOBALS._sceneManager._scene->_backSurface.copyFrom(R2_GLOBALS._screenSurface, + srcRect, destRect); + + // Draw any objects into the scene R2_GLOBALS._sceneObjects->draw(); } else { - if (R2_GLOBALS._sceneManager._hasPalette) + if (R2_GLOBALS._sceneManager._hasPalette) { + R2_GLOBALS._sceneManager._hasPalette = false; R2_GLOBALS._scenePalette.refresh(); + } } } @@ -1916,7 +1934,7 @@ void AnimationPlayer::close() { // Close the resource file _resourceFile.close(); - if (_field56 != 42) { + if (_objectMode != 42) { // flip screen in original } diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index b63c0ac2a7..0b573bf7f0 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -375,6 +375,9 @@ public: int _animSlicesSize; }; +enum AnimationPaletteMode { ANIMPALMODE_REPLACE_PALETTE = 0, ANIMPALMODE_CURR_PALETTE = 1, + ANIMPALMODE_NONE = 2 }; + class AnimationPlayer: public EventHandler { private: void rleDecode(const byte *pSrc, byte *pDest, int size); @@ -390,7 +393,7 @@ public: Rect _rect1, _screenBounds; int _field38; int _field3A, _paletteMode; - int _field56; + int _objectMode; int _field58, _sliceHeight; byte _palIndexes[256]; ScenePalette _palette; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 94a119338a..4c98fcf00a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -1549,18 +1549,18 @@ void Scene180::signal() { switch (_sceneMode++) { case 0: - setFrameInc(6); + setSceneDelay(6); break; case 1: _field412 = 1; R2_GLOBALS._sceneManager._hasPalette = true; - _animationPlayer._paletteMode = 2; + _animationPlayer._paletteMode = ANIMPALMODE_NONE; _animationPlayer._v = 1; - _animationPlayer._field56 = 1; + _animationPlayer._objectMode = 1; R2_GLOBALS._scene180Mode = 1; - _animationPlayer.load(1, NULL); + _animationPlayer.load(1); R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._subData._palData, 0, 256); R2_GLOBALS._sound1.play(1); @@ -1571,9 +1571,9 @@ void Scene180::signal() { R2_GLOBALS._paneRefreshFlag[0] = 3; if (R2_GLOBALS._sound1.isPlaying()) { - setFrameInc(1); + setSceneDelay(1); } else { - setFrameInc(180); + setSceneDelay(180); } break; @@ -1583,7 +1583,7 @@ void Scene180::signal() { if (R2_GLOBALS._sound1.isPlaying()) _sceneMode = 3; - setFrameInc(1); + setSceneDelay(1); break; case 4: @@ -1598,9 +1598,9 @@ void Scene180::signal() { break; case 5: - _animationPlayer._paletteMode = 2; + _animationPlayer._paletteMode = ANIMPALMODE_NONE; _animationPlayer._v = 1; - _animationPlayer._field56 = 1; + _animationPlayer._objectMode = 1; R2_GLOBALS._scene180Mode = 2; _animationPlayer.load(2); @@ -1614,9 +1614,9 @@ void Scene180::signal() { R2_GLOBALS._paneRefreshFlag[0] = 3; if (R2_GLOBALS._sound1.isPlaying()) { - setFrameInc(1); + setSceneDelay(1); } else { - setFrameInc(180); + setSceneDelay(180); } break; @@ -1625,19 +1625,19 @@ void Scene180::signal() { R2_GLOBALS._scene180Mode = 2; if (R2_GLOBALS._sound1.isPlaying()) _sceneMode = 7; - setFrameInc(1); + setSceneDelay(1); break; case 9: R2_GLOBALS._sound1.play(3); clearScreen(); - setFrameInc(2); + setSceneDelay(2); break; case 10: loadScene(4002); R2_GLOBALS._scenePalette.loadPalette(0); - setFrameInc(6); + setSceneDelay(6); break; case 11: @@ -1656,7 +1656,7 @@ void Scene180::signal() { case 24: case 26: case 46: - setFrameInc((R2_GLOBALS._speechSubtitles & 1) ? 1 : 18); + setSceneDelay((R2_GLOBALS._speechSubtitles & 1) ? 1 : 18); break; case 13: @@ -1691,7 +1691,7 @@ void Scene180::signal() { _field412 = 0; _object4.remove(); _object5.remove(); - setFrameInc(2); + setSceneDelay(2); break; case 28: @@ -1703,9 +1703,9 @@ void Scene180::signal() { case 29: _field412 = 1; - _animationPlayer._paletteMode = 0; + _animationPlayer._paletteMode = ANIMPALMODE_REPLACE_PALETTE; _animationPlayer._v = 1; - _animationPlayer._field56 = 42; + _animationPlayer._objectMode = 42; R2_GLOBALS._scene180Mode = 3; _animationPlayer.load(3); break; @@ -1727,7 +1727,7 @@ void Scene180::signal() { if (R2_GLOBALS._sceneManager._hasPalette) R2_GLOBALS._scenePalette.refresh(); - setFrameInc(6); + setSceneDelay(6); break; case 32: @@ -1799,19 +1799,19 @@ void Scene180::signal() { case 39: R2_GLOBALS._sound1.changeSound(8); - setFrameInc(1); + setSceneDelay(1); break; case 40: - _animationPlayer._paletteMode = 2; - _animationPlayer._field56 = 1; + _animationPlayer._paletteMode = ANIMPALMODE_NONE; + _animationPlayer._objectMode = 1; R2_GLOBALS._scene180Mode = 4; if (_animationPlayer.load(4)) { _animationPlayer.dispatch(); R2_GLOBALS._scenePalette.addFader(_animationPlayer._subData._palData, 256, 8, this); } else { _sceneMode = 43; - setFrameInc(1); + setSceneDelay(1); } break; @@ -1823,7 +1823,7 @@ void Scene180::signal() { case 42: R2_GLOBALS._scene180Mode = 4; R2_GLOBALS._paneRefreshFlag[0] = 3; - setFrameInc(1); + setSceneDelay(1); break; case 44: @@ -1832,7 +1832,7 @@ void Scene180::signal() { if (R2_GLOBALS._sceneManager._hasPalette) R2_GLOBALS._scenePalette.refresh(); - setFrameInc(6); + setSceneDelay(6); break; case 45: @@ -1841,9 +1841,9 @@ void Scene180::signal() { case 48: _field412 = 1; - _animationPlayer._paletteMode = 2; + _animationPlayer._paletteMode = ANIMPALMODE_NONE; _animationPlayer._v = 1; - _animationPlayer._field56 = 1; + _animationPlayer._objectMode = 1; R2_GLOBALS._scene180Mode = 15; _animationPlayer.load(15, NULL); @@ -1854,7 +1854,7 @@ void Scene180::signal() { case 49: R2_GLOBALS._scene180Mode = 15; R2_GLOBALS._paneRefreshFlag[0] = 3; - setFrameInc(1); + setSceneDelay(1); break; case 50: @@ -1865,7 +1865,7 @@ void Scene180::signal() { } } -void Scene180::setFrameInc(int v) { +void Scene180::setSceneDelay(int v) { _frameInc = v; _frameNumber = R2_GLOBALS._events.getFrameNumber(); } diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index e39efbca3d..2f52f9578f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -195,7 +195,7 @@ class Scene180: public SceneExt { void signal(); }; private: - void setFrameInc(int v); + void setSceneDelay(int v); public: SpeakerWebbster _webbsterSpeaker; SpeakerDutyOfficer _dutyOfficerSpeaker; -- cgit v1.2.3