From 8b66b16c0e352c945474afe46980ed54e1aaf389 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 24 Oct 2011 21:45:08 +1100 Subject: TSAGE: Further work on standardising user interface for use in Blue Force and Return to Ringworld --- engines/tsage/core.cpp | 2 +- engines/tsage/globals.cpp | 13 ++++++++++--- engines/tsage/globals.h | 7 +++++-- engines/tsage/user_interface.cpp | 33 +++++++++++++++++---------------- 4 files changed, 33 insertions(+), 22 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index a56b30ad4d..59027e68c9 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -71,7 +71,7 @@ InvObject::InvObject(int strip, int frame) { _strip = strip; _frame = frame; - _visage = 0; + _visage = 7; _sceneNumber = 0; _iconResNum = 10; } diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 7711e7fba7..4bcee21b23 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -205,6 +205,12 @@ void TsAGE2Globals::reset() { T2_GLOBALS._uiElements._active = false; } +void TsAGE2Globals::synchronize(Serializer &s) { + Globals::synchronize(s); + + s.syncAsSint16LE(_interfaceY); +} + /*--------------------------------------------------------------------------*/ namespace BlueForce { @@ -213,7 +219,7 @@ BlueForceGlobals::BlueForceGlobals(): TsAGE2Globals() { } void BlueForceGlobals::synchronize(Serializer &s) { - Globals::synchronize(s); + TsAGE2Globals::synchronize(s); s.syncAsSint16LE(_dayNumber); s.syncAsSint16LE(_v4CEA4); @@ -252,7 +258,6 @@ void BlueForceGlobals::synchronize(Serializer &s) { s.syncAsSint16LE(_v50CC8); s.syncAsSint16LE(_v51C42); s.syncAsSint16LE(_v51C44); - s.syncAsSint16LE(_interfaceY); s.syncAsSint16LE(_bookmark); s.syncAsSint16LE(_mapLocationId); s.syncAsSint16LE(_clip1Bullets); @@ -361,7 +366,9 @@ void Ringworld2Globals::reset() { T2_GLOBALS._uiElements._active = false; } - +void Ringworld2Globals::synchronize(Serializer &s) { + TsAGE2Globals::synchronize(s); +} } // end of namespace Ringworld2 diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index a5293a5ad1..1e50c08f56 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -108,9 +108,11 @@ public: UIElements _uiElements; SelectItemProc _onSelectItem; int _interfaceY; + ASoundExt _inventorySound; TsAGE2Globals() { _onSelectItem = NULL; } virtual void reset(); + virtual void synchronize(Serializer &s); }; extern Globals *g_globals; @@ -182,7 +184,7 @@ enum Flag { class BlueForceGlobals: public TsAGE2Globals { public: - ASoundExt _sound1, _sound2, _sound3; + ASoundExt _sound1, _sound3; StripProxy _stripProxy; int _dayNumber; int _v4CEA4; @@ -228,8 +230,8 @@ public: bool getHasBullets(); virtual Common::String getClassName() { return "BFGlobals"; } - virtual void synchronize(Serializer &s); virtual void reset(); + virtual void synchronize(Serializer &s); void set2Flags(int flagNum); bool removeFlag(int flagNum); }; @@ -243,6 +245,7 @@ public: ASoundExt _sound1, _sound2, _sound3, _sound4; virtual void reset(); + virtual void synchronize(Serializer &s); }; } // End of namespace Ringworld2 diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index b7f96b3806..9e7db8f87b 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -25,6 +25,7 @@ #include "tsage/tsage.h" #include "tsage/blue_force/blueforce_dialogs.h" #include "tsage/blue_force/blueforce_logic.h" +#include "tsage/ringworld2/ringworld2_logic.h" namespace TsAGE { @@ -96,16 +97,16 @@ void UIQuestion::showItem(int resNum, int rlbNum, int frameNum) { imgRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); // Save the area behind where the image will be displayed - GfxSurface *savedArea = Surface_getArea(BF_GLOBALS.gfxManager().getSurface(), imgRect); + GfxSurface *savedArea = Surface_getArea(GLOBALS.gfxManager().getSurface(), imgRect); // Draw the image - BF_GLOBALS.gfxManager().copyFrom(objImage, imgRect); + GLOBALS.gfxManager().copyFrom(objImage, imgRect); // Wait for a press - BF_GLOBALS._events.waitForPress(); + GLOBALS._events.waitForPress(); // Restore the old area - BF_GLOBALS.gfxManager().copyFrom(*savedArea, imgRect); + GLOBALS.gfxManager().copyFrom(*savedArea, imgRect); delete savedArea; } @@ -232,8 +233,8 @@ void UICollection::show() { void UICollection::erase() { if (_clearScreen) { Rect tempRect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT); - BF_GLOBALS._screenSurface.fillRect(tempRect, 0); - BF_GLOBALS._sceneManager._scene->_backSurface.fillRect(tempRect, 0); + GLOBALS._screenSurface.fillRect(tempRect, 0); + GLOBALS._sceneManager._scene->_backSurface.fillRect(tempRect, 0); _clearScreen = false; } } @@ -253,7 +254,7 @@ void UICollection::draw() { _objList[idx]->draw(); // Draw the resulting UI onto the screen - BF_GLOBALS._screenSurface.copyFrom(BF_GLOBALS._sceneManager._scene->_backSurface, + GLOBALS._screenSurface.copyFrom(GLOBALS._sceneManager._scene->_backSurface, Rect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT), Rect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT)); @@ -301,16 +302,16 @@ void UIElements::synchronize(Serializer &s) { } void UIElements::process(Event &event) { - if (_clearScreen && BF_GLOBALS._player._enabled && (BF_GLOBALS._sceneManager._sceneNumber != 50)) { + if (_clearScreen && GLOBALS._player._enabled && (GLOBALS._sceneManager._sceneNumber != 50)) { if (_bounds.contains(event.mousePos)) { // Cursor inside UI area if (!_cursorChanged) { - if (BF_GLOBALS._events.isInventoryIcon()) { + if (GLOBALS._events.isInventoryIcon()) { // Inventory icon being displayed, so leave alone } else { // Change to the inventory use cursor GfxSurface surface = _cursorVisage.getFrame(6); - BF_GLOBALS._events.setCursor(surface); + GLOBALS._events.setCursor(surface); } _cursorChanged = true; } @@ -329,13 +330,13 @@ void UIElements::process(Event &event) { } else if (_cursorChanged) { // Cursor outside UI area, so reset as necessary - BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor()); + GLOBALS._events.setCursor(GLOBALS._events.getCursor()); _cursorChanged = false; /* - SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene; + SceneExt *scene = (SceneExt *)GLOBALS._sceneManager._scene; if (scene->_focusObject) { GfxSurface surface = _cursorVisage.getFrame(7); - BF_GLOBALS._events.setCursor(surface); + GLOBALS._events.setCursor(surface); } */ } @@ -459,7 +460,7 @@ void UIElements::updateInventory() { // Loop through the inventory objects SynchronizedList::iterator i; int objIndex = 0; - for (i = BF_INVENTORY._itemList.begin(); i != BF_INVENTORY._itemList.end(); ++i, ++objIndex) { + for (i = GLOBALS._inventory->_itemList.begin(); i != GLOBALS._inventory->_itemList.end(); ++i, ++objIndex) { InvObject *obj = *i; // Check whether the object is in any of the four inventory slots @@ -493,7 +494,7 @@ void UIElements::updateInvList() { SynchronizedList::iterator i; int itemIndex = 0; - for (i = BF_GLOBALS._inventory->_itemList.begin(); i != BF_GLOBALS._inventory->_itemList.end(); ++i, ++itemIndex) { + for (i = GLOBALS._inventory->_itemList.begin(); i != GLOBALS._inventory->_itemList.end(); ++i, ++itemIndex) { InvObject *invObject = *i; if (invObject->inInventory()) _itemList.push_back(itemIndex); @@ -505,7 +506,7 @@ void UIElements::updateInvList() { */ void UIElements::addScore(int amount) { _scoreValue += amount; - BF_GLOBALS._sound2.play(0); + T2_GLOBALS._inventorySound.play(0); updateInventory(); } -- cgit v1.2.3 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/events.h | 2 +- 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 ++-- 5 files changed, 47 insertions(+), 41 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 874020f140..67d56ceb87 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -83,7 +83,7 @@ enum CursorType { INV_CARAVAN_KEY = 67, BF_LAST_INVENT = 68, // Ringworld 2 objects - R2_1 = 1, R2_2 = 2, R2_3 = 3, R2_STEPPING_DISKS = 4, R2_5 = 5, R2_6 = 6, R2_7 = 7, + R2_1 = 1, R2_2 = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, R2_5 = 5, R2_6 = 6, R2_7 = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_14 = 14, R2_15 = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21, R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, R2_26 = 26, R2_27 = 27, R2_28 = 28, 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 b29dc073a73ccd5d08e3df27ff5ccaf1f74f3a4b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 25 Oct 2011 02:19:24 +0200 Subject: TSAGE: Blue Force - Fix a couple of glitches in scene 340 (marina) --- engines/tsage/blue_force/blueforce_scenes3.cpp | 45 ++++++++++++++++++-------- engines/tsage/blue_force/blueforce_scenes3.h | 2 +- 2 files changed, 33 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 1fa27ccb27..55a02b0d00 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -1721,7 +1721,7 @@ void Scene340::Action1::signal() { ++BF_GLOBALS._marinaWomanCtr; if (BF_GLOBALS.getFlag(fBackupArrived340)) { - scene->_field2654 = 1; + scene->_backupPresent = 1; scene->_harrison.setPosition(Common::Point(46, 154)); BF_GLOBALS._walkRegions.proc1(19); } else if (BF_GLOBALS.getFlag(fCalledBackup)) { @@ -1732,6 +1732,8 @@ void Scene340::Action1::signal() { BF_GLOBALS._player.enableControl(); remove(); break; + default: + break; } } @@ -1740,6 +1742,7 @@ void Scene340::Action2::signal() { switch (_actionIndex++) { case 0: { + BF_GLOBALS._player.disableControl(); ADD_PLAYER_MOVER(64, 155); break; } @@ -1757,6 +1760,8 @@ void Scene340::Action2::signal() { BF_GLOBALS._player.enableControl(); remove(); break; + default: + break; } } @@ -1765,6 +1770,7 @@ void Scene340::Action3::signal() { switch (_actionIndex++) { case 0: { + BF_GLOBALS._player.disableControl(); ADD_PLAYER_MOVER(64, 155); break; } @@ -1773,18 +1779,20 @@ void Scene340::Action3::signal() { setDelay(3); break; case 2: - scene->_stripManager.start(scene->_field2652 + 3404, this); + scene->_stripManager.start(scene->_womanDialogCount + 3404, this); break; case 3: - if (++scene->_field2652 > 2) { + if (++scene->_womanDialogCount > 2) { if (!BF_GLOBALS.getFlag(fGotAllSkip340)) BF_GLOBALS.setFlag(fGotAllSkip340); - scene->_field2652 = 0; + scene->_womanDialogCount = 0; } BF_GLOBALS._player.enableControl(); remove(); break; + default: + break; } } @@ -1803,7 +1811,7 @@ void Scene340::Action4::signal() { break; case 1: BF_GLOBALS.setFlag(fBackupArrived340); - scene->_field2654 = 1; + scene->_backupPresent = 1; setDelay(3); break; case 2: @@ -1814,6 +1822,8 @@ void Scene340::Action4::signal() { BF_GLOBALS._player.enableControl(); remove(); break; + default: + break; } } @@ -1823,7 +1833,7 @@ void Scene340::Action5::signal() { switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); - if (scene->_field2654) { + if (scene->_backupPresent) { ADD_PLAYER_MOVER(64, 155); } else { BF_GLOBALS._player.changeAngle(45); @@ -1849,6 +1859,8 @@ void Scene340::Action5::signal() { BF_GLOBALS._player.enableControl(); remove(); break; + default: + break; } } @@ -1893,6 +1905,8 @@ void Scene340::Action7::signal() { BF_GLOBALS.setFlag(fBackupIn350); BF_GLOBALS._sceneManager.changeScene(350); break; + default: + break; } } @@ -1945,6 +1959,11 @@ void Scene340::Action8::signal() { case 4: remove(); break; + default: + // This is present in the original game + warning("Bugs"); + remove(); + break; } } @@ -1977,15 +1996,15 @@ void Scene340::Timer2::signal() { /*--------------------------------------------------------------------------*/ Scene340::Scene340(): PalettedScene() { - _seqNumber1 = _field2652 = _field2654 = 0; + _seqNumber1 = _womanDialogCount = _backupPresent = 0; } void Scene340::synchronize(Serializer &s) { PalettedScene::synchronize(s); s.syncAsSint16LE(_seqNumber1); - s.syncAsSint16LE(_field2652); - s.syncAsSint16LE(_field2654); + s.syncAsSint16LE(_womanDialogCount); + s.syncAsSint16LE(_backupPresent); } void Scene340::postInit(SceneObjectList *OwnerList) { @@ -2000,7 +2019,7 @@ void Scene340::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_jakeUniformSpeaker); - _field2652 = 0; + _womanDialogCount = 0; BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -2009,7 +2028,7 @@ void Scene340::postInit(SceneObjectList *OwnerList) { _swExit.setDetails(15, 340, -1, -1, -1, 1); _northExit.setDetails(16, 340, -1, -1, -1, 1); - BF_GLOBALS._player._regionBitList = 0x10000; + BF_GLOBALS._player._regionBitList |= 0x10000; BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1341 : 129); BF_GLOBALS._player._moveDiff = Common::Point(5, 2); @@ -2057,7 +2076,7 @@ void Scene340::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_harrisonSpeaker); if (BF_GLOBALS.getFlag(fBackupIn350)) { - _field2654 = 0; + _backupPresent = 0; _harrison.setVisage(1355); _harrison.setPosition(Common::Point(289, 112)); _harrison.changeAngle(225); @@ -2066,7 +2085,7 @@ void Scene340::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._walkRegions.proc1(23); } else if (BF_GLOBALS.getFlag(fBackupArrived340)) { - _field2654 = 1; + _backupPresent = 1; _harrison.setPosition(Common::Point(46, 154)); BF_GLOBALS._walkRegions.proc1(19); } else if (BF_GLOBALS.getFlag(fCalledBackup) && (BF_GLOBALS._marinaWomanCtr > 0)) { diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index 2982fd3306..6064a64940 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -363,7 +363,7 @@ public: ASoundExt _sound1, _sound2; TimerExt _timer1; Timer2 _timer2; - int _seqNumber1, _field2652, _field2654; + int _seqNumber1, _womanDialogCount, _backupPresent; Scene340(); virtual void synchronize(Serializer &s); -- cgit v1.2.3 From f614fbb608422e585ab7d7b5b335f8c1ee4739e1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 25 Oct 2011 09:08:46 +0200 Subject: TSAGE: Blue Force - Fix several bugs in scene 360. Dough bug still present though (he doesn't keep his gun) --- engines/tsage/blue_force/blueforce_scenes3.cpp | 25 ++++++++++++++++--------- engines/tsage/blue_force/blueforce_scenes3.h | 4 ++-- 2 files changed, 18 insertions(+), 11 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 55a02b0d00..31590f60c9 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -4156,7 +4156,7 @@ bool Scene360::Item1::startAction(CursorType action, Event &event) { case CURSOR_TALK: scene->_sceneMode = 3607; BF_GLOBALS._player.disableControl(); - scene->_stripManager.start(3550, this); + scene->_stripManager.start(3550, scene); return true; case INV_COLT45: SceneItem::display2(1, 4); @@ -4265,7 +4265,7 @@ bool Scene360::Object4::startAction(CursorType action, Event &event) { } } -bool Scene360::BsseballCards::startAction(CursorType action, Event &event) { +bool Scene360::BaseballCards::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_LOOK: if (event.mousePos.x >= (_bounds.left + _bounds.width() / 2)) @@ -4422,9 +4422,8 @@ void Scene360::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player._moveDiff.y = 4; BF_GLOBALS._player.enableControl(); - if (BF_GLOBALS._sceneManager._previousScene == 370) { - BF_GLOBALS._player.setPosition(Common::Point(62, 122)); - } else { + if ((BF_GLOBALS._sceneManager._previousScene == 355) || (BF_GLOBALS._sceneManager._previousScene != 370)) { + _field380 = 0; BF_GLOBALS._player.setPosition(Common::Point(253, 135)); BF_GLOBALS._player.setStrip(2); @@ -4450,6 +4449,9 @@ void Scene360::postInit(SceneObjectList *OwnerList) { _slidingDoor.setPosition(Common::Point(6, 130)); _slidingDoor.setAction(&_sequenceManager1, this, 3606, &_slidingDoor, &_object7, NULL); } + } else { + BF_GLOBALS._player.setPosition(Common::Point(62, 122)); + BF_GLOBALS._player.enableControl(); } _barometer._sceneRegionId = 9; @@ -4470,7 +4472,7 @@ void Scene360::signal() { BF_GLOBALS.setFlag(gunDrawn); BF_GLOBALS._deathReason = BF_GLOBALS.getFlag(fBackupIn350) ? 2 : 1; BF_GLOBALS._player.setPosition(Common::Point(BF_GLOBALS._player._position.x - 20, - BF_GLOBALS._player._position.y)); + BF_GLOBALS._player._position.y + 1)); _sceneMode = 3610; setAction(&_sequenceManager1, this, 3610, &_slidingDoor, &_object2, &BF_GLOBALS._player, NULL); break; @@ -4479,8 +4481,13 @@ void Scene360::signal() { setAction(&_sequenceManager1, this, 3605, &BF_GLOBALS._player, &_slidingDoor, NULL); break; case 3604: - _sceneMode = BF_GLOBALS.getFlag(fBackupIn350) ? 3603 : 3605; - setAction(&_sequenceManager1, this, _sceneMode, &_object6, NULL); + if (BF_GLOBALS.getFlag(fBackupIn350)) { + _sceneMode = 3603; + setAction(&_sequenceManager1, this, _sceneMode, &_object6, NULL); + } else { + _sceneMode = 3605; + setAction(&_sequenceManager1, this, _sceneMode, &BF_GLOBALS._player, &_slidingDoor, NULL); + } break; case 3605: if (BF_GLOBALS.getFlag(fBackupIn350)) { @@ -4498,7 +4505,7 @@ void Scene360::signal() { BF_GLOBALS._player.enableControl(); break; case 3608: - BF_GLOBALS._sceneManager.changeScene(355); + BF_GLOBALS._sceneManager.changeScene(355); break; case 3610: BF_GLOBALS._sceneManager.changeScene(666); diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index 6064a64940..b61e3c3754 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -621,7 +621,7 @@ class Scene360: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class BsseballCards: public NamedObject { + class BaseballCards: public NamedObject { public: virtual bool startAction(CursorType action, Event &event); }; @@ -667,7 +667,7 @@ public: SceneObject _object2; Window _window; Object4 _object4; - BsseballCards _baseballCards; + BaseballCards _baseballCards; Object6 _object6; Object7 _object7; Item1 _item1; -- cgit v1.2.3 From 44dcb2d1404ab9122242642b126ae7aa0cac8894 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Oct 2011 19:45:48 +1100 Subject: TSAGE: Bugfix for cursor appearing in user interface in Blue Force --- engines/tsage/user_interface.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index 9e7db8f87b..50d5e37c53 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -404,6 +404,7 @@ void UIElements::setup(const Common::Point &pt) { // Set up the score _score.postInit(); add(&_score); + break; case GType_Ringworld2: // Set up the character display _character.setup(1, 5, _characterIndex, 285, 11, 255); -- cgit v1.2.3 From 06e02a196b47377f4f9d2d2369cc89e4e4d88c1c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Oct 2011 19:46:46 +1100 Subject: TSAGE: Bugfix for black areas appearing in the user interface area --- engines/tsage/core.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 59027e68c9..90db858378 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2412,6 +2412,11 @@ void SceneObject::updateScreen() { srcRect.right = ((srcRect.right + 3) / 4) * 4; srcRect.clip(g_globals->_sceneManager._scene->_sceneBounds); + if (g_vm->getGameID() != GType_Ringworld) { + if (T2_GLOBALS._uiElements._visible) + srcRect.bottom = MIN(srcRect.bottom, T2_GLOBALS._interfaceY); + } + if (srcRect.isValidRect()) { Rect destRect = srcRect; destRect.translate(-sceneBounds.left, -sceneBounds.top); -- cgit v1.2.3 From e3fefd16a0ee7ade5e075ff3cf2aa69e29fbd90b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Oct 2011 20:01:39 +1100 Subject: TSAGE: Bugfix for not being able to walk around in some BF scenes --- engines/tsage/core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 90db858378..9cfa817946 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1706,7 +1706,7 @@ void SceneItem::display(const Common::String &msg) { /*--------------------------------------------------------------------------*/ bool SceneHotspot::startAction(CursorType action, Event &event) { - switch (action) { + switch (g_vm->getGameID()) { case GType_BlueForce: { BlueForce::SceneExt *scene = (BlueForce::SceneExt *)BF_GLOBALS._sceneManager._scene; assert(scene); -- cgit v1.2.3 From 4c89891382b294eddaed2d5173df9a03e155afc7 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 25 Oct 2011 15:36:01 +0200 Subject: TSAGE: Blue Force - Rename a couple of variables in scene 360 --- engines/tsage/blue_force/blueforce_scenes3.cpp | 30 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes3.h | 6 +++--- 2 files changed, 18 insertions(+), 18 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 31590f60c9..bfaab47d47 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -4281,7 +4281,7 @@ bool Scene360::BaseballCards::startAction(CursorType action, Event &event) { } } -bool Scene360::Object6::startAction(CursorType action, Event &event) { +bool Scene360::Harrison::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_LOOK: SceneItem::display2(360, 6); @@ -4339,12 +4339,12 @@ void Scene360::Action1::signal() { /*--------------------------------------------------------------------------*/ Scene360::Scene360() { - _field380 = 0; + _uselessVariable = 0; } void Scene360::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field380); + s.syncAsSint16LE(_uselessVariable); } void Scene360::postInit(SceneObjectList *OwnerList) { @@ -4423,18 +4423,18 @@ void Scene360::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.enableControl(); if ((BF_GLOBALS._sceneManager._previousScene == 355) || (BF_GLOBALS._sceneManager._previousScene != 370)) { - _field380 = 0; + _uselessVariable = 0; BF_GLOBALS._player.setPosition(Common::Point(253, 135)); BF_GLOBALS._player.setStrip(2); if (BF_GLOBALS.getFlag(fBackupIn350)) { - _object6.postInit(); - _object6.setVisage(BF_GLOBALS.getFlag(gunDrawn) ? 363 : 1363); - _object6.animate(ANIM_MODE_1, NULL); - _object6.setObjectWrapper(new SceneObjectWrapper()); - _object6.setPosition(Common::Point(235, 150)); - _object6.setStrip(2); - BF_GLOBALS._sceneItems.push_back(&_object6); + _harrison.postInit(); + _harrison.setVisage(BF_GLOBALS.getFlag(gunDrawn) ? 363 : 1363); + _harrison.animate(ANIM_MODE_1, NULL); + _harrison.setObjectWrapper(new SceneObjectWrapper()); + _harrison.setPosition(Common::Point(235, 150)); + _harrison.setStrip(2); + BF_GLOBALS._sceneItems.push_back(&_harrison); } _sceneMode = 3607; @@ -4483,7 +4483,7 @@ void Scene360::signal() { case 3604: if (BF_GLOBALS.getFlag(fBackupIn350)) { _sceneMode = 3603; - setAction(&_sequenceManager1, this, _sceneMode, &_object6, NULL); + setAction(&_sequenceManager1, this, _sceneMode, &_harrison, NULL); } else { _sceneMode = 3605; setAction(&_sequenceManager1, this, _sceneMode, &BF_GLOBALS._player, &_slidingDoor, NULL); @@ -4501,7 +4501,7 @@ void Scene360::signal() { break; case 3607: case 3609: - _object6.setVisage(1363); + _harrison.setVisage(1363); BF_GLOBALS._player.enableControl(); break; case 3608: @@ -4549,7 +4549,7 @@ void Scene360::process(Event &event) { BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount()); BF_GLOBALS._player.animate(ANIM_MODE_6, this); - _object6.setVisage(1363); + _harrison.setVisage(1363); } } else { // Handle drawing gun @@ -4564,7 +4564,7 @@ void Scene360::process(Event &event) { BF_GLOBALS.setFlag(gunDrawn); _sceneMode = 9998; - _object6.setVisage(363); + _harrison.setVisage(363); } event.handled = true; diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index b61e3c3754..2026c494bc 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -625,7 +625,7 @@ class Scene360: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Object6: public NamedObject { + class Harrison: public NamedObject { public: virtual bool startAction(CursorType action, Event &event); }; @@ -668,7 +668,7 @@ public: Window _window; Object4 _object4; BaseballCards _baseballCards; - Object6 _object6; + Harrison _harrison; Object7 _object7; Item1 _item1; Item2 _item2; @@ -676,7 +676,7 @@ public: Barometer _barometer; Action1 _action1; ASound _sound1; - int _field380; + int _uselessVariable; Scene360(); virtual void synchronize(Serializer &s); -- cgit v1.2.3 From 4c4e7289be47194fc7040f3f8c38623087c17d59 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 25 Oct 2011 15:46:59 +0200 Subject: TSAGE: Blue Force - Fix original bug when entering the boat with the gun handy, day 1, with Harrison --- engines/tsage/blue_force/blueforce_scenes3.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index bfaab47d47..e738f68308 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -4501,7 +4501,13 @@ void Scene360::signal() { break; case 3607: case 3609: - _harrison.setVisage(1363); + // Original game was only using at this place visage 1363. + // This workaround allow Harrison to keep his gun handy + // when entering the romm (if required) + if (! BF_GLOBALS.getFlag(gunDrawn)) + _harrison.setVisage(1363); + else + _harrison.setVisage(363); BF_GLOBALS._player.enableControl(); break; case 3608: -- cgit v1.2.3 From 2967e2cd9172b2d2492e46c33968013b2bcbdbc1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 25 Oct 2011 16:38:37 +0200 Subject: TSAGE: Blue Force - Fix logic of item1 and item6 in scene 370 (boat, bedroom) --- engines/tsage/blue_force/blueforce_scenes3.cpp | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index e738f68308..0ec2497395 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -4783,37 +4783,36 @@ bool Scene370::Laura::startAction(CursorType action, Event &event) { bool Scene370::Item1::startAction(CursorType action, Event &event) { Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene; - switch (action) { - case CURSOR_LOOK: + if (action == CURSOR_LOOK) { SceneItem::display2(370, 15); return true; - case CURSOR_USE: + } else if (action == CURSOR_USE) { SceneItem::display2(370, 16); return true; - case INV_COLT45: + } else if (action == INV_COLT45) { if (BF_GLOBALS._sceneObjects->contains(&scene->_green) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 370)) { scene->_green.setAction(NULL); scene->_sceneMode = 3703; scene->setAction(&scene->_sequenceManager, scene, 3703, &BF_GLOBALS._player, &scene->_green, &scene->_harrison, NULL); return true; } - // Deliberate fall-through - default: + return false; + } else if (action < CURSOR_WALK) // If any other inventory item used + return false; + else // If any other action is used return NamedHotspot::startAction(action, event); - } } bool Scene370::Item6::startAction(CursorType action, Event &event) { Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene; - switch (action) { - case CURSOR_LOOK: + if (action == CURSOR_LOOK) { SceneItem::display2(370, 14); return true; - case CURSOR_USE: + } else if (action == CURSOR_USE) { SceneItem::display2(370, 29); return true; - case INV_COLT45: + } else if (action == INV_COLT45) { if (BF_GLOBALS._sceneObjects->contains(&scene->_green) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 370) && (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)) { BF_GLOBALS._player.disableControl(); @@ -4822,10 +4821,11 @@ bool Scene370::Item6::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager, scene, 3703, &BF_GLOBALS._player, &scene->_green, &scene->_harrison, NULL); return true; } - // Deliberate fall-through - default: return SceneHotspot::startAction(action, event); - } + } else if (action < CURSOR_WALK) // If any other inventory item used + return false; + else // If any other action + return SceneHotspot::startAction(action, event); } -- 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/core.cpp | 15 +++++++++++++++ engines/tsage/core.h | 6 ++++++ engines/tsage/ringworld2/ringworld2_logic.cpp | 3 --- engines/tsage/ringworld2/ringworld2_logic.h | 1 - engines/tsage/ringworld2/ringworld2_scenes0.cpp | 5 ++--- 5 files changed, 23 insertions(+), 7 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 9cfa817946..ea6cc9f795 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1835,6 +1835,8 @@ SceneObject::SceneObject() : SceneHotspot() { _visage = 0; _strip = 0; _frame = 0; + _effect = 0; + _shade = 0; } SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() { @@ -2137,6 +2139,14 @@ SceneObject *SceneObject::clone() const { return obj; } +void SceneObject::copy(SceneObject *src) { + *this = *src; + + _objectWrapper = NULL; + _mover = NULL; + _endAction = NULL; +} + void SceneObject::checkAngle(const SceneObject *obj) { checkAngle(obj->_position); } @@ -2203,6 +2213,11 @@ void SceneObject::synchronize(Serializer &s) { s.syncAsSint32LE(_moveRate); SYNC_POINTER(_endAction); s.syncAsUint32LE(_regionBitList); + + if (g_vm->getGameID() == GType_Ringworld2) { + s.syncAsSint16LE(_effect); + s.syncAsSint16LE(_shade); + } } void SceneObject::postInit(SceneObjectList *OwnerList) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 0137134583..40a33b49b3 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -530,6 +530,10 @@ public: int _moveRate; Action *_endAction; uint32 _regionBitList; + + // Ringworld 2 specific fields + int _shade; + int _effect; public: SceneObject(); SceneObject(const SceneObject &so); @@ -577,6 +581,8 @@ public: // New methods introduced by Blue Force virtual void updateAngle(const Common::Point &pt); virtual void changeAngle(int angle); + // New methods introduced by Ringworld 2 + virtual void copy(SceneObject *src); void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority); void setup(int visage, int stripFrameNum, int frameNum); 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 e93c847df76b87cbed8201f68feeba9fd258999d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Oct 2011 21:00:41 +1100 Subject: TSAGE: Expanded a lot of game Id checks for Blue Force to include Ringworld 2 as well --- engines/tsage/core.cpp | 14 +++++++------- engines/tsage/events.cpp | 4 ++-- engines/tsage/scenes.cpp | 5 +++-- 3 files changed, 12 insertions(+), 11 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index ea6cc9f795..455550f6a4 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2810,7 +2810,7 @@ void SceneText::synchronize(Serializer &s) { void SceneText::updateScreen() { // FIXME: Hack for Blue Force to handle not refreshing the screen if the user interface // has been re-activated after showing some scene text - if ((g_vm->getGameID() != GType_BlueForce) || (_bounds.top < UI_INTERFACE_Y) || + if ((g_vm->getGameID() == GType_Ringworld) || (_bounds.top < UI_INTERFACE_Y) || !T2_GLOBALS._uiElements._visible) SceneObject::updateScreen(); } @@ -2944,7 +2944,7 @@ void Player::disableControl() { g_globals->_events.setCursor(CURSOR_NONE); _enabled = false; - if ((g_vm->getGameID() == GType_BlueForce) && T2_GLOBALS._uiElements._active) + if ((g_vm->getGameID() != GType_Ringworld) && T2_GLOBALS._uiElements._active) T2_GLOBALS._uiElements.hide(); } @@ -2992,7 +2992,7 @@ void Player::process(Event &event) { (g_globals->_events.getCursor() == CURSOR_WALK) && g_globals->_player._canWalk && (_position != event.mousePos) && g_globals->_sceneObjects->contains(this)) { - if ((g_vm->getGameID() == GType_BlueForce) && !BF_GLOBALS._player._enabled) + if ((g_vm->getGameID() != GType_Ringworld) && !BF_GLOBALS._player._enabled) return; PlayerMover *newMover = new PlayerMover(); @@ -3011,7 +3011,7 @@ void Player::synchronize(Serializer &s) { s.syncAsByte(_uiEnabled); s.syncAsSint16LE(_field8C); - if (g_vm->getGameID() == GType_BlueForce) + if (g_vm->getGameID() != GType_Ringworld) s.syncAsByte(_enabled); } @@ -3829,7 +3829,7 @@ void SceneHandler::process(Event &event) { } // Mouse press handling - bool enabled = (g_vm->getGameID() == GType_BlueForce) ? g_globals->_player._enabled : + bool enabled = (g_vm->getGameID() != GType_Ringworld) ? g_globals->_player._enabled : g_globals->_player._uiEnabled; if (enabled && (event.eventType == EVENT_BUTTON_DOWN) && !g_globals->_sceneItems.empty()) { // Check if the mouse is on the player @@ -3861,7 +3861,7 @@ void SceneHandler::process(Event &event) { g_globals->_events.setCursor(CURSOR_USE); } - if (g_vm->getGameID() == GType_BlueForce) + if (g_vm->getGameID() != GType_Ringworld) event.handled = true; } else if (g_vm->getGameID() != GType_Ringworld) { event.handled = true; @@ -3917,7 +3917,7 @@ void SceneHandler::dispatch() { do { process(event); } while (g_globals->_events.getEvent(event)); - } else if (g_vm->getGameID() == GType_BlueForce) { + } else if (g_vm->getGameID() != GType_Ringworld) { // For Blue Force, 'none' events need to be generated in the absence of any event.eventType = EVENT_NONE; event.mousePos = g_globals->_events._mousePos; diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 073cbc35b9..d42b996e41 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -251,8 +251,8 @@ void EventsClass::setCursor(CursorType cursorType) { if (delFlag) DEALLOCATE(cursor); - // For Blue Force, enable the question button when an inventory icon is selected - if (g_vm->getGameID() == GType_BlueForce) + // For Blue Force and Return to Ringworld, enable the question button when an inventory icon is selected + if (g_vm->getGameID() != GType_Ringworld) T2_GLOBALS._uiElements._question.setEnabled(questionEnabled); } diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 686b8725f5..5ed7c06800 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -456,8 +456,9 @@ void Scene::refreshBackground(int xAmount, int yAmount) { (xSectionSrc + 1) * 160, (ySectionSrc + 1) * 100); Rect destBounds(xSectionDest * 160, ySectionDest * 100, (xSectionDest + 1) * 160, (ySectionDest + 1) * 100); - if (g_vm->getGameID() == GType_BlueForce) { - // For Blue Force, if the scene has an interface area, exclude it from the copy + if (g_vm->getGameID() != GType_Ringworld) { + // For Blue Force and Return to Ringworld, if the scene has an interface area, + // exclude it from the copy srcBounds.bottom = MIN(srcBounds.bottom, BF_GLOBALS._interfaceY); destBounds.bottom = MIN(destBounds.bottom, BF_GLOBALS._interfaceY); } -- cgit v1.2.3 From 5be3e437913bcdde23e5e4dda66ea4fb7fc470a0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 25 Oct 2011 22:28:45 +1100 Subject: TSAGE: Bugfix for R2 to show inventory items in the user interface --- engines/tsage/user_interface.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index 50d5e37c53..f6eae80d9c 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -477,6 +477,8 @@ void UIElements::updateInventory() { slot->setVisage(obj->_visage); slot->setStrip(obj->_strip); slot->setFrame(obj->_frame); + + slot->reposition(); } } } -- 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') 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 0c751aac5a512b8c70f8b891aa63d39ca71960b8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 26 Oct 2011 22:02:10 +1100 Subject: TSAGE: Bugfix for headless officers in BF Day 2 inspection --- engines/tsage/blue_force/blueforce_logic.cpp | 4 ++-- engines/tsage/blue_force/blueforce_scenes3.cpp | 8 ++++---- engines/tsage/blue_force/blueforce_scenes3.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 130cf557b2..91fd5d3197 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -604,14 +604,14 @@ void FollowerObject::dispatch() { } else if ((_object->_visage != 308) || (_object->_strip != 1)) { show(); setStrip(_object->_strip); - setPosition(_object->_position, _object->_yDiff); + setPosition(Common::Point(_object->_position.x + 1, _object->_position.y), _yDiff); } } void FollowerObject::reposition() { assert(_object); setStrip(_object->_strip); - setPosition(_object->_position, _object->_yDiff); + setPosition(_object->_position, _yDiff); NamedObject::reposition(); } diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 0ec2497395..76500996ba 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -308,7 +308,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 123, 71); if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne)) - setup(); + setupInspection(); } else if (!BF_GLOBALS.getFlag(3)) { BF_GLOBALS._player.disableControl(); _sceneMode = 300; @@ -328,7 +328,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL); } else { BF_GLOBALS._player.setVisage(1304); - setup(); + setupInspection(); BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL); @@ -574,7 +574,7 @@ void Scene300::dispatch() { } } -void Scene300::setup() { +void Scene300::setupInspection() { _object13.postInit(); _object13.setVisage(307); _object13.setStrip(6); @@ -618,7 +618,7 @@ void Scene300::setup() { _object1._moveDiff = Common::Point(3, 1); _object1.setObjectWrapper(new SceneObjectWrapper()); _object1.animate(ANIM_MODE_1, NULL); - _object2.setup(&_object1, 306, 4, 9); + _object2.setup(&_object1, 306, 4, 29); BF_GLOBALS._sceneItems.addItems(&_object13, &_object14, &_object15, &_object16, NULL); _timer.set(3600, this, &_action5); diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index 2026c494bc..73fcef2851 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -94,7 +94,7 @@ class Scene300: public SceneExt { virtual void signal(); }; private: - void setup(); + void setupInspection(); public: SequenceManager _sequenceManager1, _sequenceManager2; SequenceManager _sequenceManager3, _sequenceManager4; -- cgit v1.2.3 From 7d28b1a921c651eba52a997aec12fc451d09d353 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 26 Oct 2011 22:35:11 +0200 Subject: TSAGE: Blue Force - Scene 410 (Gang arrest, day 1): rewrite Action4, fix hang when trying to search the truck before the gang his in the police car --- engines/tsage/blue_force/blueforce_scenes4.cpp | 37 +++++++++----------------- 1 file changed, 12 insertions(+), 25 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 814a2fff7f..1b5d3032ac 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -114,30 +114,17 @@ void Scene410::Action3::signal() { void Scene410::Action4::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; - switch (_actionIndex++) { - case 0: - if (scene->_field1FC4 == 0) { - ADD_PLAYER_MOVER(114, 133); - } else { - ADD_PLAYER_MOVER(195, 139); - } - break; - case 1: - BF_GLOBALS._player.updateAngle(scene->_passenger._position); - setDelay(3); - break; - case 2: - setDelay(3); - break; - case 3: - if (BF_GLOBALS.getFlag(fCalledBackup)) - scene->setAction(&scene->_action2); - else - scene->setAction(&scene->_action3); - remove(); - break; - default: - break; + warning("Action4"); + + if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) { + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 2; + scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, BF_GLOBALS._player, NULL); + } else { + BF_GLOBALS._player.disableControl(); + BF_GLOBALS.setFlag(fTalkedDriverNoBkup); + scene->_sceneMode = 4101; + scene->_stripManager.start(4103, scene); } } @@ -222,7 +209,7 @@ void Scene410::Action7::signal() { case 3: BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.updateAngle(Common::Point(100, 170)); - scene->setAction(&scene->_sequenceManager1, this, 4112, &scene->_driver, &scene->_passenger, + setAction(&scene->_sequenceManager1, this, 4112, &scene->_driver, &scene->_passenger, &scene->_harrison, NULL); break; case 5: -- cgit v1.2.3 From a6b447fb19a9aae3c3b070d25211ad7e7010c412 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 26 Oct 2011 22:59:28 +0200 Subject: TSAGE: Blue Force- Fix bug in previous commit --- engines/tsage/blue_force/blueforce_scenes4.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 1b5d3032ac..f1ebf5d6b6 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -119,7 +119,7 @@ void Scene410::Action4::signal() { if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 2; - scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, BF_GLOBALS._player, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, &BF_GLOBALS._player, NULL); } else { BF_GLOBALS._player.disableControl(); BF_GLOBALS.setFlag(fTalkedDriverNoBkup); -- cgit v1.2.3 From b679f19de36db99a8f08ccea3ac08b111c86de28 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 26 Oct 2011 23:34:35 +0200 Subject: TSAGE: Blue Force - Gang scene, fix Harrison text color, suppress useless error() --- engines/tsage/blue_force/blueforce_scenes4.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index f1ebf5d6b6..a800ea60ee 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -439,7 +439,11 @@ bool Scene410::Harrison::startAction(CursorType action, Event &event) { PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &destPos, scene); } else { - SceneItem::display2(350, 13); + SceneItem::display(350, 13, SET_WIDTH, 300, + SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left, + SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, + SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 32, SET_EXT_BGCOLOR, 49, + SET_EXT_FGCOLOR, 13, LIST_END); } } else if ((scene->_field1FBA != 0) && (scene->_field1FBC != 0)) { BF_GLOBALS._player.disableControl(); @@ -450,11 +454,12 @@ bool Scene410::Harrison::startAction(CursorType action, Event &event) { BF_GLOBALS.clearFlag(f1098Marina); } else if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) || (!scene->_field1FBA && (scene->_talkCount < 5))) { - SceneItem::display2(350, 13); + SceneItem::display(350, 13, SET_WIDTH, 300, + SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left, + SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, + SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 32, SET_EXT_BGCOLOR, 49, + SET_EXT_FGCOLOR, 13, LIST_END); } else if (!scene->_field1FBA) { - if (scene->_field1FBA) - error("Error - want to cuff shooter, but he's cuffed already"); - BF_GLOBALS._player.disableControl(); scene->_field1FBA = 1; scene->_field1FBE = 1; -- cgit v1.2.3 From f4a938d0f8535203ebb917dc78d181b3adf24c97 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 27 Oct 2011 00:45:55 +0200 Subject: TSAGE: Blue Force - Gang arrest: Fix a glitch, add some comments --- engines/tsage/blue_force/blueforce_scenes4.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index a800ea60ee..0c7e6fbf79 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -35,6 +35,7 @@ namespace BlueForce { * *--------------------------------------------------------------------------*/ +// Talk to driver with backup void Scene410::Action1::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; @@ -62,6 +63,7 @@ void Scene410::Action1::signal() { } } +// Talk to passenger with backup void Scene410::Action2::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; BF_GLOBALS._player.disableControl(); @@ -98,6 +100,7 @@ void Scene410::Action2::signal() { } } +// Talk to passenger without backup void Scene410::Action3::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) { @@ -111,6 +114,7 @@ void Scene410::Action3::signal() { } } +// Talk to driver without backup void Scene410::Action4::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; @@ -128,6 +132,7 @@ void Scene410::Action4::signal() { } } +// Talk to passenger void Scene410::Action5::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; @@ -158,6 +163,7 @@ void Scene410::Action5::signal() { } } +// Talk to driver void Scene410::Action6::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; @@ -780,9 +786,10 @@ void Scene410::signal() { setAction(&_sequenceManager1, this, 4108, &_harrison, NULL); break; case 4109: + // Harrison puts handcuffs to driver if ((BF_GLOBALS._player._position.x > 116) && (BF_GLOBALS._player._position.x != 195) && (BF_GLOBALS._player._position.y != 139)) { - ADD_PLAYER_MOVER(195, 139); + ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 195, 139); } BF_GLOBALS._walkRegions.proc2(22); -- cgit v1.2.3 From 186249f07cf85931d9f66c0a53a847d10a75b4c9 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 27 Oct 2011 01:34:12 +0200 Subject: RSAGE: BlueForce - Inside car: Rename a couple of variables --- engines/tsage/blue_force/blueforce_scenes4.cpp | 14 +++++++------- engines/tsage/blue_force/blueforce_scenes4.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 0c7e6fbf79..02c7fe1d09 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -936,14 +936,14 @@ bool Scene415::GunAndWig::startAction(CursorType action, Event &event) { remove(); return true; case INV_FOREST_RAP: - if (scene->_fieldE14) + if (scene->_scoreWigRapFlag) break; BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; scene->_stripManager.start(4126, scene); T2_GLOBALS._uiElements.addScore(50); - scene->_fieldE14 = true; + scene->_scoreWigRapFlag = true; return true; default: break; @@ -993,7 +993,7 @@ bool Scene415::TheBullets::startAction(CursorType action, Event &event) { scene->_dashDrawer.remove(); return true; case INV_FOREST_RAP: - if (scene->_fieldE16) { + if (scene->_scoreBulletRapFlag) { SceneItem::display2(415, 35); return true; } else { @@ -1001,7 +1001,7 @@ bool Scene415::TheBullets::startAction(CursorType action, Event &event) { scene->_sceneMode = 0; scene->_stripManager.start(4122, scene); T2_GLOBALS._uiElements.addScore(50); - scene->_fieldE16 = true; + scene->_scoreBulletRapFlag = true; } break; default: @@ -1034,13 +1034,13 @@ bool Scene415::Lever::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ Scene415::Scene415(): SceneExt() { - _fieldE14 = _fieldE16 = false; + _scoreWigRapFlag = _scoreBulletRapFlag = false; } void Scene415::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_fieldE14); - s.syncAsSint16LE(_fieldE16); + s.syncAsSint16LE(_scoreWigRapFlag); + s.syncAsSint16LE(_scoreBulletRapFlag); } void Scene415::postInit(SceneObjectList *OwnerList) { diff --git a/engines/tsage/blue_force/blueforce_scenes4.h b/engines/tsage/blue_force/blueforce_scenes4.h index 6c40211f28..48b48ec7f8 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.h +++ b/engines/tsage/blue_force/blueforce_scenes4.h @@ -171,7 +171,7 @@ public: NamedHotspot _seat, _windowLever, _item7, _seatBelt; Lever _lever; SpeakerJakeRadio _jakeRadioSpeaker; - bool _fieldE14, _fieldE16; + bool _scoreWigRapFlag, _scoreBulletRapFlag; Scene415(); virtual void postInit(SceneObjectList *OwnerList = NULL); -- cgit v1.2.3 From f4ea6a8435c807518b2c785c28dbe898fe6ba460 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 27 Oct 2011 07:00:15 +0200 Subject: TSAGE: Remove a debug trace erroneously left in 7d28b1a921c651eba52a997aec12fc451d09d353 --- engines/tsage/blue_force/blueforce_scenes4.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 02c7fe1d09..c0f1aafaa3 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -118,8 +118,6 @@ void Scene410::Action3::signal() { void Scene410::Action4::signal() { Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene; - warning("Action4"); - if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 2; -- cgit v1.2.3 From 44e4e16819186d45e3a1adeed311218b92bbf283 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 27 Oct 2011 19:32:27 +1100 Subject: TSAGE: Implemented walk regions enabling/disabling for Blue Force --- engines/tsage/blue_force/blueforce_scenes1.cpp | 12 ++--- engines/tsage/blue_force/blueforce_scenes2.cpp | 36 +++++++------- engines/tsage/blue_force/blueforce_scenes3.cpp | 66 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes4.cpp | 46 +++++++++--------- engines/tsage/blue_force/blueforce_scenes5.cpp | 30 ++++++------ engines/tsage/blue_force/blueforce_scenes6.cpp | 8 ++-- engines/tsage/blue_force/blueforce_scenes7.cpp | 6 +-- engines/tsage/blue_force/blueforce_scenes8.cpp | 20 ++++---- engines/tsage/blue_force/blueforce_scenes9.cpp | 50 +++++++++---------- engines/tsage/core.cpp | 59 ++++++++++++++++++----- engines/tsage/core.h | 6 ++- engines/tsage/debugger.cpp | 4 ++ engines/tsage/globals.cpp | 3 ++ engines/tsage/saveload.h | 2 +- 14 files changed, 197 insertions(+), 151 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index e977d5fbca..425446d6fb 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -877,7 +877,7 @@ bool Scene114::Door::startAction(CursorType action, Event &event) { SceneItem::display2(114, 1); return true; case CURSOR_USE: - BF_GLOBALS._walkRegions.proc2(2); + BF_GLOBALS._walkRegions.enableRegion(2); BF_GLOBALS._player.disableControl(); scene->_lyle.fixPriority(-1); scene->_sceneMode = 1140; @@ -895,8 +895,8 @@ void Scene114::postInit(SceneObjectList *OwnerList) { loadScene(110); setZoomPercents(85, 80, 105, 100); - BF_GLOBALS._walkRegions.proc1(9); - BF_GLOBALS._walkRegions.proc1(22); + BF_GLOBALS._walkRegions.disableRegion(9); + BF_GLOBALS._walkRegions.disableRegion(22); _door.postInit(); _door.setVisage(110); @@ -943,10 +943,10 @@ void Scene114::postInit(SceneObjectList *OwnerList) { _vechile.setStrip(1); _vechile.changeZoom(77); } - BF_GLOBALS._walkRegions.proc1(17); + BF_GLOBALS._walkRegions.disableRegion(17); } BF_GLOBALS._sceneItems.push_front(&_vechile); - BF_GLOBALS._walkRegions.proc1(2); + BF_GLOBALS._walkRegions.disableRegion(2); if (BF_GLOBALS._sceneManager._previousScene == 115) { BF_GLOBALS._player.setPosition(Common::Point(219, 100)); @@ -1665,7 +1665,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) { NpcMover *mover = new NpcMover(); _object4.addMover(mover, &destPos, NULL); BF_GLOBALS._sceneItems.push_front(&_object4); - BF_GLOBALS._walkRegions.proc1(1); + BF_GLOBALS._walkRegions.disableRegion(1); } else if (BF_GLOBALS.getFlag(onDuty)) BF_GLOBALS._player.setVisage(1341); diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 3af02bd463..4b26d8d604 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -937,9 +937,9 @@ void Scene270::postInit(SceneObjectList *OwnerList) { (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2) && (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 1)) || ((BF_GLOBALS._dayNumber == 3) && BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3))) { - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(19); _grandma.postInit(); _grandma.setVisage(274); @@ -1142,9 +1142,9 @@ void Scene270::signal() { &_lyle, &_grandma, NULL); break; case 2718: - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(19); _field219A = 1; BF_GLOBALS._bookmark = bTalkedToGrannyAboutSkipsCard; @@ -1450,9 +1450,9 @@ void Scene271::postInit(SceneObjectList *OwnerList) { switch (BF_GLOBALS._sceneManager._previousScene) { case 180: - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(19); BF_GLOBALS._player.setVisage(151); BF_GLOBALS._player.setPosition(Common::Point(348, 151)); @@ -1481,9 +1481,9 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _object6.postInit(); _object6.hide(); - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(19); _object12.postInit(); _object12.setVisage(274); @@ -1509,9 +1509,9 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _object7.setStrip(7); _object7.setPosition(Common::Point(48, 149)); - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(19); _object12.postInit(); _object12.setVisage(276); @@ -1543,9 +1543,9 @@ void Scene271::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.setFrame(1); BF_GLOBALS._player.setPosition(Common::Point(239, 145)); - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(19); _object12.postInit(); _object12.setVisage(274); diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 76500996ba..d1ed2cd5e6 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -1114,7 +1114,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { if (_field1B6A) { _object8.setFrame(8); } else { - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); } _briefingMaterial.setDetails(24, 315, 38, 39, 40, 1); @@ -1214,13 +1214,13 @@ void Scene315::signal() { BF_GLOBALS._sceneManager.changeScene(325); break; case 3152: - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); _object7.remove(); _object6.remove(); BF_GLOBALS._player.enableControl(); _field1B68 = false; - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); T2_GLOBALS._uiElements._active = true; T2_GLOBALS._uiElements.show(); break; @@ -1241,7 +1241,7 @@ void Scene315::signal() { case 3155: BF_GLOBALS._player.enableControl(); _field1B68 = false; - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); T2_GLOBALS._uiElements._active = true; T2_GLOBALS._uiElements.show(); break; @@ -1723,7 +1723,7 @@ void Scene340::Action1::signal() { if (BF_GLOBALS.getFlag(fBackupArrived340)) { scene->_backupPresent = 1; scene->_harrison.setPosition(Common::Point(46, 154)); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(19); } else if (BF_GLOBALS.getFlag(fCalledBackup)) { scene->_timer1.set(40, &scene->_harrison, &scene->_action4); } @@ -1818,7 +1818,7 @@ void Scene340::Action4::signal() { BF_GLOBALS._player.setAction(&scene->_sequenceManager3, this, 1347, &scene->_harrison, NULL); break; case 3: - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(19); BF_GLOBALS._player.enableControl(); remove(); break; @@ -2012,8 +2012,8 @@ void Scene340::postInit(SceneObjectList *OwnerList) { loadScene(340); setZoomPercents(126, 70, 162, 100); - BF_GLOBALS._walkRegions.proc1(13); - BF_GLOBALS._walkRegions.proc1(15); + BF_GLOBALS._walkRegions.disableRegion(13); + BF_GLOBALS._walkRegions.disableRegion(15); _timer2.set(2, NULL); _stripManager.addSpeaker(&_gameTextSpeaker); @@ -2083,11 +2083,11 @@ void Scene340::postInit(SceneObjectList *OwnerList) { _harrison.setFrame(1); _harrison.fixPriority(75); - BF_GLOBALS._walkRegions.proc1(23); + BF_GLOBALS._walkRegions.disableRegion(23); } else if (BF_GLOBALS.getFlag(fBackupArrived340)) { _backupPresent = 1; _harrison.setPosition(Common::Point(46, 154)); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(19); } else if (BF_GLOBALS.getFlag(fCalledBackup) && (BF_GLOBALS._marinaWomanCtr > 0)) { _timer1.set(900, &_harrison, &_action4); } @@ -2310,8 +2310,8 @@ void Scene342::postInit(SceneObjectList *OwnerList) { loadScene(340); setZoomPercents(126, 70, 162, 100); - BF_GLOBALS._walkRegions.proc1(13); - BF_GLOBALS._walkRegions.proc1(15); + BF_GLOBALS._walkRegions.disableRegion(13); + BF_GLOBALS._walkRegions.disableRegion(15); _field1A1A = 0; _timer1.set(2, NULL); @@ -2379,7 +2379,7 @@ void Scene342::postInit(SceneObjectList *OwnerList) { } if (BF_GLOBALS.getFlag(fWithLyle)) { - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(19); BF_GLOBALS._player.disableControl(); _sceneMode = 0; @@ -2770,7 +2770,7 @@ void Scene350::signal() { default: if (BF_GLOBALS.getFlag(fBackupIn350)) { _harrison.updateAngle(BF_GLOBALS._player._position); - BF_GLOBALS._walkRegions.proc1(19); + BF_GLOBALS._walkRegions.disableRegion(19); } BF_GLOBALS._player.enableControl(); @@ -4619,7 +4619,7 @@ bool Scene370::GreensGun::startAction(CursorType action, Event &event) { case CURSOR_USE: if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) || BF_GLOBALS.getFlag(greenTaken)) { BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(3); + BF_GLOBALS._walkRegions.enableRegion(3); scene->_sceneMode = 3711; scene->setAction(&scene->_sequenceManager, scene, 3711, &BF_GLOBALS._player, this, NULL); } else { @@ -4648,7 +4648,7 @@ bool Scene370::Green::startAction(CursorType action, Event &event) { scene->_stripManager.start(3717, scene); } else { BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(3); + BF_GLOBALS._walkRegions.enableRegion(3); scene->_sceneMode = 3715; scene->setAction(&scene->_sequenceManager, scene, 3715, &BF_GLOBALS._player, this, NULL); } @@ -4968,7 +4968,7 @@ void Scene370::signal() { BF_GLOBALS._player.setStrip(3); BF_GLOBALS._sceneItems.push_front(&_laura); - BF_GLOBALS._walkRegions.proc1(3); + BF_GLOBALS._walkRegions.disableRegion(3); _harrison.setAction(NULL); BF_GLOBALS._player.enableControl(); @@ -4978,8 +4978,8 @@ void Scene370::signal() { break; case 3705: _laura.remove(); - BF_GLOBALS._walkRegions.proc2(6); - BF_GLOBALS._walkRegions.proc2(1); + BF_GLOBALS._walkRegions.enableRegion(6); + BF_GLOBALS._walkRegions.enableRegion(1); BF_GLOBALS._player.enableControl(); break; case 3708: @@ -4995,8 +4995,8 @@ void Scene370::signal() { _sceneMode = 0; _object5.remove(); _green.setAction(NULL); - BF_GLOBALS._walkRegions.proc1(6); - BF_GLOBALS._walkRegions.proc1(1); + BF_GLOBALS._walkRegions.disableRegion(6); + BF_GLOBALS._walkRegions.disableRegion(1); break; case 3709: BF_GLOBALS._player.disableControl(); @@ -5010,7 +5010,7 @@ void Scene370::signal() { _green.setAction(&_sequenceManager, this, 3701, NULL); break; case 3711: - BF_GLOBALS._walkRegions.proc1(3); + BF_GLOBALS._walkRegions.disableRegion(3); BF_INVENTORY.setObjectScene(INV_GREENS_GUN, 1); T2_GLOBALS._uiElements.addScore(30); _greensGun.remove(); @@ -5033,7 +5033,7 @@ void Scene370::signal() { T2_GLOBALS._uiElements.addScore(50); BF_INVENTORY.setObjectScene(INV_GREEN_ID, 1); BF_INVENTORY.setObjectScene(INV_GREENS_KNIFE, 1); - BF_GLOBALS._walkRegions.proc1(3); + BF_GLOBALS._walkRegions.disableRegion(3); BF_GLOBALS._player.enableControl(); break; case 3716: @@ -5124,7 +5124,7 @@ void Scene380::postInit(SceneObjectList *OwnerList) { setZoomPercents(68, 80, 131, 100); BF_GLOBALS._sound1.fadeSound(33); - BF_GLOBALS._walkRegions.proc1(9); + BF_GLOBALS._walkRegions.disableRegion(9); _door.postInit(); _door.setVisage(380); @@ -5148,13 +5148,13 @@ void Scene380::postInit(SceneObjectList *OwnerList) { _vechile.setDetails(580, 2, 3, -1, 1, NULL); BF_GLOBALS._player.setVisage(129); - BF_GLOBALS._walkRegions.proc1(12); - BF_GLOBALS._walkRegions.proc1(18); - BF_GLOBALS._walkRegions.proc1(19); - BF_GLOBALS._walkRegions.proc1(20); - BF_GLOBALS._walkRegions.proc1(25); - BF_GLOBALS._walkRegions.proc1(26); - BF_GLOBALS._walkRegions.proc1(27); + BF_GLOBALS._walkRegions.disableRegion(12); + BF_GLOBALS._walkRegions.disableRegion(18); + BF_GLOBALS._walkRegions.disableRegion(19); + BF_GLOBALS._walkRegions.disableRegion(20); + BF_GLOBALS._walkRegions.disableRegion(25); + BF_GLOBALS._walkRegions.disableRegion(26); + BF_GLOBALS._walkRegions.disableRegion(27); } else if (BF_GLOBALS.getFlag(onDuty)) { // Show on duty motorcycle _vechile.setStrip(2); @@ -5304,7 +5304,7 @@ bool Scene385::Door::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - BF_GLOBALS._walkRegions.proc2(6); + BF_GLOBALS._walkRegions.enableRegion(6); BF_GLOBALS._player.disableControl(); scene->_sceneMode = 3850; scene->setAction(&scene->_sequenceManager, scene, 3850, &BF_GLOBALS._player, this, NULL); @@ -5485,7 +5485,7 @@ void Scene385::postInit(SceneObjectList *OwnerList) { _door.setPosition(Common::Point(107, 27)); _door.setDetails(385, 0, -1, -1, 1, NULL); - BF_GLOBALS._walkRegions.proc1(6); + BF_GLOBALS._walkRegions.disableRegion(6); if (BF_GLOBALS._sceneManager._previousScene == 390) { BF_GLOBALS._player.setPosition(Common::Point(109, 119)); diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index c0f1aafaa3..4cff38feab 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -467,7 +467,7 @@ bool Scene410::Harrison::startAction(CursorType action, Event &event) { BF_GLOBALS._player.disableControl(); scene->_field1FBA = 1; scene->_field1FBE = 1; - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(22); scene->_sceneMode = 4122; scene->_stripManager.start(4112, scene); } else if (scene->_field1FB6 < 1) { @@ -478,7 +478,7 @@ bool Scene410::Harrison::startAction(CursorType action, Event &event) { BF_GLOBALS._player.disableControl(); scene->_field1FBC = 1; scene->_field1FC0 = 1; - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(22); scene->_sceneMode = 4109; scene->_stripManager.start(4112, scene); } @@ -570,8 +570,8 @@ void Scene410::postInit(SceneObjectList *OwnerList) { _passenger.remove(); _driver.remove(); - BF_GLOBALS._walkRegions.proc1(21); - BF_GLOBALS._walkRegions.proc1(22); + BF_GLOBALS._walkRegions.disableRegion(21); + BF_GLOBALS._walkRegions.disableRegion(22); _harrison.postInit(); _harrison.setVisage(343); @@ -617,18 +617,18 @@ void Scene410::postInit(SceneObjectList *OwnerList) { _passenger.setFrame(8); } - BF_GLOBALS._walkRegions.proc1(16); + BF_GLOBALS._walkRegions.disableRegion(16); if (BF_GLOBALS.getFlag(fDriverOutOfTruck)) { _driver.setVisage(417); _driver.setStrip(1); _driver.setPosition(Common::Point(152, 97)); - BF_GLOBALS._walkRegions.proc1(7); + BF_GLOBALS._walkRegions.disableRegion(7); } if (BF_GLOBALS.getFlag(fCalledBackup)) { - BF_GLOBALS._walkRegions.proc1(21); - BF_GLOBALS._walkRegions.proc1(22); + BF_GLOBALS._walkRegions.disableRegion(21); + BF_GLOBALS._walkRegions.disableRegion(22); _harrison.postInit(); _harrison.setVisage(343); @@ -714,7 +714,7 @@ void Scene410::signal() { signal(); break; case 8: - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(22); BF_GLOBALS._player.changeAngle(225); _harrison.changeAngle(45); _sceneMode = 4114; @@ -735,7 +735,7 @@ void Scene410::signal() { BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager1, this, 4100, &_passenger, &_object5, NULL); - BF_GLOBALS._walkRegions.proc1(16); + BF_GLOBALS._walkRegions.disableRegion(16); break; case 4101: // Driver gets out of the car @@ -743,7 +743,7 @@ void Scene410::signal() { _sceneMode = 0; setAction(&_sequenceManager1, this, 4101, &_driver, &_object6, NULL); BF_GLOBALS.setFlag(fDriverOutOfTruck); - BF_GLOBALS._walkRegions.proc1(7); + BF_GLOBALS._walkRegions.disableRegion(7); break; case 4103: // Click on moto to ask for backup @@ -777,8 +777,8 @@ void Scene410::signal() { case 4108: BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.updateAngle(Common::Point(100, 170)); - BF_GLOBALS._walkRegions.proc2(22); - BF_GLOBALS._walkRegions.proc2(16); + BF_GLOBALS._walkRegions.enableRegion(22); + BF_GLOBALS._walkRegions.enableRegion(16); BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager1, this, 4108, &_harrison, NULL); @@ -790,7 +790,7 @@ void Scene410::signal() { ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 195, 139); } - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(22); BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager1, this, 4109, &_driver, &_harrison, NULL); @@ -810,14 +810,14 @@ void Scene410::signal() { setAction(&_sequenceManager1, this, 4112, &_driver, &_passenger, &_harrison, NULL); break; case 4114: - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(22); BF_GLOBALS._player.disableControl(); _sceneMode = 4116; setAction(&_sequenceManager1, this, 4114, &_harrison, &_patrolCar, NULL); break; case 4116: - BF_GLOBALS._walkRegions.proc2(21); - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(21); + BF_GLOBALS._walkRegions.enableRegion(22); _harrison.remove(); BF_GLOBALS._player.disableControl(); _sceneMode = 0; @@ -839,7 +839,7 @@ void Scene410::signal() { setAction(&_sequenceManager1, this, 4121, &BF_GLOBALS._player, &_passenger, NULL); break; case 4122: - BF_GLOBALS._walkRegions.proc2(22); + BF_GLOBALS._walkRegions.enableRegion(22); BF_INVENTORY.setObjectScene(INV_22_SNUB, 0); BF_GLOBALS._player.disableControl(); _sceneMode = 0; @@ -1250,8 +1250,8 @@ void Scene440::postInit(SceneObjectList *OwnerList) { _lyle.setPosition(Common::Point(135, 128)); _lyle.show(); - BF_GLOBALS._walkRegions.proc1(12); - BF_GLOBALS._walkRegions.proc1(13); + BF_GLOBALS._walkRegions.disableRegion(12); + BF_GLOBALS._walkRegions.disableRegion(13); } else { _vechile.setPosition(Common::Point(169, 121)); _vechile.fixPriority(117); @@ -1272,7 +1272,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) { } BF_GLOBALS._sceneItems.push_back(&_vechile); - BF_GLOBALS._walkRegions.proc1(11); + BF_GLOBALS._walkRegions.disableRegion(11); _doorway.postInit(); _doorway.setVisage(440); @@ -1575,7 +1575,7 @@ void Scene450::postInit(SceneObjectList *OwnerList) { _object2.changeZoom(-1); _object2.setDetails(450, 2, 18, 3, 1, NULL); - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); _weasel.postInit(); _weasel.setVisage(466); @@ -1622,7 +1622,7 @@ void Scene450::signal() { BF_GLOBALS.setFlag(takenWeasel); _weasel.remove(); _object2.remove(); - BF_GLOBALS._walkRegions.proc2(4); + BF_GLOBALS._walkRegions.enableRegion(4); BF_GLOBALS._player.enableControl(); break; case 4507: diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp index 500cad60b1..d1f1e90234 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.cpp +++ b/engines/tsage/blue_force/blueforce_scenes5.cpp @@ -189,8 +189,8 @@ void Scene550::postInit(SceneObjectList *OwnerList) { _vechile.fixPriority(70); if (BF_GLOBALS.getFlag(fWithLyle)) { - BF_GLOBALS._walkRegions.proc1(10); - BF_GLOBALS._walkRegions.proc1(11); + BF_GLOBALS._walkRegions.disableRegion(10); + BF_GLOBALS._walkRegions.disableRegion(11); _vechile.setVisage(444); _vechile.setStrip(4); @@ -208,7 +208,7 @@ void Scene550::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.setPosition(Common::Point(89, 76)); BF_GLOBALS._player.updateAngle(_lyle._position); } else { - BF_GLOBALS._walkRegions.proc1(12); + BF_GLOBALS._walkRegions.disableRegion(12); _vechile.setPosition(Common::Point(205, 77)); _vechile.changeZoom(80); @@ -296,8 +296,8 @@ void Scene551::Action2::signal() { switch (_actionIndex++) { case 0: - BF_GLOBALS._walkRegions.proc2(18); - BF_GLOBALS._walkRegions.proc2(4); + BF_GLOBALS._walkRegions.enableRegion(18); + BF_GLOBALS._walkRegions.enableRegion(4); scene->_field1CD2 = 1; scene->_harrison.setObjectWrapper(new SceneObjectWrapper()); @@ -316,7 +316,7 @@ void Scene551::Action2::signal() { scene->_harrison.updateAngle(BF_GLOBALS._player._position); if (scene->_drunkStanding._flag == 1) { - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); ADD_PLAYER_MOVER(71, 97); } else { ADD_PLAYER_MOVER(141, 87); @@ -486,7 +486,7 @@ bool Scene551::PatrolCarTrunk::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) != 1) { - BF_GLOBALS._walkRegions.proc2(18); + BF_GLOBALS._walkRegions.enableRegion(18); BF_GLOBALS._player.disableControl(); scene->_sceneMode = 2; scene->setAction(&scene->_sequenceManager, scene, 5503, &BF_GLOBALS._player, &scene->_harrison, this, NULL); @@ -681,7 +681,7 @@ void Scene551::postInit(SceneObjectList *OwnerList) { _vechile2.changeZoom(80); BF_GLOBALS._sceneItems.push_back(&_vechile2); - BF_GLOBALS._walkRegions.proc1(14); + BF_GLOBALS._walkRegions.disableRegion(14); _drunk.postInit(); _drunk.setVisage(550); @@ -812,7 +812,7 @@ void Scene551::signal() { BF_GLOBALS._sceneManager.changeScene(60); break; case 2: - BF_GLOBALS._walkRegions.proc1(18); + BF_GLOBALS._walkRegions.disableRegion(18); _trunkInset.postInit(); _trunkInset.setVisage(553); @@ -850,8 +850,8 @@ void Scene551::signal() { setAction(&_sequenceManager, this, 5507, &BF_GLOBALS._player, &_drunk, &_drunkStanding, NULL); break; case 5507: - BF_GLOBALS._walkRegions.proc1(2); - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(2); + BF_GLOBALS._walkRegions.disableRegion(4); _drunkStanding._flag = 1; BF_GLOBALS._sceneItems.push_front(&_drunkStanding); @@ -2224,10 +2224,10 @@ void Scene580::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.setVisage(303); - BF_GLOBALS._walkRegions.proc1(8); - BF_GLOBALS._walkRegions.proc1(9); - BF_GLOBALS._walkRegions.proc1(10); - BF_GLOBALS._walkRegions.proc1(11); + BF_GLOBALS._walkRegions.disableRegion(8); + BF_GLOBALS._walkRegions.disableRegion(9); + BF_GLOBALS._walkRegions.disableRegion(10); + BF_GLOBALS._walkRegions.disableRegion(11); } else { _vechile.setPosition(Common::Point(159, 72)); diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp index 56fdec47cd..5a651d8475 100644 --- a/engines/tsage/blue_force/blueforce_scenes6.cpp +++ b/engines/tsage/blue_force/blueforce_scenes6.cpp @@ -386,8 +386,8 @@ bool Scene690::Object1::startAction(CursorType action, Event &event) { if ((action == CURSOR_USE) && (scene->_object2._strip == 1)) { BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(1); - BF_GLOBALS._walkRegions.proc2(6); + BF_GLOBALS._walkRegions.enableRegion(1); + BF_GLOBALS._walkRegions.enableRegion(6); scene->_sceneMode = 6901; scene->setAction(&scene->_sequenceManager, scene, 6901, &BF_GLOBALS._player, &scene->_object2, &scene->_object1, &scene->_object4, &scene->_object5, NULL); @@ -500,8 +500,8 @@ void Scene690::signal() { BF_GLOBALS._player.enableControl(); break; case 6903: - BF_GLOBALS._walkRegions.proc1(1); - BF_GLOBALS._walkRegions.proc1(6); + BF_GLOBALS._walkRegions.disableRegion(1); + BF_GLOBALS._walkRegions.disableRegion(6); BF_GLOBALS._player.enableControl(); break; default: diff --git a/engines/tsage/blue_force/blueforce_scenes7.cpp b/engines/tsage/blue_force/blueforce_scenes7.cpp index 2ced7ce08c..21a27640e9 100644 --- a/engines/tsage/blue_force/blueforce_scenes7.cpp +++ b/engines/tsage/blue_force/blueforce_scenes7.cpp @@ -208,7 +208,7 @@ void Scene710::signal() { BF_GLOBALS._player.enableControl(); BF_INVENTORY.setObjectScene(INV_CRATE1, 1); _stick.remove(); - BF_GLOBALS._walkRegions.proc2(2); + BF_GLOBALS._walkRegions.enableRegion(2); break; case 7102: _stick.setPosition(Common::Point(100, 122)); @@ -225,7 +225,7 @@ void Scene710::signal() { _stick._frame = 1; } _v1D62 = 1; - BF_GLOBALS._walkRegions.proc1(2); + BF_GLOBALS._walkRegions.disableRegion(2); if ((_v1D68 != 0) && (_sceneMode != 0)) BF_GLOBALS._player.enableControl(); break; @@ -244,7 +244,7 @@ void Scene710::signal() { case 7104: _sceneMode = 7102; setAction(&_sequenceManager1, this, 7102, &_dog, NULL); - BF_GLOBALS._walkRegions.proc2(2); + BF_GLOBALS._walkRegions.enableRegion(2); break; case 7106: BF_GLOBALS._sound1.fadeOut2(NULL); diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp index c81f3b8d65..4a52f10704 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.cpp +++ b/engines/tsage/blue_force/blueforce_scenes8.cpp @@ -252,12 +252,12 @@ void Scene800::postInit(SceneObjectList *OwnerList) { _car2.fixPriority(158); BF_GLOBALS._sceneItems.push_back(&_car2); - BF_GLOBALS._walkRegions.proc1(8); + BF_GLOBALS._walkRegions.disableRegion(8); } if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark < bEndDayThree)) { _car2.remove(); - BF_GLOBALS._walkRegions.proc2(8); + BF_GLOBALS._walkRegions.enableRegion(8); } if (BF_GLOBALS.getFlag(fWithLyle)) { @@ -427,7 +427,7 @@ void Scene810::Action2::signal() { setAction(&scene->_sequenceManager1, this, 8117, &scene->_lyle, &scene->_chair, NULL); break; case 3: - BF_GLOBALS._walkRegions.proc2(4); + BF_GLOBALS._walkRegions.enableRegion(4); ADD_PLAYER_MOVER_THIS(scene->_lyle, 27, 124); break; case 4: @@ -454,7 +454,7 @@ void Scene810::Action2::signal() { scene->_stripManager.start(BF_GLOBALS.getFlag(onDuty) ? 8137 : 8112, this); break; case 8: - BF_GLOBALS._walkRegions.proc1(13); + BF_GLOBALS._walkRegions.disableRegion(13); BF_GLOBALS._player.enableControl(); remove(); break; @@ -1172,7 +1172,7 @@ void Scene810::signal() { if (BF_GLOBALS.getFlag(shownFax)) { BF_GLOBALS.setFlag(showMugAround); } else { - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); BF_GLOBALS._player.enableControl(); } break; @@ -1225,7 +1225,7 @@ void Scene810::signal() { _object5.setFrame(1); break; case 8196: - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); BF_GLOBALS._player.enableControl(); break; case 8198: @@ -1279,8 +1279,8 @@ void Scene810::dispatch() { } else { BF_GLOBALS.clearFlag(showMugAround); BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(4); - BF_GLOBALS._walkRegions.proc2(13); + BF_GLOBALS._walkRegions.enableRegion(4); + BF_GLOBALS._walkRegions.enableRegion(13); _sceneMode = 8112; setAction(&_sequenceManager1, this, 8112, &BF_GLOBALS._player, &_lyle, NULL); @@ -1296,8 +1296,8 @@ void Scene810::dispatch() { setAction(&_sequenceManager1, this, 8100, &BF_GLOBALS._player, NULL); } else { if (BF_GLOBALS.getFlag(fWithLyle)) { - BF_GLOBALS._walkRegions.proc2(4); - BF_GLOBALS._walkRegions.proc2(13); + BF_GLOBALS._walkRegions.enableRegion(4); + BF_GLOBALS._walkRegions.enableRegion(13); ADD_MOVER_NULL(_lyle, 320, 155); } diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 545edb91d6..af32e6ccc3 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -77,7 +77,7 @@ bool Scene900::Gate::startAction(CursorType action, Event &event) { } else { scene->_sceneMode = 9005; scene->setAction(&scene->_sequenceManager1, scene, 9005, &BF_GLOBALS._player, this, NULL); - BF_GLOBALS._walkRegions.proc2(24); + BF_GLOBALS._walkRegions.enableRegion(24); } } return true; @@ -122,7 +122,7 @@ bool Scene900::Door::startAction(CursorType action, Event &event) { SceneItem::display2(900, 1); } else { BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(26); + BF_GLOBALS._walkRegions.enableRegion(26); scene->_sceneMode = 9007; scene->setAction(&scene->_sequenceManager1, scene, 9007, &BF_GLOBALS._player, &scene->_door, this, NULL); } @@ -488,7 +488,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._v4CEC0 == 2) _gate.setPosition(Common::Point(758, 127)); else { - BF_GLOBALS._walkRegions.proc1(24); + BF_GLOBALS._walkRegions.disableRegion(24); _gate.setPosition(Common::Point(804, 132)); } @@ -515,7 +515,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _door._flag = 1; if ((BF_GLOBALS._sceneManager._previousScene == 880) || (BF_GLOBALS._sceneManager._previousScene != 910)) { - BF_GLOBALS._walkRegions.proc1(26); + BF_GLOBALS._walkRegions.disableRegion(26); BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._bookmark == bFinishedWGreen) { _sceneMode = 9013; @@ -572,7 +572,7 @@ void Scene900::signal() { BF_GLOBALS._sceneManager.changeScene(910); break; case 3: - BF_GLOBALS._walkRegions.proc1(24); + BF_GLOBALS._walkRegions.disableRegion(24); _sceneMode = 9004; setAction(&_sequenceManager1, this, 9006, &BF_GLOBALS._player, &_gate, NULL); break; @@ -589,7 +589,7 @@ void Scene900::signal() { BF_GLOBALS._sceneManager.changeScene(880); break; case 9002: - BF_GLOBALS._walkRegions.proc1(26); + BF_GLOBALS._walkRegions.disableRegion(26); BF_GLOBALS._player.enableControl(); break; case 9004: @@ -606,7 +606,7 @@ void Scene900::signal() { BF_GLOBALS._player.enableControl(); break; case 9006: - BF_GLOBALS._walkRegions.proc1(24); + BF_GLOBALS._walkRegions.disableRegion(24); BF_GLOBALS._player.enableControl(); break; case 9007: @@ -1051,8 +1051,8 @@ bool Scene910::Forbes::startAction(CursorType action, Event &event) { if (action == CURSOR_TALK) { BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(1); - BF_GLOBALS._walkRegions.proc2(16); + BF_GLOBALS._walkRegions.enableRegion(1); + BF_GLOBALS._walkRegions.enableRegion(16); scene->_sceneMode = 9140; scene->setAction(&scene->_sequenceManager1, scene, 9140, &scene->_forbes, &BF_GLOBALS._player, &scene->_lyle, NULL); return true; @@ -2126,10 +2126,10 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _lyle._field90 = 1; _lyle.setDetails(910, 69, 70 ,71 , 5, &_item4); - BF_GLOBALS._walkRegions.proc1(15); - BF_GLOBALS._walkRegions.proc1(16); - BF_GLOBALS._walkRegions.proc1(14); - BF_GLOBALS._walkRegions.proc1(10); + BF_GLOBALS._walkRegions.disableRegion(15); + BF_GLOBALS._walkRegions.disableRegion(16); + BF_GLOBALS._walkRegions.disableRegion(14); + BF_GLOBALS._walkRegions.disableRegion(10); if (BF_GLOBALS.getFlag(gunDrawn)) { BF_GLOBALS._player.setVisage(1911); BF_GLOBALS._player.animate(ANIM_MODE_NONE, 0, NULL); @@ -2202,14 +2202,14 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _fakeWall.setPosition(Common::Point(292, 107)); if (BF_GLOBALS._v4CECC != 2) _yellowCord.setPosition(Common::Point(288, 57)); - BF_GLOBALS._walkRegions.proc1(10); + BF_GLOBALS._walkRegions.disableRegion(10); } else { _object5.setFrame(6); _fakeWall.setPosition(Common::Point(295, 20)); _fakeWall.hide(); if (BF_GLOBALS._v4CECC != 2) _yellowCord.setPosition(Common::Point(291, -30)); - BF_GLOBALS._walkRegions.proc1(10); + BF_GLOBALS._walkRegions.disableRegion(10); } if (BF_GLOBALS._v4CECE[17] != 0) { @@ -2315,8 +2315,8 @@ void Scene910::signal() { _sceneMode = 10; addFader((const byte *)&black, 2, this); BF_GLOBALS._v4CEE2 = 1; - BF_GLOBALS._walkRegions.proc1(16); - BF_GLOBALS._walkRegions.proc1(14); + BF_GLOBALS._walkRegions.disableRegion(16); + BF_GLOBALS._walkRegions.disableRegion(14); BF_GLOBALS._sceneItems.remove(&_item16); break; case 17: @@ -2375,7 +2375,7 @@ void Scene910::signal() { break; case 9100: if (BF_GLOBALS._dayNumber == 5) - BF_GLOBALS._walkRegions.proc1(1); + BF_GLOBALS._walkRegions.disableRegion(1); BF_GLOBALS._player.enableControl(); break; case 9101: @@ -2490,7 +2490,7 @@ void Scene910::signal() { BF_GLOBALS._player.enableControl(); break; case 9120: - BF_GLOBALS._walkRegions.proc1(7); + BF_GLOBALS._walkRegions.disableRegion(7); BF_GLOBALS._player.enableControl(); break; case 9121: @@ -2624,7 +2624,7 @@ void Scene910::signal() { _lyle.setAction(&_sequenceManager2, NULL, 9133, &_lyle, NULL); BF_GLOBALS._v4CECE[14] = 3; subE82BD(); - BF_GLOBALS._walkRegions.proc1(15); + BF_GLOBALS._walkRegions.disableRegion(15); break; case 9132: BF_GLOBALS._player.enableControl(); @@ -2644,7 +2644,7 @@ void Scene910::signal() { BF_GLOBALS.setFlag(fGotPointsForCuffingNico); } _lyle.setAction(&_sequenceManager2, NULL, 9131, &_lyle, NULL); - BF_GLOBALS._walkRegions.proc2(16); + BF_GLOBALS._walkRegions.enableRegion(16); if (BF_GLOBALS._v4CEE2 == 4) BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0); else @@ -2655,7 +2655,7 @@ void Scene910::signal() { setAction(&_sequenceManager1, this, 9139, &_forbes, &BF_GLOBALS._player, NULL); break; case 9139: - BF_GLOBALS._walkRegions.proc1(4); + BF_GLOBALS._walkRegions.disableRegion(4); _field2DE0 = 1; BF_GLOBALS._player.enableControl(); break; @@ -2873,7 +2873,7 @@ void Scene910::subE82BD() { } BF_GLOBALS._v4CEE0 = 1; BF_GLOBALS._player.disableControl(); - BF_GLOBALS._walkRegions.proc2(10); + BF_GLOBALS._walkRegions.enableRegion(10); _sceneMode = 9114; _sound2.play(42); if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910)) @@ -2890,7 +2890,7 @@ void Scene910::subE83E1() { BF_GLOBALS.setFlag(80); } BF_GLOBALS._v4CEE0 = 0; - BF_GLOBALS._walkRegions.proc1(10); + BF_GLOBALS._walkRegions.disableRegion(10); BF_GLOBALS._player.disableControl(); _sceneMode = 9115; _sound2.play(42); @@ -2910,7 +2910,7 @@ void Scene910::subE83E1() { BF_GLOBALS._player.disableControl(); _sceneMode = 9120; BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9120, &BF_GLOBALS._player, &_lyle, NULL); - BF_GLOBALS._walkRegions.proc2(1); + BF_GLOBALS._walkRegions.enableRegion(1); } } diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 455550f6a4..5a51a9c9ef 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -896,24 +896,28 @@ int PlayerMover::calculateRestOfRoute(int *routeList, int srcRegion, int destReg // Check every connected region until we find a route to the destination (or we have no more to check). int bestDistance = 31990; while (((currDest = g_globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + foundIndex]) != 0) && (!foundRoute)) { - int newDistance = calculateRestOfRoute(tempList, currDest, destRegion, foundRoute); + // Only check the region if it isn't in the list of explicitly disabled regions + if (!contains(g_globals->_walkRegions._disabledRegions, (int)currDest)) { + int newDistance = calculateRestOfRoute(tempList, currDest, destRegion, foundRoute); - if ((newDistance <= bestDistance) || foundRoute) { - // We found a shorter possible route, or one leading to the destination. + if ((newDistance <= bestDistance) || foundRoute) { + // We found a shorter possible route, or one leading to the destination. - // Overwrite the route with this new one. - routeList[0] = ourListSize - 1; + // Overwrite the route with this new one. + routeList[0] = ourListSize - 1; - for (int i = ourListSize; i <= tempList[0]; ++i) { - routeList[i] = tempList[i]; - ++routeList[0]; + for (int i = ourListSize; i <= tempList[0]; ++i) { + routeList[i] = tempList[i]; + ++routeList[0]; + } + + bestDistance = newDistance; } - bestDistance = newDistance; + // Truncate our local list to the size it was before the call. + tempList[0] = ourListSize; } - // Truncate our local list to the size it was before the call. - tempList[0] = ourListSize; ++foundIndex; } @@ -3626,6 +3630,39 @@ int WalkRegions::indexOf(const Common::Point &pt, const Common::List *index return -1; } +void WalkRegions::synchronize(Serializer &s) { + // Synchronise the list of disabled regions as a list of values terminated with a '-1' + int regionId; + if (s.isLoading()) { + _disabledRegions.clear(); + + s.syncAsSint16LE(regionId); + while (regionId != -1) { + _disabledRegions.push_back(regionId); + s.syncAsSint16LE(regionId); + } + } else { + Common::List::iterator i; + for (i = _disabledRegions.begin(); i != _disabledRegions.end(); ++i) { + regionId = *i; + s.syncAsSint16LE(regionId); + } + + regionId = -1; + s.syncAsSint16LE(regionId); + } +} + +void WalkRegions::disableRegion(int regionId) { + if (!contains(_disabledRegions, regionId)) + _disabledRegions.push_back(regionId); +} + +void WalkRegions::enableRegion(int regionId) { + _disabledRegions.remove(regionId); +} + + /*--------------------------------------------------------------------------*/ void ScenePriorities::load(int resNum) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 40a33b49b3..1a50d0beae 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -807,8 +807,10 @@ public: Common::Array _field18; Common::Array _idxList; Common::Array _idxList2; + Common::List _disabledRegions; public: WalkRegions() { _resNum = -1; } + virtual void synchronize(Serializer &s); void clear(); void load(int sceneNum); @@ -817,8 +819,8 @@ public: assert((idx >= 1) && (idx <= (int)_regionList.size())); return _regionList[idx - 1]; } - void proc1(int v) { warning("TODO: WalkRegions::proc1"); } - void proc2(int v) { warning("TODO: WalkRegions::proc2"); } + void disableRegion(int regionId); + void enableRegion(int regionId); }; /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index a0e8b9edba..a099f16da3 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -95,6 +95,10 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) { for (uint regionIndex = 0; regionIndex < g_globals->_walkRegions._regionList.size(); ++regionIndex, ++color) { WalkRegion &wr = g_globals->_walkRegions._regionList[regionIndex]; + // Skip the region if it's in the list of explicitly disabled regions + if (contains(g_globals->_walkRegions._disabledRegions, (int)regionIndex + 1)) + continue; + for (int yp = wr._bounds.top; yp < wr._bounds.bottom; ++yp) { LineSliceSet sliceSet = wr.getLineSlices(yp); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 4bcee21b23..9bae180bc6 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -184,6 +184,9 @@ void Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_prevSceneOffset.x); s.syncAsSint16LE(_prevSceneOffset.y); SYNC_POINTER(_scrollFollower); s.syncAsSint32LE(_stripNum); + + if (s.getVersion() >= 8) + _walkRegions.synchronize(s); } void Globals::dispatchSound(ASound *obj) { diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 52b23413d4..207051a182 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -33,7 +33,7 @@ namespace TsAGE { typedef void (*SaveNotifierFn)(bool postFlag); -#define TSAGE_SAVEGAME_VERSION 7 +#define TSAGE_SAVEGAME_VERSION 8 class SavedObject; -- cgit v1.2.3 From 4fc08b977d71648688402ba1c2d5d2543dd9a6e3 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Fri, 28 Oct 2011 06:43:27 +0200 Subject: TSAGE: Silence GCC warning --- engines/tsage/core.h | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 1a50d0beae..f8c4bd5161 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -810,6 +810,7 @@ public: Common::List _disabledRegions; public: WalkRegions() { _resNum = -1; } + virtual ~WalkRegions() {} virtual void synchronize(Serializer &s); void clear(); -- cgit v1.2.3 From 50a7da4e144bf7aaa39968ed0528ffba8fe2f00a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 28 Oct 2011 07:58:04 +0200 Subject: TSAGE: Blue Force - Gang arrest (scene 410) - Fix dialog color for passenger --- engines/tsage/blue_force/blueforce_scenes4.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 4cff38feab..9df47e9796 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -371,21 +371,27 @@ bool Scene410::Passenger::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: if (!BF_GLOBALS.getFlag(fCalledBackup)) { - if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) { + if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) scene->setAction(&scene->_action3); - } else { - SceneItem::display2(410, 5); - } + else + SceneItem::display(410, 5, SET_WIDTH, 300, + SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left, + SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, + SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 96, SET_EXT_BGCOLOR, 99, + SET_EXT_FGCOLOR, 13, LIST_END); } else if (!scene->_field1FBA) { - SceneItem::display2(410, 5); + SceneItem::display(410, 5, SET_WIDTH, 300, + SET_X, 10 + GLOBALS._sceneManager._scene->_sceneBounds.left, + SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, + SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 96, SET_EXT_BGCOLOR, 99, + SET_EXT_FGCOLOR, 13, LIST_END); } else if (!scene->_field1FBE) { scene->_sceneMode = 4121; scene->_field1FBE = 1; T2_GLOBALS._uiElements.addScore(50); scene->signal(); - } else { + } else break; - } return true; case CURSOR_TALK: scene->setAction(&scene->_action5); -- cgit v1.2.3 From b0398cd53bee245f9cee61f4b9070b9ed72800d4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 28 Oct 2011 08:14:03 +0200 Subject: TSAGE: Blue Force - Gang arrest (410): Fix a couple of glitches in logic flow --- engines/tsage/blue_force/blueforce_scenes4.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 9df47e9796..e2b890d167 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -717,6 +717,7 @@ void Scene410::signal() { break; case 7: BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 1); + _sceneMode = 0; signal(); break; case 8: @@ -784,6 +785,7 @@ void Scene410::signal() { BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.updateAngle(Common::Point(100, 170)); BF_GLOBALS._walkRegions.enableRegion(22); + BF_GLOBALS._walkRegions.enableRegion(7); BF_GLOBALS._walkRegions.enableRegion(16); BF_GLOBALS._player.disableControl(); _sceneMode = 0; -- cgit v1.2.3 From 6fd2eff3e94cf43e0f5c60c319ca9c2654d3aa29 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 28 Oct 2011 18:08:08 +0200 Subject: TSAGE: Blue Force - Inside gang car (415): Fix a logic glitch, fix overlapping text when using rap on bullets --- engines/tsage/blue_force/blueforce_scenes4.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index e2b890d167..f32f240a4a 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -962,7 +962,7 @@ bool Scene415::BulletsInset::startAction(CursorType action, Event &event) { Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { - if (BF_GLOBALS.getFlag(fGotAutoWeapon)) { + if (BF_GLOBALS.getFlag(fGotBulletsFromDash)) { FocusObject::startAction(action, event); } else { remove(); @@ -1001,7 +1001,6 @@ bool Scene415::TheBullets::startAction(CursorType action, Event &event) { case INV_FOREST_RAP: if (scene->_scoreBulletRapFlag) { SceneItem::display2(415, 35); - return true; } else { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; @@ -1009,7 +1008,7 @@ bool Scene415::TheBullets::startAction(CursorType action, Event &event) { T2_GLOBALS._uiElements.addScore(50); scene->_scoreBulletRapFlag = true; } - break; + return true; default: break; } -- cgit v1.2.3 From 50302e07a1ebd7fceb6dec9e08d9e2e9841f54d1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 28 Oct 2011 18:23:34 +0200 Subject: TSAGE: Blue Force - Inside gang car (415): Fix 2 focus objects (missing remove()). --- engines/tsage/blue_force/blueforce_scenes4.cpp | 18 ++++++++++++++++++ engines/tsage/blue_force/blueforce_scenes4.h | 2 ++ 2 files changed, 20 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index f32f240a4a..36bb7e0668 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -928,6 +928,17 @@ bool Scene415::GunInset::startAction(CursorType action, Event &event) { } } +void Scene415::GunInset::remove() { + Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene; + + BF_GLOBALS._player.disableControl(); + scene->_gunAndWig.remove(); + FocusObject::remove(); + + scene->_sceneMode = 0; + scene->_object6.animate(ANIM_MODE_6, scene); +} + bool Scene415::GunAndWig::startAction(CursorType action, Event &event) { Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene; @@ -974,6 +985,13 @@ bool Scene415::BulletsInset::startAction(CursorType action, Event &event) { } } +void Scene415::BulletsInset::remove() { + Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene; + + scene->_theBullets.remove(); + FocusObject::remove(); +} + bool Scene415::DashDrawer::startAction(CursorType action, Event &event) { Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene; diff --git a/engines/tsage/blue_force/blueforce_scenes4.h b/engines/tsage/blue_force/blueforce_scenes4.h index 48b48ec7f8..b7f80f0d57 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.h +++ b/engines/tsage/blue_force/blueforce_scenes4.h @@ -133,6 +133,7 @@ class Scene415: public SceneExt { class GunInset: public FocusObject { public: virtual bool startAction(CursorType action, Event &event); + virtual void remove(); }; class GunAndWig: public NamedObject { public: @@ -141,6 +142,7 @@ class Scene415: public SceneExt { class BulletsInset: public FocusObject { public: virtual bool startAction(CursorType action, Event &event); + virtual void remove(); }; class DashDrawer: public NamedObject { public: -- cgit v1.2.3 From acaedcce700ac1292a4225ebd41d34a764ce5ef9 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 28 Oct 2011 18:30:06 +0200 Subject: TSAGE: Blue Force - Inside gang car (415): rename object6 --- engines/tsage/blue_force/blueforce_scenes4.cpp | 14 +++++++------- engines/tsage/blue_force/blueforce_scenes4.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index 36bb7e0668..deff4f2518 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -936,7 +936,7 @@ void Scene415::GunInset::remove() { FocusObject::remove(); scene->_sceneMode = 0; - scene->_object6.animate(ANIM_MODE_6, scene); + scene->_animatedSeat.animate(ANIM_MODE_6, scene); } bool Scene415::GunAndWig::startAction(CursorType action, Event &event) { @@ -1046,7 +1046,7 @@ bool Scene415::Lever::startAction(CursorType action, Event &event) { } else { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 2; - scene->setAction(&scene->_sequenceManager, scene, 4150, &scene->_object6, NULL); + scene->setAction(&scene->_sequenceManager, scene, 4150, &scene->_animatedSeat, NULL); } return true; default: @@ -1078,11 +1078,11 @@ void Scene415::postInit(SceneObjectList *OwnerList) { _dashDrawer.setPosition(Common::Point(151, 97)); _dashDrawer.setDetails(415, 22, -1, -1, 1, NULL); - _object6.postInit(); - _object6.setVisage(419); - _object6.setStrip(1); - _object6.setPosition(Common::Point(306, 116)); - _object6.fixPriority(80); + _animatedSeat.postInit(); + _animatedSeat.setVisage(419); + _animatedSeat.setStrip(1); + _animatedSeat.setPosition(Common::Point(306, 116)); + _animatedSeat.fixPriority(80); _windowLever.setDetails(16, 415, 25, -1, 26, 1); _item7.setDetails(17, 415, 32, -1, 33, 1); diff --git a/engines/tsage/blue_force/blueforce_scenes4.h b/engines/tsage/blue_force/blueforce_scenes4.h index b7f80f0d57..937c015a4c 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.h +++ b/engines/tsage/blue_force/blueforce_scenes4.h @@ -168,7 +168,7 @@ public: BulletsInset _bulletsInset; DashDrawer _dashDrawer; TheBullets _theBullets; - NamedObject _object6; + NamedObject _animatedSeat; NamedHotspot _item1, _steeringWheel, _horn, _dashboard; NamedHotspot _seat, _windowLever, _item7, _seatBelt; Lever _lever; -- cgit v1.2.3 From d186fcf3434a2c25a7dcde147df9859e76fdc364 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 29 Oct 2011 00:46:32 +0200 Subject: TSAGE: Blue Force - In PD (315): rename several variables --- engines/tsage/blue_force/blueforce_scenes3.cpp | 73 ++++++++++++-------------- engines/tsage/blue_force/blueforce_scenes3.h | 4 +- 2 files changed, 36 insertions(+), 41 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index d1ed2cd5e6..a0238c127c 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -638,7 +638,7 @@ bool Scene315::Barry::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (scene->_field1B60 || scene->_field1B64) + if (scene->_invGreenCount || scene->_invGangCount) SceneItem::display2(320, 51); else NamedHotspot::startAction(action, event); @@ -667,7 +667,7 @@ bool Scene315::Barry::startAction(CursorType action, Event &event) { scene->_stripNumber = 3174; scene->setAction(&scene->_action1); } else { - ++scene->_field1B62; + ++scene->_bookGreenCount; scene->_stripNumber = (action == INV_GREENS_GUN) ? 3168 : 0; scene->_sceneMode = 3153; scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL); @@ -717,8 +717,8 @@ bool Scene315::Barry::startAction(CursorType action, Event &event) { scene->_stripNumber = 3174; scene->setAction(&scene->_action1); } else { - ++scene->_field1B66; - if (!scene->_field1B6C && (scene->_field1B66 == 1)) { + ++scene->_bookGangCount; + if (!scene->_field1B6C && (scene->_bookGangCount == 1)) { scene->_field1B6C = 1; scene->_stripNumber = 3169; } else { @@ -759,9 +759,9 @@ bool Scene315::SutterSlot::startAction(CursorType action, Event &event) { case INV_BOOKING_FRANKIE: case INV_BOOKING_GANG: if (action == INV_BOOKING_GREEN) - ++scene->_field1B62; + ++scene->_bookGreenCount; else - ++scene->_field1B66; + ++scene->_bookGangCount; BF_GLOBALS._player.disableControl(); scene->_sceneMode = 12; @@ -958,8 +958,8 @@ Scene315::Scene315() { BF_GLOBALS.clearFlag(fCanDrawGun); _field1B68 = true; _field1B6A = false; - _field1B60 = _field1B62 = 0; - _field1B64 = _field1B66 = 0; + _invGreenCount = _bookGreenCount = 0; + _invGangCount = _bookGangCount = 0; } void Scene315::synchronize(Serializer &s) { @@ -968,10 +968,10 @@ void Scene315::synchronize(Serializer &s) { s.syncAsSint16LE(_field1390); s.syncAsSint16LE(_stripNumber); s.syncAsSint16LE(_field1398); - s.syncAsSint16LE(_field1B60); - s.syncAsSint16LE(_field1B62); - s.syncAsSint16LE(_field1B64); - s.syncAsSint16LE(_field1B66); + s.syncAsSint16LE(_invGreenCount); + s.syncAsSint16LE(_bookGreenCount); + s.syncAsSint16LE(_invGangCount); + s.syncAsSint16LE(_bookGangCount); s.syncAsSint16LE(_field1B6C); s.syncAsSint16LE(_field139C); s.syncAsByte(_field1B68); @@ -980,6 +980,7 @@ void Scene315::synchronize(Serializer &s) { } void Scene315::postInit(SceneObjectList *OwnerList) { + SceneExt::postInit(OwnerList); loadScene(315); if (BF_GLOBALS._sceneManager._previousScene != 325) @@ -1061,24 +1062,24 @@ void Scene315::postInit(SceneObjectList *OwnerList) { // Set up evidence objects in inventory if (BF_INVENTORY._bookingGreen.inInventory()) - ++_field1B60; + ++_invGreenCount; if (BF_INVENTORY._greensGun.inInventory()) - ++_field1B60; + ++_invGreenCount; if (BF_INVENTORY._greensKnife.inInventory()) - ++_field1B60; + ++_invGreenCount; if (BF_INVENTORY._bullet22.inInventory()) - ++_field1B64; + ++_invGangCount; if (BF_INVENTORY._autoRifle.inInventory()) - ++_field1B64; + ++_invGangCount; if (BF_INVENTORY._wig.inInventory()) - ++_field1B64; + ++_invGangCount; if (BF_INVENTORY._bookingFrankie.inInventory()) - ++_field1B64; + ++_invGangCount; if (BF_INVENTORY._bookingGang.inInventory()) - ++_field1B64; + ++_invGangCount; if (BF_INVENTORY._snub22.inInventory()) - ++_field1B64; + ++_invGangCount; switch (BF_GLOBALS._sceneManager._previousScene) { case 190: @@ -1135,15 +1136,15 @@ void Scene315::signal() { BF_GLOBALS._player.enableControl(); break; case 10: - if (_field1B62) { - if (_field1B62 >= _field1B60) + if (_bookGreenCount) { + if (_bookGreenCount >= _invGreenCount) BF_GLOBALS.setFlag(fLeftTraceIn910); else ++ctr; } - if (_field1B66) { - if (_field1B66 < _field1B64) + if (_bookGangCount) { + if (_bookGangCount < _invGangCount) ++ctr; else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence) BF_GLOBALS._bookmark = bBookedFrankieEvidence; @@ -1158,15 +1159,15 @@ void Scene315::signal() { BF_GLOBALS._sound1.fadeOut2(NULL); break; case 11: - if (_field1B62) { - if (_field1B62 >= _field1B60) + if (_bookGreenCount) { + if (_bookGreenCount >= _invGreenCount) BF_GLOBALS.setFlag(fLeftTraceIn910); else ++ctr; } - if (_field1B66) { - if (_field1B66 < _field1B64) + if (_bookGangCount) { + if (_bookGangCount < _invGangCount) ++ctr; else if (BF_GLOBALS._bookmark < bBookedFrankie) BF_GLOBALS._bookmark = bBookedFrankie; @@ -1195,7 +1196,7 @@ void Scene315::signal() { T2_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene((int)_currentCursor, 315); - if (!_field1B64 || (_field1B66 != _field1B64)) + if (!_invGangCount || (_bookGangCount != _invGangCount)) BF_GLOBALS._player.enableControl(); else { _field139C = 1; @@ -1217,7 +1218,8 @@ void Scene315::signal() { BF_GLOBALS._walkRegions.disableRegion(4); _object7.remove(); _object6.remove(); - + // No break on purpose + case 3155: BF_GLOBALS._player.enableControl(); _field1B68 = false; BF_GLOBALS._walkRegions.disableRegion(4); @@ -1230,7 +1232,7 @@ void Scene315::signal() { if (_stripNumber != 0) setAction(&_action1); - else if (!_field1B64 || (_field1B66 != _field1B64)) + else if (!_invGangCount || (_bookGangCount != _invGangCount)) BF_GLOBALS._player.enableControl(); else { _stripNumber = 3171; @@ -1238,13 +1240,6 @@ void Scene315::signal() { _field139C = 1; } break; - case 3155: - BF_GLOBALS._player.enableControl(); - _field1B68 = false; - BF_GLOBALS._walkRegions.disableRegion(4); - T2_GLOBALS._uiElements._active = true; - T2_GLOBALS._uiElements.show(); - break; case 3156: T2_GLOBALS._uiElements.addScore(10); BF_INVENTORY.setObjectScene(INV_DA_NOTE, 1); diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index 73fcef2851..3e49df7e4a 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -213,8 +213,8 @@ public: int _field1390; int _stripNumber; int _field1398; - int _field1B60, _field1B62, _field1B64; - int _field1B66, _field1B6C, _field139C; + int _invGreenCount, _bookGreenCount, _invGangCount; + int _bookGangCount, _field1B6C, _field139C; bool _field1B68, _field1B6A; CursorType _currentCursor; -- cgit v1.2.3 From d7af9b517e9c131c84f6c50a7dc4c4a639b2206e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 29 Oct 2011 19:51:01 +1100 Subject: TSAGE: Bugfix to clear the list of disabled regions when the scene changes --- engines/tsage/core.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 5a51a9c9ef..dd5c604b29 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -3458,6 +3458,7 @@ void WalkRegions::clear() { _field18.clear(); _idxList.clear(); _idxList2.clear(); + _disabledRegions.clear(); } void WalkRegions::load(int sceneNum) { -- cgit v1.2.3 From fc632a2b09e24a47e8947908c34b4d4bc6c599b3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 29 Oct 2011 11:01:09 +0200 Subject: TSAGE: Rename one more variable in scene 315 (PD) --- engines/tsage/blue_force/blueforce_scenes3.cpp | 12 ++++++------ engines/tsage/blue_force/blueforce_scenes3.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index a0238c127c..29c62558a3 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -957,7 +957,7 @@ Scene315::Scene315() { BF_GLOBALS.clearFlag(fCanDrawGun); _field1B68 = true; - _field1B6A = false; + _doorOpened = false; _invGreenCount = _bookGreenCount = 0; _invGangCount = _bookGangCount = 0; } @@ -975,7 +975,7 @@ void Scene315::synchronize(Serializer &s) { s.syncAsSint16LE(_field1B6C); s.syncAsSint16LE(_field139C); s.syncAsByte(_field1B68); - s.syncAsByte(_field1B6A); + s.syncAsByte(_doorOpened); s.syncAsSint16LE(_currentCursor); } @@ -1084,7 +1084,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { switch (BF_GLOBALS._sceneManager._previousScene) { case 190: if (_field1398) - _field1B6A = true; + _doorOpened = true; _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 3150 : 3165; setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL); break; @@ -1100,7 +1100,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { case 300: default: if (_field1398) - _field1B6A = true; + _doorOpened = true; if (!BF_GLOBALS.getFlag(onDuty)) _sceneMode = 3166; else if (!_field1398) @@ -1112,7 +1112,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { break; } - if (_field1B6A) { + if (_doorOpened) { _object8.setFrame(8); } else { BF_GLOBALS._walkRegions.disableRegion(4); @@ -1313,7 +1313,7 @@ void Scene315::dispatch() { if (_field1B68) return; - if (_field1B6A) { + if (_doorOpened) { if (BF_GLOBALS._player._position.y < 69) { BF_GLOBALS._player.disableControl(); _field1B68 = true; diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index 3e49df7e4a..2cff4d5df8 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -215,7 +215,7 @@ public: int _field1398; int _invGreenCount, _bookGreenCount, _invGangCount; int _bookGangCount, _field1B6C, _field139C; - bool _field1B68, _field1B6A; + bool _field1B68, _doorOpened; CursorType _currentCursor; Scene315(); -- cgit v1.2.3 From a01003849208dbfa9364813863b7a2f66a5df023 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sat, 29 Oct 2011 11:23:44 +0200 Subject: JANITORIAL: Remove unnecessary semicolons --- engines/tsage/ringworld/ringworld_scenes5.cpp | 2 +- engines/tsage/ringworld/ringworld_scenes6.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 3cf1207e9e..2090bc5da7 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -2173,7 +2173,7 @@ void Scene4050::Action4::signal() { case 5: scene->_hotspot16.setStrip2(4); scene->_hotspot16.setFrame(1); - scene->_hotspot16.animate(ANIM_MODE_4, 4, 1, this);; + scene->_hotspot16.animate(ANIM_MODE_4, 4, 1, this); break; case 6: scene->_hotspot16.animate(ANIM_MODE_5, NULL); diff --git a/engines/tsage/ringworld/ringworld_scenes6.cpp b/engines/tsage/ringworld/ringworld_scenes6.cpp index 57a073caee..30a91b57aa 100644 --- a/engines/tsage/ringworld/ringworld_scenes6.cpp +++ b/engines/tsage/ringworld/ringworld_scenes6.cpp @@ -1124,7 +1124,7 @@ void Scene5100::postInit(SceneObjectList *OwnerList) { _hotspot4.setVisage(5363); _hotspot4.setPosition(Common::Point(1025, 65)); _hotspot4.setStrip(4); - _hotspot4.animate(ANIM_MODE_7, 0, NULL);; + _hotspot4.animate(ANIM_MODE_7, 0, NULL); g_globals->_sceneItems.push_back(&_hotspot4); _hotspot9.postInit(); -- cgit v1.2.3 From 042d3ddf8566ff0738e81470203e9b3ee7a6d598 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 29 Oct 2011 17:15:53 +0200 Subject: TSAGE: Blue Force - Beach (710): Fix a wrong delay, rename several variables and change their type --- engines/tsage/blue_force/blueforce_scenes7.cpp | 40 ++++++++++++++------------ engines/tsage/blue_force/blueforce_scenes7.h | 5 +++- 2 files changed, 25 insertions(+), 20 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes7.cpp b/engines/tsage/blue_force/blueforce_scenes7.cpp index 21a27640e9..7b84e3ccdd 100644 --- a/engines/tsage/blue_force/blueforce_scenes7.cpp +++ b/engines/tsage/blue_force/blueforce_scenes7.cpp @@ -37,7 +37,7 @@ namespace BlueForce { void Scene710::Timer1::signal() { PaletteRotation *rotation = BF_GLOBALS._scenePalette.addRotation(136, 138, -1); - rotation->setDelay(25); + rotation->setDelay(20); rotation = BF_GLOBALS._scenePalette.addRotation(146, 148, -1); rotation->setDelay(30); rotation = BF_GLOBALS._scenePalette.addRotation(187, 191, -1); @@ -113,19 +113,19 @@ bool Scene710::Object5::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_LOOK: - if (scene->_v1D64 <= 2) + if (scene->_stickThrowCount <= 2) return NamedObject::startAction(action, event); else { SceneItem::display2(710, 3); - scene->_v1D66 = 1; + scene->_watchCrate = true; return true; } case CURSOR_USE: - if ((scene->_kid._position.x < 0) && (scene->_v1D62 == 1)) { - scene->_v1D64++; - if (scene->_v1D66 == 0) { + if ((scene->_kid._position.x < 0) && (scene->_dogLying)) { + scene->_stickThrowCount++; + if (!scene->_watchCrate) { BF_GLOBALS._player.disableControl(); - scene->_v1D62 = 0; + scene->_dogLying = false; scene->_sceneMode = 7105; scene->setAction(&scene->_sequenceManager1, scene, 7105, &BF_GLOBALS._player, &scene->_stick, &scene->_dog, NULL); } else { @@ -187,7 +187,8 @@ void Scene710::postInit(SceneObjectList *OwnerList) { _item7.setDetails(Rect(0, 0, 640, 52), 710, 11, 17, -1, 1, NULL); _item9.setDetails(Rect(0, 0, 640, 128), 710, 5, 15, -1, 1, NULL); - _v1D62 = _v1D64 = _v1D66 = _v1D68 = 0; + _stickThrowCount = 0; + _dogLying = _watchCrate = _throwStick = false; _action1._state = 7100; _timer1.set(2, NULL); _sceneMode = 7100; @@ -205,6 +206,7 @@ void Scene710::signal() { setAction(&_sequenceManager1, this, 7102, &_dog, NULL); break; case 7101: + // Pick up crate part BF_GLOBALS._player.enableControl(); BF_INVENTORY.setObjectScene(INV_CRATE1, 1); _stick.remove(); @@ -214,19 +216,19 @@ void Scene710::signal() { _stick.setPosition(Common::Point(100, 122)); _stick.animate(ANIM_MODE_NONE, NULL); _stick._strip = 2; - if (_v1D64 <= 2) + if (_stickThrowCount <= 2) _stick._frame = 2; else { - if (_v1D64 == 3) { + if (_stickThrowCount == 3) { BF_GLOBALS._player.disableControl(); _sceneMode = 0; _stripManager.start(7108, this); } _stick._frame = 1; } - _v1D62 = 1; + _dogLying = true; BF_GLOBALS._walkRegions.disableRegion(2); - if ((_v1D68 != 0) && (_sceneMode != 0)) + if ((_throwStick) && (_sceneMode != 0)) BF_GLOBALS._player.enableControl(); break; case 7103: @@ -239,7 +241,7 @@ void Scene710::signal() { } break; case 7105: - _v1D68 = 1; + _throwStick = true; // No break on purpose case 7104: _sceneMode = 7102; @@ -256,8 +258,8 @@ void Scene710::signal() { } void Scene710::dispatch() { - if ((_kid._position.x > 0) && (_v1D62 == 1) && (_sceneMode != 7106)) { - _v1D62 = 0; + if ((_kid._position.x > 0) && (_dogLying) && (_sceneMode != 7106)) { + _dogLying = false; _sceneMode = 7103; setAction(&_sequenceManager1, this, 7103, &_kid, &_stick, &_dog, NULL); } @@ -266,10 +268,10 @@ void Scene710::dispatch() { void Scene710::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_v1D62); - s.syncAsSint16LE(_v1D64); - s.syncAsSint16LE(_v1D66); - s.syncAsSint16LE(_v1D68); + s.syncAsSint16LE(_dogLying); + s.syncAsSint16LE(_stickThrowCount); + s.syncAsSint16LE(_watchCrate); + s.syncAsSint16LE(_throwStick); } diff --git a/engines/tsage/blue_force/blueforce_scenes7.h b/engines/tsage/blue_force/blueforce_scenes7.h index 91bd1e537f..161d94cc2c 100644 --- a/engines/tsage/blue_force/blueforce_scenes7.h +++ b/engines/tsage/blue_force/blueforce_scenes7.h @@ -89,7 +89,10 @@ public: NamedHotspot _item7; NamedHotspot _item8; NamedHotspot _item9; - int _v1D62, _v1D64, _v1D66, _v1D68; + int _stickThrowCount; + bool _dogLying; + bool _watchCrate; + bool _throwStick; virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); -- cgit v1.2.3 From b3bd18668c7215620c4e1481819c8f87742f2338 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 30 Oct 2011 09:10:34 +1100 Subject: TSAGE: Fixed palette rotation effects in Blue Force --- engines/tsage/core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index dd5c604b29..da8450e499 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1081,7 +1081,7 @@ void PaletteRotation::signal() { uint32 frameNumber = g_globals->_events.getFrameNumber(); if (frameNumber >= _frameNumber) { - _delayCtr = frameNumber - _frameNumber; + _delayCtr -= frameNumber - _frameNumber; _frameNumber = frameNumber; if (_delayCtr < 0) -- cgit v1.2.3 From 38ce3011fc8aa999a0e3514b09530d1e5cb1f238 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 30 Oct 2011 07:34:34 +0100 Subject: TSAGE: Blue Force - Change the type of two variables (Office, 560) --- engines/tsage/blue_force/blueforce_scenes5.cpp | 20 ++++++++++---------- engines/tsage/blue_force/blueforce_scenes5.h | 3 ++- 2 files changed, 12 insertions(+), 11 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp index d1f1e90234..f5f05c8148 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.cpp +++ b/engines/tsage/blue_force/blueforce_scenes5.cpp @@ -924,7 +924,7 @@ void Scene560::Action1::signal() { scene->_deskChair.setStrip(BF_GLOBALS._player._strip); scene->_deskChair.setPosition(BF_GLOBALS._player._position); - scene->_field380 = 1; + scene->_field380 = true; BF_GLOBALS._player.enableControl(); remove(); break; @@ -950,7 +950,7 @@ void Scene560::Action2::signal() { BF_GLOBALS._player.animate(ANIM_MODE_6, this); break; case 2: - scene->_field380 = 0; + scene->_field380 = false; scene->_deskChair.setPosition(Common::Point(81, 149)); scene->_deskChair.setVisage(561); scene->_deskChair.setStrip(3); @@ -1378,7 +1378,7 @@ bool Scene560::Computer::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ Scene560::Scene560(): SceneExt() { - _field380 = _field11EA = 0; + _field380 = _field11EA = false; } void Scene560::postInit(SceneObjectList *OwnerList) { @@ -1433,12 +1433,12 @@ void Scene560::postInit(SceneObjectList *OwnerList) { _deskChair.setStrip(BF_GLOBALS._player._strip); _deskChair.setPosition(BF_GLOBALS._player._position); - _field11EA = 0; - _field380 = 1; + _field11EA = false; + _field380 = true; } else { // Entering study through doorway - _field11EA = 0; - _field380 = 0; + _field11EA = false; + _field380 = false; BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(563); @@ -1529,7 +1529,7 @@ void Scene560::signal() { } break; case 10: - _field11EA = 0; + _field11EA = false; BF_GLOBALS._player.enableControl(); break; case 11: @@ -1540,7 +1540,7 @@ void Scene560::signal() { void Scene560::process(Event &event) { if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && - (_field380 == 1) && !_action) { + (_field380) && !_action) { _destPosition = event.mousePos; BF_GLOBALS._player.disableControl(); setAction(&_action2); @@ -1553,7 +1553,7 @@ void Scene560::process(Event &event) { void Scene560::dispatch() { if (!_field11EA && (BF_GLOBALS._player._position.y < 105)) { - _field11EA = 1; + _field11EA = true; BF_GLOBALS._player.disableControl(); BF_GLOBALS._sceneManager.changeScene(270); } diff --git a/engines/tsage/blue_force/blueforce_scenes5.h b/engines/tsage/blue_force/blueforce_scenes5.h index 34328ab9e8..76bf4cdbc3 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.h +++ b/engines/tsage/blue_force/blueforce_scenes5.h @@ -228,7 +228,8 @@ public: NamedHotspot _chair, _lamp, _item4, _trophy, _watercolours, _fileCabinets; NamedHotspot _certificate, _bookcase, _desk, _carpet, _item12, _office; ASound _sound1; - int _field380, _field11EA; + bool _field380; + bool _field11EA; Common::Point _destPosition; Scene560(); -- cgit v1.2.3 From 002b6ec5725dd8243efff776e4749013714c31fc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 30 Oct 2011 08:49:39 +0100 Subject: TSAGE: intro, bar (109): fix a couple of glitches, rename some objects. Drunk and Neon still not animated properly --- engines/tsage/blue_force/blueforce_scenes1.cpp | 44 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes1.h | 4 +-- 2 files changed, 24 insertions(+), 24 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 425446d6fb..c73f3f8499 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -243,8 +243,8 @@ void Scene109::Action1::signal() { scene->_drunk.show(); scene->_drunk.setAction(&scene->_action3); scene->_object2.show(); - scene->_object9.show(); - scene->_object9.setAction(&scene->_action2); + scene->_beerSign.show(); + scene->_beerSign.setAction(&scene->_action2); BF_GLOBALS._v501FC = 170; setDelay(60); @@ -257,27 +257,27 @@ void Scene109::Action1::signal() { break; case 5: // Open briefcase and pass over disk - setAction(&scene->_sequenceManager6, this, 105, &scene->_object10, NULL); + setAction(&scene->_sequenceManager6, this, 105, &scene->_animationInset, NULL); break; case 6: // Protaginist 2 walk to the bar - scene->_object10.remove(); + scene->_animationInset.remove(); setAction(&scene->_sequenceManager6, this, 100, &scene->_protaginist2, NULL); break; case 7: // Two thugs enter and walk to table - scene->_object7.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_object7, NULL); - scene->_object5.setAction(&scene->_sequenceManager8, this, 102, &scene->_object5, NULL); + scene->_cop2.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_cop2, NULL); + scene->_cop1.setAction(&scene->_sequenceManager8, this, 102, &scene->_cop1, NULL); scene->_protaginist2.setAction(&scene->_sequenceManager6, NULL, 104, &scene->_protaginist2, &scene->_bartender, NULL); break; case 8: // Protaginist 1 leaves, protaginist 2 stands up - setAction(&scene->_sequenceManager8, this, 101, &scene->_object5, &scene->_protaginist1, NULL); + setAction(&scene->_sequenceManager8, this, 101, &scene->_cop1, &scene->_protaginist1, NULL); break; case 9: // Shots fired! scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL); - scene->_object7.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_object7, NULL); + scene->_cop2.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_cop2, NULL); break; case 10: // End scene @@ -289,12 +289,12 @@ void Scene109::Action1::signal() { void Scene109::Action2::signal() { Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; - scene->setAction(&scene->_sequenceManager2, this, 3117, &scene->_object9, NULL); + setAction(&scene->_sequenceManager2, this, 3117, &scene->_beerSign, NULL); } void Scene109::Action3::signal() { Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; - scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL); + setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL); } /*--------------------------------------------------------------------------*/ @@ -353,21 +353,21 @@ void Scene109::postInit(SceneObjectList *OwnerList) { _object2.setPosition(Common::Point(104, 64)); _object2.hide(); - _object9.postInit(); - _object9.setVisage(115); - _object9.setStrip(4); - _object9.setFrame(1); - _object9.setPosition(Common::Point(262, 29)); - _object9.hide(); + _beerSign.postInit(); + _beerSign.setVisage(115); + _beerSign.setStrip(4); + _beerSign.setFrame(1); + _beerSign.setPosition(Common::Point(262, 29)); + _beerSign.hide(); - _object5.postInit(); - _object5.hide(); + _cop1.postInit(); + _cop1.hide(); - _object7.postInit(); - _object7.hide(); + _cop2.postInit(); + _cop2.hide(); - _object10.postInit(); - _object10.hide(); + _animationInset.postInit(); + _animationInset.hide(); BF_GLOBALS._player.disableControl(); setAction(&_action1, this); diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index bdf414ec9b..97450aa5b0 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -99,8 +99,8 @@ public: SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3; SequenceManager _sequenceManager4, _sequenceManager5, _sequenceManager6; SequenceManager _sequenceManager7, _sequenceManager8; - SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5; - SceneObject _drunk, _object7, _bartender, _object9, _object10; + SceneObject _object1, _object2, _protaginist2, _protaginist1, _cop1; + SceneObject _drunk, _cop2, _bartender, _beerSign, _animationInset; IntroSceneText _text; Action1 _action1; Action _action2, _action3; -- cgit v1.2.3 From 7bc23905143f11f44ea8b566dbafa20cddbcdf9b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 30 Oct 2011 19:05:08 +1100 Subject: TSAGE: Bugfix for drunk and beer sign to animate correctly --- engines/tsage/blue_force/blueforce_scenes1.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 97450aa5b0..403fbfbab6 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -103,7 +103,8 @@ public: SceneObject _drunk, _cop2, _bartender, _beerSign, _animationInset; IntroSceneText _text; Action1 _action1; - Action _action2, _action3; + Action2 _action2; + Action3 _action3; public: Scene109(); -- 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/core.cpp | 23 + engines/tsage/core.h | 10 + engines/tsage/events.h | 4 +- engines/tsage/globals.cpp | 11 + engines/tsage/globals.h | 5 + engines/tsage/ringworld2/ringworld2_logic.cpp | 5 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 767 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 56 ++ engines/tsage/sound.h | 9 + engines/tsage/staticres.cpp | 13 + engines/tsage/staticres.h | 7 + 11 files changed, 907 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index da8450e499..7ad4eff585 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2929,6 +2929,16 @@ Player::Player(): SceneObject() { _enabled = false; _uiEnabled = false; _field8C = 0; + + // Return to Ringworld specific fields + _characterIndex = 0; + _oldSceneNumber = 0; + + for (int i = 0; i < MAX_CHARACTERS; ++i) { + _characterScene[i] = 0; + _characterStrip[i] = 0; + _characterFrame[i] = 0; + } } void Player::postInit(SceneObjectList *OwnerList) { @@ -3017,6 +3027,19 @@ void Player::synchronize(Serializer &s) { if (g_vm->getGameID() != GType_Ringworld) s.syncAsByte(_enabled); + + if (g_vm->getGameID() == GType_Ringworld2) { + s.syncAsSint16LE(_characterIndex); + s.syncAsSint16LE(_oldSceneNumber); + + for (int i = 0; i < MAX_CHARACTERS; ++i) { + s.syncAsSint16LE(_characterScene[i]); + s.syncAsSint16LE(_characterPos[i].x); + s.syncAsSint16LE(_characterPos[i].y); + s.syncAsSint16LE(_characterStrip[i]); + s.syncAsSint16LE(_characterFrame[i]); + } + } } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/core.h b/engines/tsage/core.h index f8c4bd5161..b553db67d9 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -616,12 +616,22 @@ public: virtual void updateScreen(); }; +#define MAX_CHARACTERS 4 + class Player : public SceneObject { public: bool _canWalk; bool _uiEnabled; int _field8C; bool _enabled; + + // Return to Ringworld specific fields + int _characterIndex; + int _oldSceneNumber; + int _characterScene[MAX_CHARACTERS]; + Common::Point _characterPos[MAX_CHARACTERS]; + int _characterStrip[MAX_CHARACTERS]; + int _characterFrame[MAX_CHARACTERS]; public: Player(); diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 67d56ceb87..2ffa862ca6 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -83,8 +83,8 @@ enum CursorType { INV_CARAVAN_KEY = 67, BF_LAST_INVENT = 68, // Ringworld 2 objects - R2_1 = 1, R2_2 = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, R2_5 = 5, R2_6 = 6, R2_7 = 7, - R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_14 = 14, + R2_OPTO_DISK = 1, R2_2 = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, R2_5 = 5, R2_6 = 6, + R2_7 = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_14 = 14, R2_15 = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21, R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, R2_26 = 26, R2_27 = 27, R2_28 = 28, R2_29 = 29, R2_30 = 30, R2_31 = 31, R2_32 = 32, R2_33 = 33, R2_34 = 34, R2_35 = 35, diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 9bae180bc6..5baf7b7041 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -367,10 +367,21 @@ void Ringworld2Globals::reset() { R2_INVENTORY.reset(); T2_GLOBALS._uiElements.updateInventory(); T2_GLOBALS._uiElements._active = false; + + // Reset fields + _v5657C = 0; + _v565F5 = 0; + _diskScene = 0; + _v57C2C = 0; } void Ringworld2Globals::synchronize(Serializer &s) { TsAGE2Globals::synchronize(s); + + s.syncAsSint16LE(_v5657C); + s.syncAsSint16LE(_v565F5); + s.syncAsSint16LE(_diskScene); + s.syncAsSint16LE(_v57C2C); } } // end of namespace Ringworld2 diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 1e50c08f56..14cf590f38 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -243,6 +243,11 @@ namespace Ringworld2 { class Ringworld2Globals: public TsAGE2Globals { public: ASoundExt _sound1, _sound2, _sound3, _sound4; + PlayStream _playStream; + int _diskScene; + int _v565F5; + int _v5657C; + int _v57C2C; virtual void reset(); virtual void synchronize(Serializer &s); 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 diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 2c5d2ac951..3eb2432563 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -414,6 +414,15 @@ public: virtual void signal(); }; +class PlayStream { +public: + Sound _sound; + + void setFile(const Common::String &filename) {} + void play(int soundNum, EventHandler *endAction) {} + void stop() {} + void proc1() {} +}; #define ADLIB_CHANNEL_COUNT 9 diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index c98d9d2e53..a6e6eae84e 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -180,4 +180,17 @@ const char *THE_NEXT_DAY = "The Next Day"; } // End of namespace BlueForce +namespace Ringworld2 { + +const char *CONSOLE_MESSAGES[] = { + NULL, "Select Language", "Computer Services", "Food Services", "Entertainment Services", + "Main Menu", "Exit Menu", "Previous Menu", "Interworld", "Hero's Tongue", "Personal Log", + "Database", "Starchart", "Iso-Opto Disk Reader", "Eject Disk", "Meals", "Snacks", + "Beverages", "Human Basic Snacks", "Kzin Basic Snacks", "Hot Beverages", "Cold Beverages", + "Music", "Outpost Alpha", " ", " ", "Done", "A-G", "H-O", "P-S", "T-Z", "Tchaikovsky", + "Mozart", "Bach", "Rossini" +}; + +} // End of namespace Ringworld2 + } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 203fa1481d..b2c0b0f262 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -143,6 +143,13 @@ extern const char *THE_NEXT_DAY; } // End of namespace BlueForce +namespace Ringworld2 { + +// Scene 125 - Console messages +extern const char *CONSOLE_MESSAGES[]; + +} // End of namespace Ringworld2 + } // End of namespace TsAGE #endif -- cgit v1.2.3 From e20626dfa8f94b9fccbf8599581ca5205870a1c0 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 30 Oct 2011 10:50:20 +0100 Subject: TSAGE: Blue Force - Logo: Fix a glitch in scene initialisation Sounds is still cracking --- engines/tsage/blue_force/blueforce_scenes0.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index bb283d051e..69a2273237 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -121,7 +121,7 @@ void Scene20::Action1::signal() { void Scene20::postInit(SceneObjectList *OwnerList) { loadScene(20); - Scene::postInit(); + SceneExt::postInit(); setZoomPercents(60, 85, 200, 100); BF_GLOBALS._interfaceY = SCREEN_HEIGHT; -- cgit v1.2.3 From a8cff4fd8e8d94d6325bd1547736dc2cdbbd5355 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 31 Oct 2011 00:22:24 +0100 Subject: TSAGE: Blue Force - PD Parking (300) - Fix several glitches occurring during morning review. --- engines/tsage/blue_force/blueforce_scenes3.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 29c62558a3..3d42304926 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -58,7 +58,7 @@ bool Scene300::Object19::startAction(CursorType action, Event &event) { return true; } - +// entrance door bool Scene300::Item1::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) { Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; @@ -75,6 +75,8 @@ bool Scene300::Item1::startAction(CursorType action, Event &event) { bool Scene300::Item2::startAction(CursorType action, Event &event) { if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) { Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene; + BF_GLOBALS._player.disableControl(); + scene->_sceneMode = 0; scene->setAction(&scene->_sequenceManager1, scene, 304, &scene->_object11, NULL); return true; } else { @@ -108,7 +110,7 @@ void Scene300::Action1::signal() { setDelay(1); break; case 2: { - ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 8, + ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 8, BF_GLOBALS._player._position.y); break; } @@ -183,12 +185,13 @@ void Scene300::Action4::signal() { break; case 2: BF_GLOBALS._sceneManager.changeScene(60); + setDelay(15); break; case 3: setAction(&scene->_sequenceManager1, this, 319, &scene->_object19, NULL); break; case 4: - BF_GLOBALS.setFlag(2); + BF_GLOBALS.setFlag(onBike); BF_GLOBALS._sceneManager.changeScene(190); break; default: @@ -213,6 +216,7 @@ void Scene300::Action5::signal() { break; case 3: { ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 186, 140); + setDelay(3); break; } case 4: @@ -474,10 +478,10 @@ void Scene300::signal() { _object10.postInit(); _object10.hide(); - if (BF_GLOBALS.getFlag(1)) { + if (BF_GLOBALS.getFlag(gunClean)) { BF_GLOBALS._player.disableControl(); _sceneMode = 4308; - setAction(&_sequenceManager1, this, 6307, &_object2, &_object1, &_object9, &_object10, NULL); + setAction(&_sequenceManager1, this, 6307, &_object12, &_object1, &_object9, &_object10, NULL); } else { BF_GLOBALS._player.disableControl(); _sceneMode = 4308; @@ -874,6 +878,7 @@ bool Scene315::BulletinMemo::startAction(CursorType action, Event &event) { } } +// Own Mail Slot bool Scene315::Object2::startAction(CursorType action, Event &event) { Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene; -- cgit v1.2.3 From ef1f96b674fe4840c553e915f02eae45666cdf3b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 10:44:37 +1100 Subject: TSAGE: Added skeleton for Geekwad --- engines/tsage/core.cpp | 4 +- engines/tsage/core.h | 1 + engines/tsage/detection.cpp | 1 + engines/tsage/detection_tables.h | 15 + engines/tsage/geekwad/geekwad_logic.cpp | 80 +++++ engines/tsage/geekwad/geekwad_logic.h | 79 +++++ engines/tsage/geekwad/geekwad_scenes0.cpp | 498 ++++++++++++++++++++++++++++++ engines/tsage/geekwad/geekwad_scenes0.h | 85 +++++ engines/tsage/globals.cpp | 16 + engines/tsage/globals.h | 10 + engines/tsage/module.mk | 2 + engines/tsage/tsage.cpp | 8 +- engines/tsage/tsage.h | 3 +- 13 files changed, 798 insertions(+), 4 deletions(-) create mode 100644 engines/tsage/geekwad/geekwad_logic.cpp create mode 100644 engines/tsage/geekwad/geekwad_logic.h create mode 100644 engines/tsage/geekwad/geekwad_scenes0.cpp create mode 100644 engines/tsage/geekwad/geekwad_scenes0.h (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 7ad4eff585..84ab98d4e0 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1438,8 +1438,8 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { } Rect tempRect = bounds; - if (g_vm->getGameID() != GType_Ringworld) - tempRect.setHeight(BF_GLOBALS._interfaceY); + if ((g_vm->getGameID() != GType_Ringworld) && (g_vm->getGameID() != GType_Geekwad)) + tempRect.setHeight(T2_GLOBALS._interfaceY); g_globals->_screenSurface.copyFrom(g_globals->_sceneManager._scene->_backSurface, tempRect, Rect(0, 0, tempRect.width(), tempRect.height()), NULL); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index b553db67d9..23e720929c 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -418,6 +418,7 @@ public: virtual void destroy() {} virtual bool startAction(CursorType action, Event &event); virtual void doAction(int action); + virtual bool performAction(CursorType action, Event &event) { return startAction(action, event); } bool contains(const Common::Point &pt); void setBounds(const Rect &newBounds) { _bounds = newBounds; } diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index 12add10c58..ab179cbac8 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -62,6 +62,7 @@ static const PlainGameDescriptor tSageGameTitles[] = { { "ringworld", "Ringworld: Revenge of the Patriarch" }, { "blueforce", "Blue Force" }, { "ringworld2", "Return to Ringworld" }, + { "geekwad", "The Geekwad: Games Of The Galaxy" }, { 0, 0 } }; diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 360dbac0ae..e9796426cd 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -156,6 +156,21 @@ static const tSageGameDescription gameDescriptions[] = { GF_CD | GF_ALT_REGIONS }, + // Geekwad + { + { + "geekwad", + "CD", + AD_ENTRY1s("geekwad.rlb", "0a441f7c4c7ce20fd3ac7707a5d64ee5", 5570365), + Common::EN_ANY, + Common::kPlatformPC, + ADGF_CD | ADGF_UNSTABLE, + GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) + }, + GType_Geekwad, + GF_CD | GF_ALT_REGIONS + }, + { AD_TABLE_END_MARKER, 0, 0 } }; diff --git a/engines/tsage/geekwad/geekwad_logic.cpp b/engines/tsage/geekwad/geekwad_logic.cpp new file mode 100644 index 0000000000..a2d4fcb0f4 --- /dev/null +++ b/engines/tsage/geekwad/geekwad_logic.cpp @@ -0,0 +1,80 @@ +/* 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 "common/config-manager.h" +#include "tsage/scenes.h" +#include "tsage/tsage.h" +#include "tsage/geekwad/geekwad_logic.h" +#include "tsage/geekwad/geekwad_scenes0.h" + +namespace TsAGE { + +namespace Geekwad { + +void GeekwadGame::start() { + // Start the game + g_globals->_sceneManager.changeScene(150); +} + +Scene *GeekwadGame::createScene(int sceneNumber) { + switch (sceneNumber) { + /* Scene group #0 */ + // Tsunami title screen + case 150: return new Scene150(); + + // Geekwad credits screen + case 200: return new Scene200(); + + default: + error("Unknown scene number - %d", sceneNumber); + break; + } +} + +void GeekwadGame::rightClick() { +} + +/** + * Returns true if it is currently okay to restore a game + */ +bool GeekwadGame::canLoadGameStateCurrently() { + return true; +} + +/** + * Returns true if it is currently okay to save the game + */ +bool GeekwadGame::canSaveGameStateCurrently() { + return true; +} + +void GeekwadGame::processEvent(Event &event) { +} + +/*--------------------------------------------------------------------------*/ + +SceneExt::SceneExt(): Scene() { +} + +} // End of namespace Geekwad + +} // End of namespace TsAGE diff --git a/engines/tsage/geekwad/geekwad_logic.h b/engines/tsage/geekwad/geekwad_logic.h new file mode 100644 index 0000000000..fbccaeee00 --- /dev/null +++ b/engines/tsage/geekwad/geekwad_logic.h @@ -0,0 +1,79 @@ +/* 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_GEEKWAD_LOGIC_H +#define TSAGE_GEEKWAD_LOGIC_H + +#include "common/scummsys.h" +#include "tsage/events.h" +#include "tsage/core.h" +#include "tsage/scenes.h" +#include "tsage/globals.h" + +namespace TsAGE { + +namespace Geekwad { + +using namespace TsAGE; + +class SceneFactory { +public: + static Scene *createScene(int sceneNumber); +}; + +class SceneExt: public Scene { +public: +public: + SceneExt(); + + virtual Common::String getClassName() { return "SceneExt"; } +}; + +class GeekwadGame: public Game { +public: + virtual void start(); + + virtual Scene *createScene(int sceneNumber); + virtual void processEvent(Event &event); + virtual void rightClick(); + virtual bool canSaveGameStateCurrently(); + virtual bool canLoadGameStateCurrently(); +}; + +class SceneObject2: public SceneObject { +public: + int _v1, _v2; + + SceneObject2() { _v1 = _v2 = 0; } + virtual Common::String getClassName() { return "SceneObject2"; } + virtual void synchronize(Serializer &s) { + SceneObject::synchronize(s); + s.syncAsSint16LE(_v1); + s.syncAsSint16LE(_v2); + } +}; + +} // End of namespace Geekwad + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/geekwad/geekwad_scenes0.cpp b/engines/tsage/geekwad/geekwad_scenes0.cpp new file mode 100644 index 0000000000..9241b1dace --- /dev/null +++ b/engines/tsage/geekwad/geekwad_scenes0.cpp @@ -0,0 +1,498 @@ +/* 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/geekwad/geekwad_scenes0.h" + +namespace TsAGE { + +namespace Geekwad { + +/*-------------------------------------------------------------------------- + * Scene 150 - Tsunami Title Screen + * + *--------------------------------------------------------------------------*/ + +void Scene150::Action1::signal() { + Scene150 *scene = (Scene150 *)GW_GLOBALS._sceneManager._scene; + static byte black[3] = { 0, 0, 0 }; + + switch (_actionIndex++) { + case 0: + setDelay(2); + break; + case 1: + GW_GLOBALS._sound1.play(1); + GW_GLOBALS._scenePalette.addRotation(64, 127, -1, 1, this); + break; + case 2: + scene->_object1.setVisage(822); + scene->_object1._strip = 1; + scene->_object1._frame = 1; + scene->_object1.changeZoom(100); + + scene->_object2.setVisage(822); + scene->_object2._strip = 2; + scene->_object2._frame = 1; + scene->_object2.changeZoom(100); + + scene->_object3.setVisage(822); + scene->_object3._strip = 3; + scene->_object3._frame = 1; + scene->_object3.changeZoom(100); + + scene->_object4.setVisage(822); + scene->_object4._strip = 4; + scene->_object4._frame = 1; + scene->_object4.changeZoom(100); + + scene->_object5.setVisage(822); + scene->_object5._strip = 5; + scene->_object5._frame = 1; + scene->_object5.changeZoom(100); + + scene->_object6.setVisage(822); + scene->_object6._strip = 6; + scene->_object6._frame = 1; + scene->_object6.changeZoom(100); + + scene->_object7.setVisage(822); + scene->_object7._strip = 7; + scene->_object7._frame = 1; + scene->_object7.changeZoom(100); + + scene->_object8.setVisage(822); + scene->_object8._strip = 8; + scene->_object8._frame = 1; + scene->_object8.changeZoom(100); + + setDelay(1); + break; + case 3: + GW_GLOBALS._scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); + break; + case 4: + setDelay(60); + break; + case 5: + scene->_object2.animate(ANIM_MODE_5, NULL); + scene->_object3.animate(ANIM_MODE_5, NULL); + scene->_object4.animate(ANIM_MODE_5, NULL); + scene->_object5.animate(ANIM_MODE_5, NULL); + scene->_object6.animate(ANIM_MODE_5, NULL); + scene->_object7.animate(ANIM_MODE_5, this); + break; + case 6: + setDelay(120); + break; + case 7: + GW_GLOBALS._scenePalette.addFader(black, 1, 5, this); + break; + case 8: + GW_GLOBALS._sceneManager.changeScene(200); + remove(); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +void Scene150::postInit(SceneObjectList *OwnerList) { + loadScene(820); + Scene::postInit(); + setZoomPercents(60, 85, 200, 100); + + _scenePalette.loadPalette(822); + + _object1.postInit(); + _object1.setVisage(821); + _object1._strip = 1; + _object1._frame = 1; + _object1.animate(ANIM_MODE_NONE, NULL); + _object1.setPosition(Common::Point(62, 85)); + + _object2.postInit(); + _object2.setVisage(821); + _object2._strip = 2; + _object2._frame = 1; + _object2.animate(ANIM_MODE_NONE, NULL); + _object2.setPosition(Common::Point(27, 94)); + + _object3.postInit(); + _object3.setVisage(821); + _object3._strip = 2; + _object3._frame = 2; + _object3.animate(ANIM_MODE_NONE, NULL); + _object3.setPosition(Common::Point(68, 94)); + + _object4.postInit(); + _object4.setVisage(821); + _object4._strip = 2; + _object4._frame = 3; + _object4.animate(ANIM_MODE_NONE, NULL); + _object4.setPosition(Common::Point(110, 94)); + + _object5.postInit(); + _object5.setVisage(821); + _object5._strip = 2; + _object5._frame = 4; + _object5.animate(ANIM_MODE_NONE, NULL); + _object5.setPosition(Common::Point(154, 94)); + + _object6.postInit(); + _object6.setVisage(821); + _object6._strip = 2; + _object6._frame = 5; + _object6.animate(ANIM_MODE_NONE, NULL); + _object6.setPosition(Common::Point(199, 94)); + + _object7.postInit(); + _object7.setVisage(821); + _object7._strip = 2; + _object7._frame = 6; + _object7.animate(ANIM_MODE_NONE, NULL); + _object7.setPosition(Common::Point(244, 94)); + + _object8.postInit(); + _object8.setVisage(821); + _object8._strip = 2; + _object8._frame = 7; + _object8.animate(ANIM_MODE_NONE, NULL); + _object8.setPosition(Common::Point(286, 94)); + + setAction(&_action1); +} + +/*-------------------------------------------------------------------------- + * Scene 200 - Geekwad credits screen + * + *--------------------------------------------------------------------------*/ + +struct CreditEntry { + int visage; + int strip; + int frame; +}; + +const CreditEntry credits[] = { + {5500, 1, 1}, {5500, 1, 2}, {5500, 2, 1}, {5500, 2, 2}, {5500, 8, 2}, {5500, 3, 1}, + {5500, 3, 2}, {5500, 4, 1}, {5500, 4, 2}, {5500, 5, 1}, {5500, 5, 2}, {5500, 8, 2}, + {5500, 6, 1}, {5500, 6, 2}, {5500, 7, 1}, {5500, 7, 2}, {5500, 8, 1} +}; +#define TOTAL_CREDITS 17 + +void Scene200::Action1::signal() { + Scene200 *scene = (Scene200 *)GW_GLOBALS._sceneManager._scene; + + switch (_actionIndex) { + case 0: { + ++scene->_fieldAB2; + + if ((scene->_creditIndex < TOTAL_CREDITS) && (!scene->_creditIndex || (*scene->_list2.begin())->_position.y < 192)) { + SceneObject2 *obj = new SceneObject2(); + obj->postInit(); + obj->setVisage(credits[scene->_creditIndex].visage); + obj->setStrip(credits[scene->_creditIndex].strip); + obj->setFrame(credits[scene->_creditIndex].frame); + obj->changeZoom(106); + obj->fixPriority(100); + obj->setPosition(Common::Point(160, 210)); + obj->_flags |= OBJFLAG_CLONED; + obj->_v1 = obj->_v2 = 0; + + scene->_list2.push_back(obj); + ++scene->_creditIndex; + } + + SceneObject2 *item; + SynchronizedList::iterator i; + for (i = scene->_list2.begin(); i != scene->_list2.end(); ++i) { + item = *i; + item->setPosition(Common::Point(item->_position.x, item->_position.y - 1)); + item->changeZoom(item->_percent - ((210 - item->_position.y + 100) / 100)); + } + + item = *scene->_list2.begin(); + if (item->_percent < 20) { + item->remove(); + scene->_list2.remove(item); + + if (scene->_list2.empty()) { + ++_actionIndex; + scene->_sound1.fadeOut(this); + } + } + + setDelay(6); + break; + } + case 1: + setDelay(1); + ++_actionIndex; + break; + case 2: + scene->_sound1.play(3); + scene->_sound1.setVol(127); + + scene->_object1.postInit(); + scene->_object1.setVisage(5510); + scene->_object1.setStrip(1); + scene->_object1.setFrame(1); + scene->_object1.changeZoom(10); + scene->_object1.fixPriority(100); + scene->_object1.setPosition(Common::Point(160, 190)); + + setDelay(3); + ++_actionIndex; + break; + case 3: + scene->_object1.changeZoom(scene->_object1._percent + 5); + if (scene->_object1._percent >= 100) + ++_actionIndex; + + setDelay(3); + break; + case 4: + scene->_object2.postInit(); + scene->_object2.setVisage(5000); + scene->_object2.setStrip(1); + scene->_object2.setFrame(1); + scene->_object2.fixPriority(110); + scene->_object2.setPosition(Common::Point(-30, 100)); + scene->_object2.animate(ANIM_MODE_2); + + scene->_object3.postInit(); + scene->_object3.setVisage(5505); + scene->_object3.setStrip(1); + scene->_object3.setFrame(1); + scene->_object3.fixPriority(100); + scene->_object3.setPosition(Common::Point(412, 117)); + + scene->_object4.postInit(); + scene->_object4.setVisage(5505); + scene->_object4.setStrip(2); + scene->_object4.setFrame(1); + scene->_object4.fixPriority(101); + scene->_object4.setPosition(Common::Point(scene->_object3._position.x + 35, + scene->_object3._position.y - 19)); + + ++_actionIndex; + setDelay(6); + break; + case 5: + scene->_creditIndex = 0; + scene->_object2.setPosition(Common::Point(scene->_object2._position.x +12, scene->_object2._position.y)); + + if (scene->_object2._position.x > 240) + ++_actionIndex; + break; + case 6: + ++scene->_creditIndex; + if ((scene->_creditIndex % 2) != 0) { + scene->_object2.setPosition(Common::Point(scene->_object2._position.x - 12, scene->_object2._position.y)); + scene->_sound2.play(611); + } else { + scene->_object2.setPosition(Common::Point(scene->_object2._position.x + 12, scene->_object2._position.y)); + } + + if (scene->_creditIndex >= 6) + ++_actionIndex; + break; + case 7: + scene->loadBackground(8, 0); + scene->_object2.setPosition(Common::Point(scene->_object2._position.x, scene->_object2._position.y + 2)); + scene->_object1.setPosition(Common::Point(scene->_object1._position.x - 12, scene->_object1._position.y)); + + if (scene->_sceneBounds.left >= 160) { + scene->_object1.remove(); + ++_actionIndex; + } + break; + case 8: + scene->_object2.setPosition(Common::Point(scene->_object2._position.x + 12, scene->_object2._position.y)); + + if (scene->_object2._position.x > 321) + ++_actionIndex; + break; + case 9: + scene->_sound2.play(611); + scene->_object2.setPosition(Common::Point(scene->_object2._position.x - 12, scene->_object2._position.y)); + scene->_object3.setPosition(Common::Point(scene->_object3._position.x + 12, scene->_object3._position.y)); + scene->_object4.setPosition(Common::Point(scene->_object4._position.x + 12, scene->_object2._position.y)); + scene->_object4.setFrame(scene->_object4.getFrameCount()); + + setDelay(6); + ++_actionIndex; + break; + case 10: + scene->_object3.setPosition(Common::Point(scene->_object3._position.x - 12, scene->_object3._position.y)); + scene->_object4.setPosition(Common::Point(scene->_object4._position.x - 12, scene->_object2._position.y)); + scene->_object4.setAction(&scene->_action2); + scene->_object2.setPosition(Common::Point(scene->_object2._position.x - 12, scene->_object2._position.y)); + scene->_object2.fixPriority(80); + + setDelay(6); + ++_actionIndex; + break; + case 11: + scene->_object2.changeZoom(scene->_object2._percent - 5); + if (scene->_object2._percent < 20) + ++_actionIndex; + break; + case 12: + scene->_object2.setPosition(Common::Point(scene->_object2._position.x + 2, + scene->_object2._position.y - ((scene->_object2._position.y <= 80) ? 0 : 2))); + if (scene->_object2._position.x > 390) + ++_actionIndex; + break; + case 13: + scene->_field846 = GW_GLOBALS._events.getFrameNumber() - scene->_field846; + scene->_field848 = (scene->_field846 > 3600) ? 2 : 1; + scene->_creditIndex = 0; + ++_actionIndex; + // Deliberate fall-through + case 14: { + setDelay(2); + + if ((scene->_creditIndex != 0) && ((scene->_creditIndex == -1) || ((*scene->_list1.begin())->_position.y >= 142))) { + Common::String msg = g_resourceManager->getMessage(200, scene->_creditIndex); + + if (msg.hasPrefix("~")) { + scene->_creditIndex = -1; + } else { + if (msg.empty()) + msg = " "; + + SceneText *sceneText = new SceneText(); + sceneText->_fontNumber = 71; + + if (msg.hasPrefix("@")) { + sceneText->_color1 = 43; + sceneText->_color2 = 46; + sceneText->_color3 = 80; + msg.deleteChar(0); + } else { + sceneText->_color1 = 100; + sceneText->_color2 = 103; + sceneText->_color3 = 16; + } + + sceneText->_width = 400; + sceneText->setup(msg); + sceneText->_flags |= OBJFLAG_CLONED; + sceneText->fixPriority(199); + + int fontNumber = GW_GLOBALS.gfxManager()._font._fontNumber; + GW_GLOBALS.gfxManager()._font.setFontNumber(sceneText->_fontNumber); + int strWidth = GW_GLOBALS.gfxManager().getStringWidth(msg.c_str()); + + sceneText->setPosition(Common::Point(270 - (strWidth / 2), 150)); + GW_GLOBALS.gfxManager()._font.setFontNumber(fontNumber); + + scene->_list1.push_back(sceneText); + } + } + + SynchronizedList::iterator i; + for (i = scene->_list1.begin(); i != scene->_list1.end(); ++i) { + SceneText *item = *i; + item->setPosition(Common::Point(item->_position.x, item->_position.y - scene->_field848)); + } + + SceneText *topItem = *scene->_list1.begin(); + if (topItem->_position.y < 50) { + topItem->remove(); + scene->_list1.remove(topItem); + + if (scene->_list1.empty()) { + setDelay(10); + ++_actionIndex; + } + } + break; + } + case 15: + ++_actionIndex; + scene->_sound1.fade(0, 5, 4, true, this); + break; + case 16: + GW_GLOBALS._sceneManager.changeScene(500); + remove(); + break; + } +} + +void Scene200::Action2::signal() { + switch (_actionIndex++) { + case 0: + ++_actionIndex; + setDelay(GW_GLOBALS._randomSource.getRandomNumber(50) + 50); + break; + case 1: + ++_actionIndex; + static_cast(_owner)->animate(ANIM_MODE_8, 1, this); + break; + case 2: + _actionIndex = 0; + static_cast(_owner)->setFrame(1); + setDelay(1); + break; + } +} + +/*--------------------------------------------------------------------------*/ + +Scene200::Scene200(): Scene() { + _creditIndex = _fieldAB2 = 0; + _field846 = GW_GLOBALS._events.getFrameNumber(); +} + +void Scene200::postInit(SceneObjectList *OwnerList) { + Scene::postInit(); + loadScene(5500); + _sound1.play(2); + + setAction(&_action1); +} + +void Scene200::process(Event &event) { + switch (event.eventType) { + case EVENT_BUTTON_DOWN: + GW_GLOBALS._sceneManager.changeScene(500); + break; + case EVENT_KEYPRESS: + if ((event.kbd.keycode == Common::KEYCODE_ESCAPE) || (event.kbd.keycode == Common::KEYCODE_RETURN)) + GW_GLOBALS._sceneManager.changeScene(500); + break; + default: + break; + } + + if (!event.handled) + Scene::process(event); +} + +} // End of namespace Geekwad + +} // End of namespace TsAGE diff --git a/engines/tsage/geekwad/geekwad_scenes0.h b/engines/tsage/geekwad/geekwad_scenes0.h new file mode 100644 index 0000000000..8c04f12486 --- /dev/null +++ b/engines/tsage/geekwad/geekwad_scenes0.h @@ -0,0 +1,85 @@ +/* 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_GEEKWAD_SCENES0_H +#define TSAGE_GEEKWAD_SCENES0_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/geekwad/geekwad_logic.h" + +namespace TsAGE { + +namespace Geekwad { + +using namespace TsAGE; + +class Scene150: public Scene { + /* Actions */ + class Action1 : public Action { + public: + virtual void signal(); + }; +public: + Action1 _action1; + ScenePalette _scenePalette; + SceneObject _object1, _object2, _object3, _object4; + SceneObject _object5, _object6, _object7, _object8; + + virtual void postInit(SceneObjectList *OwnerList = NULL); +}; + +class Scene200: public Scene { + /* Actions */ + class Action1: public Action { + public: + virtual void signal(); + }; + class Action2: public Action { + public: + virtual void signal(); + }; +public: + Action1 _action1; + Action2 _action2; + ASound _sound1, _sound2; + SceneObject _object1, _object2, _object3, _object4; + int _field846, _field848; + int _fieldAB2, _fieldAB4, _creditIndex; + SynchronizedList _list1; + SynchronizedList _list2; + + Scene200(); + virtual void postInit(SceneObjectList *OwnerList = NULL); + virtual void process(Event &event); +}; + +} // End of namespace Geekwad + +} // End of namespace TsAGE + +#endif diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 5baf7b7041..bb89a26e37 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -23,6 +23,7 @@ #include "tsage/globals.h" #include "tsage/tsage.h" #include "tsage/blue_force/blueforce_logic.h" +#include "tsage/geekwad/geekwad_logic.h" #include "tsage/ringworld/ringworld_demo.h" #include "tsage/ringworld/ringworld_logic.h" #include "tsage/ringworld2/ringworld2_logic.h" @@ -84,6 +85,14 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _fontColors.background = 88; _fontColors.foreground = 92; _dialogCenter.y = 140; + } else if (g_vm->getGameID() == GType_Geekwad) { + // Blue Force + _gfxFontNumber = 0; + _gfxColors.background = 89; + _gfxColors.foreground = 83; + _fontColors.background = 88; + _fontColors.foreground = 92; + _dialogCenter.y = 140; } else if ((g_vm->getGameID() == GType_Ringworld) && (g_vm->getFeatures() & GF_CD)) { _gfxFontNumber = 50; _gfxColors.background = 53; @@ -94,6 +103,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _color2 = 18; _color3 = 18; } else { + // Ringworld _gfxFontNumber = 50; _gfxColors.background = 53; _gfxColors.foreground = 18; @@ -139,6 +149,12 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _game = new Ringworld2::Ringworld2Game(); _sceneHandler = new SceneHandler(); break; + + case GType_Geekwad: + _game = new Geekwad::GeekwadGame(); + _inventory = NULL; + _sceneHandler = new SceneHandler(); + break; } } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 14cf590f38..5eaa68deab 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -121,6 +121,7 @@ extern Globals *g_globals; #define T2_GLOBALS (*((::TsAGE::TsAGE2Globals *)g_globals)) #define BF_GLOBALS (*((::TsAGE::BlueForce::BlueForceGlobals *)g_globals)) #define R2_GLOBALS (*((::TsAGE::Ringworld2::Ringworld2Globals *)g_globals)) +#define GW_GLOBALS (*((::TsAGE::Geekwad::GeekwadGlobals *)g_globals)) // Note: Currently this can't be part of the g_globals structure, since it needs to be constructed // prior to many of the fields in Globals execute their constructors @@ -255,6 +256,15 @@ public: } // End of namespace Ringworld2 +namespace Geekwad { + +class GeekwadGlobals: public Globals { +public: + ASoundExt _sound1; +}; + +} // End of namespace Geekwad + } // End of namespace TsAGE #endif diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 0ea8916647..60f1823da7 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -20,6 +20,8 @@ MODULE_OBJS := \ detection.o \ dialogs.o \ events.o \ + geekwad/geekwad_logic.o \ + geekwad/geekwad_scenes0.o \ globals.o \ graphics.o \ resources.o \ diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 7e7198fc2b..20b2eeac8f 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -97,7 +97,13 @@ void TSageEngine::initialize() { // Reset all global variables R2_GLOBALS.reset(); - } + } else if (g_vm->getGameID() == GType_Geekwad) { + g_resourceManager->addLib("GEEKWAD.RLB"); + g_globals = new Geekwad::GeekwadGlobals(); + + // Reset all global variables + GW_GLOBALS.reset(); + } g_globals->gfxManager().setDefaults(); diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index eb36cf0790..e57823ecbc 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -41,7 +41,8 @@ namespace TsAGE { enum { GType_Ringworld = 0, GType_BlueForce = 1, - GType_Ringworld2 = 2 + GType_Ringworld2 = 2, + GType_Geekwad = 3 }; enum { -- 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/blue_force/blueforce_logic.cpp | 2 +- engines/tsage/events.cpp | 1 - engines/tsage/globals.cpp | 2 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 16 ++++++++++++++++ engines/tsage/ringworld2/ringworld2_logic.h | 7 +++++++ engines/tsage/user_interface.cpp | 11 ++++++++--- 6 files changed, 33 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 91fd5d3197..77609715c7 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -955,7 +955,7 @@ void SceneHandlerExt::process(Event &event) { return; } - // If the user clicks the button whislt the introduction is active, prompt for playing the game + // If the user clicks the button whilst the introduction is active, prompt for playing the game if ((BF_GLOBALS._dayNumber == 0) && (event.eventType == EVENT_BUTTON_DOWN)) { // Prompt user for whether to start play or watch introduction BF_GLOBALS._player.enableControl(); diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index d42b996e41..8958482404 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -320,7 +320,6 @@ void EventsClass::setCursor(Graphics::Surface &cursor, int transColor, const Com } void EventsClass::setCursor(GfxSurface &cursor) { - // TODO: Find proper parameters for this form in Blue Force Graphics::Surface s = cursor.lockSurface(); const byte *cursorData = (const byte *)s.getBasePtr(0, 0); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index bb89a26e37..23898b5449 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -147,7 +147,7 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface case GType_Ringworld2: _inventory = new Ringworld2::Ringworld2InvObjectList(); _game = new Ringworld2::Ringworld2Game(); - _sceneHandler = new SceneHandler(); + _sceneHandler = new Ringworld2::SceneHandlerExt(); break; case GType_Geekwad: 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; diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index f6eae80d9c..9657d25875 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -266,7 +266,10 @@ void UICollection::draw() { /*--------------------------------------------------------------------------*/ UIElements::UIElements(): UICollection() { - _cursorVisage.setVisage(1, 5); + if (g_vm->getGameID() == GType_Ringworld2) + _cursorVisage.setVisage(5, 1); + else + _cursorVisage.setVisage(1, 5); g_saver->addLoadNotifier(&UIElements::loadNotifierProc); _characterIndex = 0; } @@ -302,7 +305,8 @@ void UIElements::synchronize(Serializer &s) { } void UIElements::process(Event &event) { - if (_clearScreen && GLOBALS._player._enabled && (GLOBALS._sceneManager._sceneNumber != 50)) { + if (_clearScreen && GLOBALS._player._enabled && + ((g_vm->getGameID() != GType_BlueForce) || (GLOBALS._sceneManager._sceneNumber != 50))) { if (_bounds.contains(event.mousePos)) { // Cursor inside UI area if (!_cursorChanged) { @@ -310,7 +314,8 @@ void UIElements::process(Event &event) { // Inventory icon being displayed, so leave alone } else { // Change to the inventory use cursor - GfxSurface surface = _cursorVisage.getFrame(6); + int cursorId = (g_vm->getGameID() == GType_Ringworld2) ? 11 : 6; + GfxSurface surface = _cursorVisage.getFrame(cursorId); GLOBALS._events.setCursor(surface); } _cursorChanged = true; -- cgit v1.2.3 From c15a67879ca65daa21c58c794c2f66e12edad0c8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 15:11:27 +1100 Subject: TSAGE: Added inventory item cursor support for R2RW --- engines/tsage/core.cpp | 4 ++-- engines/tsage/events.cpp | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 84ab98d4e0..0ada457224 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -77,8 +77,8 @@ InvObject::InvObject(int strip, int frame) { } void InvObject::setCursor() { - if (g_vm->getGameID() == GType_BlueForce) { - // Blue Force cursor handling + if (g_vm->getGameID() != GType_Ringworld) { + // All other games _cursorId = (CursorType)BF_GLOBALS._inventory->indexOf(this); g_globals->_events.setCursor(_cursorId); } else { diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 8958482404..2c4efe5640 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -221,7 +221,8 @@ void EventsClass::setCursor(CursorType cursorType) { case CURSOR_WALK: default: - if (g_vm->getGameID() == GType_BlueForce) { + switch (g_vm->getGameID()) { + case GType_BlueForce: if (cursorType == CURSOR_WALK) { cursor = g_resourceManager->getSubResource(1, 5, 1, &size); } else { @@ -231,11 +232,25 @@ void EventsClass::setCursor(CursorType cursorType) { questionEnabled = true; } _currentCursor = cursorType; - } else { + break; + case GType_Ringworld2: + if (cursorType == CURSOR_WALK) { + cursor = CURSOR_WALK_DATA; + delFlag = false; + } else { + // Inventory icon + InvObject *invObject = g_globals->_inventory->getItem((int)cursorType); + cursor = g_resourceManager->getSubResource(6, invObject->_strip, invObject->_frame, &size); + questionEnabled = true; + } + _currentCursor = cursorType; + break; + default: // For Ringworld, always treat as the walk cursor cursor = CURSOR_WALK_DATA; _currentCursor = CURSOR_WALK; delFlag = false; + break; } break; } -- cgit v1.2.3 From 754864cd3b7617fa474adf3435b19609f80fc571 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 15:22:10 +1100 Subject: TSAGE: Bugfix for graphics scalers not working on Ringworld --- engines/tsage/tsage.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 20b2eeac8f..7dbfdd1f62 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -61,6 +61,9 @@ bool TSageEngine::hasFeature(EngineFeature f) const { } void TSageEngine::initialize() { + // Set up the correct graphics mode + init(); + g_saver = new Saver(); // Set up the resource manager -- 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/core.cpp | 5 + engines/tsage/core.h | 1 + engines/tsage/globals.cpp | 2 - engines/tsage/globals.h | 1 - engines/tsage/ringworld2/ringworld2_scenes0.cpp | 162 ++++++++++++++---------- engines/tsage/ringworld2/ringworld2_scenes0.h | 1 + 6 files changed, 100 insertions(+), 72 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 0ada457224..724f9059f5 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2998,6 +2998,11 @@ void Player::enableControl() { } } +void Player::enableControl(CursorType cursor) { + enableControl(); + R2_GLOBALS._events.setCursor(cursor); +} + void Player::process(Event &event) { if ((g_vm->getGameID() != GType_Ringworld) && _action) _action->process(event); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 23e720929c..87d4a02123 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -643,6 +643,7 @@ public: void disableControl(); void enableControl(); + void enableControl(CursorType cursor); }; /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 23898b5449..a76e03ae69 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -387,7 +387,6 @@ void Ringworld2Globals::reset() { // Reset fields _v5657C = 0; _v565F5 = 0; - _diskScene = 0; _v57C2C = 0; } @@ -396,7 +395,6 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); - s.syncAsSint16LE(_diskScene); s.syncAsSint16LE(_v57C2C); } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 5eaa68deab..37918b1938 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -245,7 +245,6 @@ class Ringworld2Globals: public TsAGE2Globals { public: ASoundExt _sound1, _sound2, _sound3, _sound4; PlayStream _playStream; - int _diskScene; int _v565F5; int _v5657C; int _v57C2C; 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 8d27da169caac3f581c984f5713caabd0723eb37 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 16:11:43 +1100 Subject: TSAGE: Implemented proper descriptions for inventory items in R2RW --- engines/tsage/user_interface.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index 9657d25875..807e788cb9 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -71,12 +71,27 @@ void UIQuestion::process(Event &event) { } void UIQuestion::showDescription(CursorType cursor) { - if (cursor == INV_FOREST_RAP) { - // Forest rap item has a graphical display - showItem(5, 1, 1); - } else { - // Display object description - SceneItem::display2(9001, (int)cursor); + switch (g_vm->getGameID()) { + case GType_BlueForce: + if (cursor == INV_FOREST_RAP) { + // Forest rap item has a graphical display + showItem(5, 1, 1); + } else { + // Display object description + SceneItem::display2(9001, (int)cursor); + } + break; + case GType_Ringworld2: + if ((cursor == R2_9) || (cursor == R2_39)) { + // Show communicator + warning("TODO: Communicator"); + } else { + // Show object description + SceneItem::display2(3, (int)cursor); + } + break; + default: + break; } } -- cgit v1.2.3 From bb694c9e1c3bd05b91f60617dc4112d2031c627e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 17:12:28 +1100 Subject: TSAGE: Implemented changes to SceneItem::display for R2RW --- engines/tsage/core.cpp | 22 +++++++++++++++++++++- engines/tsage/sound.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 724f9059f5..cd8e07e44e 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1551,6 +1551,7 @@ void SceneItem::display(int resNum, int lineNum, ...) { int maxWidth = 120; bool keepOnscreen = false; bool centerText = g_vm->getGameID() == GType_Ringworld; + Common::List playList; if (resNum != 0) { va_list va; @@ -1559,6 +1560,17 @@ void SceneItem::display(int resNum, int lineNum, ...) { if (resNum == -1) msg = Common::String(va_arg(va, const char *)); + if (g_vm->getGameID() == GType_Ringworld2) { + // Pre-process the string for any sound information + while (msg.hasPrefix("!")) { + msg.deleteChar(0); + playList.push_back(atoi(msg.c_str())); + + while (!msg.empty() && (*msg.c_str() >= '0' && *msg.c_str() <= '9')) + msg.deleteChar(0); + } + } + int mode; do { // Get next instruction @@ -1666,6 +1678,12 @@ void SceneItem::display(int resNum, int lineNum, ...) { g_system->delayMillis(10); } + // For Return to Ringworld, play the voice overs in sequence + if ((g_vm->getGameID() == GType_Ringworld2) && !playList.empty() && !R2_GLOBALS._playStream.isPlaying()) { + R2_GLOBALS._playStream.play(*playList.begin(), NULL); + playList.pop_front(); + } + g_globals->_sceneText.remove(); } @@ -1688,7 +1706,8 @@ void SceneItem::display2(int resNum, int lineNum) { SET_EXT_FGCOLOR, 13, LIST_END); break; case GType_Ringworld2: - display(resNum, lineNum, SET_WIDTH, 280, SET_X, 20, SET_Y, 20, SET_EXT_BGCOLOR, 60, LIST_END); + display(resNum, lineNum, SET_WIDTH, 280, SET_X, 160, SET_Y, 20, SET_POS_MODE, ALIGN_CENTER, + SET_EXT_BGCOLOR, 60, LIST_END); break; default: display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END); @@ -2754,6 +2773,7 @@ SceneText::SceneText() : SceneObject() { _fontNumber = 2; _width = 160; _textMode = ALIGN_LEFT; + _color1 = 0; _color2 = 0; _color3 = 0; } diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 3eb2432563..5802a62686 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -422,6 +422,7 @@ public: void play(int soundNum, EventHandler *endAction) {} void stop() {} void proc1() {} + bool isPlaying() const { return false; } }; #define ADLIB_CHANNEL_COUNT 9 -- cgit v1.2.3 From 9debde02e41cc8340fdaacdbec1f9406ddffe6fa Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 31 Oct 2011 19:51:01 +1100 Subject: TSAGE: Implemented Blue Force Options dialog and moved Inventory dialog to Ringworld namespace --- engines/tsage/blue_force/blueforce_dialogs.cpp | 68 +++++++ engines/tsage/blue_force/blueforce_dialogs.h | 14 ++ engines/tsage/dialogs.cpp | 236 ------------------------ engines/tsage/dialogs.h | 41 ----- engines/tsage/ringworld/ringworld_dialogs.cpp | 238 ++++++++++++++++++++++++- engines/tsage/ringworld/ringworld_dialogs.h | 39 ++++ engines/tsage/staticres.cpp | 5 +- engines/tsage/staticres.h | 6 +- 8 files changed, 367 insertions(+), 280 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index 86feceb015..8428086865 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -187,6 +187,7 @@ void RightClickDialog::execute() { break; case 4: // Options dialog + BlueForce::OptionsDialog::show(); break; } @@ -428,6 +429,73 @@ int RadioConvDialog::show() { return btnIndex; } +/*--------------------------------------------------------------------------*/ + +void OptionsDialog::show() { + OptionsDialog *dlg = new OptionsDialog(); + dlg->draw(); + + GfxButton *btn = dlg->execute(); + + if (btn == &dlg->_btnQuit) { + // Quit game + if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) { + g_vm->quitGame(); + } + } else if (btn == &dlg->_btnRestart) { + // Restart game + g_globals->_game->restartGame(); + } else if (btn == &dlg->_btnSound) { + // Sound dialog + SoundDialog::execute(); + } else if (btn == &dlg->_btnSave) { + // Save button + g_globals->_game->saveGame(); + } else if (btn == &dlg->_btnRestore) { + // Restore button + g_globals->_game->restoreGame(); + } + + dlg->remove(); + delete dlg; +} + +OptionsDialog::OptionsDialog() { + // Set the element text + _gfxMessage.set(OPTIONS_MSG, 140, ALIGN_LEFT); + _btnRestore.setText(RESTORE_BTN_STRING); + _btnSave.setText(SAVE_BTN_STRING); + _btnRestart.setText(RESTART_BTN_STRING); + _btnQuit.setText(QUIT_BTN_STRING); + _btnSound.setText(SOUND_BTN_STRING); + _btnResume.setText(RESUME_BTN_STRING); + + // Set position of the elements + _gfxMessage._bounds.moveTo(0, 1); + _btnRestore._bounds.moveTo(0, _gfxMessage._bounds.bottom + 1); + _btnSave._bounds.moveTo(0, _btnRestore._bounds.bottom + 1); + _btnRestart._bounds.moveTo(0, _btnSave._bounds.bottom + 1); + _btnQuit._bounds.moveTo(0, _btnRestart._bounds.bottom + 1); + _btnSound._bounds.moveTo(0, _btnQuit._bounds.bottom + 1); + _btnResume._bounds.moveTo(0, _btnSound._bounds.bottom + 1); + + // Set all the buttons to the widest button + GfxButton *btnList[6] = {&_btnRestore, &_btnSave, &_btnRestart, &_btnQuit, &_btnSound, &_btnResume}; + int16 btnWidth = 0; + for (int idx = 0; idx < 6; ++idx) + btnWidth = MAX(btnWidth, btnList[idx]->_bounds.width()); + for (int idx = 0; idx < 6; ++idx) + btnList[idx]->_bounds.setWidth(btnWidth); + + // Add the items to the dialog + addElements(&_gfxMessage, &_btnRestore, &_btnSave, &_btnRestart, &_btnQuit, &_btnSound, &_btnResume, NULL); + + // Set the dialog size and position + frame(); + _bounds.collapse(-6, -6); + setCenter(160, 90); +} + } // End of namespace BlueForce diff --git a/engines/tsage/blue_force/blueforce_dialogs.h b/engines/tsage/blue_force/blueforce_dialogs.h index ca51c97aa2..76de7d19d9 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.h +++ b/engines/tsage/blue_force/blueforce_dialogs.h @@ -85,6 +85,20 @@ public: static int show(); }; +class OptionsDialog: public GfxDialog { +private: + GfxButton _btnSave, _btnRestore, _btnRestart; + GfxButton _btnQuit, _btnResume; + GfxButton _btnSound; + GfxMessage _gfxMessage; +public: + OptionsDialog(); + virtual ~OptionsDialog() {} + + static void show(); +}; + + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index 002835e76b..972d591c34 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -181,242 +181,6 @@ void ModalDialog::drawFrame() { /*--------------------------------------------------------------------------*/ -bool GfxInvImage::process(Event &event) { - if (!event.handled && (event.eventType == EVENT_BUTTON_DOWN)) { - event.handled = _bounds.contains(event.mousePos); - return event.handled; - } - - return false; -} - -/*--------------------------------------------------------------------------*/ - -void InventoryDialog::show() { - // Determine how many items are in the player's inventory - int itemCount = 0; - SynchronizedList::iterator i; - for (i = RING_INVENTORY._itemList.begin(); i != RING_INVENTORY._itemList.end(); ++i) { - if ((*i)->inInventory()) - ++itemCount; - } - - if (itemCount == 0) { - MessageDialog::show(INV_EMPTY_MSG, OK_BTN_STRING); - return; - } - - InventoryDialog *dlg = new InventoryDialog(); - dlg->draw(); - dlg->execute(); - delete dlg; -} - -InventoryDialog::InventoryDialog() { - // Determine the maximum size of the image of any item in the player's inventory - int imgWidth = 0, imgHeight = 0; - - SynchronizedList::iterator i; - for (i = RING_INVENTORY._itemList.begin(); i != RING_INVENTORY._itemList.end(); ++i) { - InvObject *invObject = *i; - if (invObject->inInventory()) { - // Get the image for the item - GfxSurface itemSurface = surfaceFromRes(invObject->_displayResNum, invObject->_rlbNum, invObject->_cursorNum); - - // Maintain the dimensions of the largest item image - imgWidth = MAX(imgWidth, (int)itemSurface.getBounds().width()); - imgHeight = MAX(imgHeight, (int)itemSurface.getBounds().height()); - - // Add the item to the display list - GfxInvImage *img = new GfxInvImage(); - _images.push_back(img); - img->setDetails(invObject->_displayResNum, invObject->_rlbNum, invObject->_cursorNum); - img->_invObject = invObject; - add(img); - } - } - assert(_images.size() > 0); - - // Figure out the number of columns/rows to show all the items - int cellsSize = 3; - while ((cellsSize * cellsSize) < (int)_images.size()) - ++cellsSize; - - // Set the position of each inventory item to be displayed - int cellX = 0; - Common::Point pt(0, 0); - - for (uint idx = 0; idx < _images.size(); ++idx) { - if (cellX == cellsSize) { - // Move to the start of the next line - pt.x = 0; - pt.y += imgHeight + 2; - cellX = 0; - } - - _images[idx]->_bounds.moveTo(pt.x, pt.y); - - pt.x += imgWidth + 2; - ++cellX; - } - - // Set up the buttons - pt.y += imgHeight + 2; - _btnOk.setText(OK_BTN_STRING); - _btnOk._bounds.moveTo((imgWidth + 2) * cellsSize - _btnOk._bounds.width(), pt.y); - _btnLook.setText(LOOK_BTN_STRING); - _btnLook._bounds.moveTo(_btnOk._bounds.left - _btnLook._bounds.width() - 2, _btnOk._bounds.top); - addElements(&_btnLook, &_btnOk, NULL); - - frame(); - setCenter(SCREEN_CENTER_X, SCREEN_CENTER_Y); -} - -InventoryDialog::~InventoryDialog() { - for (uint idx = 0; idx < _images.size(); ++idx) - delete _images[idx]; -} - -void InventoryDialog::execute() { - if ((RING_INVENTORY._selectedItem) && RING_INVENTORY._selectedItem->inInventory()) - RING_INVENTORY._selectedItem->setCursor(); - - GfxElement *hiliteObj; - bool lookFlag = false; - _gfxManager.activate(); - - while (!g_vm->shouldQuit()) { - // Get events - Event event; - while (!g_globals->_events.getEvent(event) && !g_vm->shouldQuit()) { - g_system->delayMillis(10); - g_system->updateScreen(); - } - if (g_vm->shouldQuit()) - break; - - hiliteObj = NULL; - if ((event.eventType == EVENT_BUTTON_DOWN) && !_bounds.contains(event.mousePos)) - break; - - // Pass event to elements - event.mousePos.x -= _gfxManager._bounds.left; - event.mousePos.y -= _gfxManager._bounds.top; - - for (GfxElementList::iterator i = _elements.begin(); i != _elements.end(); ++i) { - if ((*i)->process(event)) - hiliteObj = *i; - } - - if (!event.handled && event.eventType == EVENT_KEYPRESS) { - if ((event.kbd.keycode == Common::KEYCODE_RETURN) || (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { - // Exit the dialog - //hiliteObj = &_btnOk; - break; - } - } - - if (hiliteObj == &_btnOk) { - // Ok button clicked - if (lookFlag) - g_globals->_events.setCursor(CURSOR_WALK); - break; - } else if (hiliteObj == &_btnLook) { - // Look button clicked - if (_btnLook._message == LOOK_BTN_STRING) { - _btnLook._message = PICK_BTN_STRING; - lookFlag = 1; - g_globals->_events.setCursor(CURSOR_LOOK); - } else { - _btnLook._message = LOOK_BTN_STRING; - lookFlag = 0; - g_globals->_events.setCursor(CURSOR_WALK); - } - - hiliteObj->draw(); - } else if (hiliteObj) { - // Inventory item selected - InvObject *invObject = static_cast(hiliteObj)->_invObject; - if (lookFlag) { - g_globals->_screenSurface.displayText(invObject->_description); - } else { - RING_INVENTORY._selectedItem = invObject; - invObject->setCursor(); - } - } - } - - _gfxManager.deactivate(); -} - -/*--------------------------------------------------------------------------*/ - -void OptionsDialog::show() { - OptionsDialog *dlg = new OptionsDialog(); - dlg->draw(); - - GfxButton *btn = dlg->execute(); - - if (btn == &dlg->_btnQuit) { - // Quit game - if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) { - g_vm->quitGame(); - } - } else if (btn == &dlg->_btnRestart) { - // Restart game - g_globals->_game->restartGame(); - } else if (btn == &dlg->_btnSound) { - // Sound dialog - SoundDialog::execute(); - } else if (btn == &dlg->_btnSave) { - // Save button - g_globals->_game->saveGame(); - } else if (btn == &dlg->_btnRestore) { - // Restore button - g_globals->_game->restoreGame(); - } - - dlg->remove(); - delete dlg; -} - -OptionsDialog::OptionsDialog() { - // Set the element text - _gfxMessage.set(OPTIONS_MSG, 140, ALIGN_LEFT); - _btnRestore.setText(RESTORE_BTN_STRING); - _btnSave.setText(SAVE_BTN_STRING); - _btnRestart.setText(RESTART_BTN_STRING); - _btnQuit.setText(QUIT_BTN_STRING); - _btnSound.setText(SOUND_BTN_STRING); - _btnResume.setText(RESUME_BTN_STRING); - - // Set position of the elements - _gfxMessage._bounds.moveTo(0, 1); - _btnRestore._bounds.moveTo(0, _gfxMessage._bounds.bottom + 1); - _btnSave._bounds.moveTo(0, _btnRestore._bounds.bottom + 1); - _btnRestart._bounds.moveTo(0, _btnSave._bounds.bottom + 1); - _btnQuit._bounds.moveTo(0, _btnRestart._bounds.bottom + 1); - _btnSound._bounds.moveTo(0, _btnQuit._bounds.bottom + 1); - _btnResume._bounds.moveTo(0, _btnSound._bounds.bottom + 1); - - // Set all the buttons to the widest button - GfxButton *btnList[6] = {&_btnRestore, &_btnSave, &_btnRestart, &_btnQuit, &_btnSound, &_btnResume}; - int16 btnWidth = 0; - for (int idx = 0; idx < 6; ++idx) - btnWidth = MAX(btnWidth, btnList[idx]->_bounds.width()); - for (int idx = 0; idx < 6; ++idx) - btnList[idx]->_bounds.setWidth(btnWidth); - - // Add the items to the dialog - addElements(&_gfxMessage, &_btnRestore, &_btnSave, &_btnRestart, &_btnQuit, &_btnSound, &_btnResume, NULL); - - // Set the dialog size and position - frame(); - setCenter(160, 100); -} - -/*--------------------------------------------------------------------------*/ - void SoundDialog::execute() { ConfigDialog *dlg = new ConfigDialog(); dlg->runModal(); diff --git a/engines/tsage/dialogs.h b/engines/tsage/dialogs.h index 35ed60ba1a..33b55093d0 100644 --- a/engines/tsage/dialogs.h +++ b/engines/tsage/dialogs.h @@ -60,47 +60,6 @@ public: /*--------------------------------------------------------------------------*/ -class GfxInvImage : public GfxImage { -public: - InvObject *_invObject; -public: - GfxInvImage() : GfxImage(), _invObject(NULL) {} - - virtual bool process(Event &event); -}; - -#define MAX_INVOBJECT_DISPLAY 20 - -class InventoryDialog : public ModalDialog { -private: - Common::Array _images; - GfxButton _btnOk, _btnLook; -public: - InventoryDialog(); - virtual ~InventoryDialog(); - void execute(); - - static void show(); -}; - -/*--------------------------------------------------------------------------*/ - -class OptionsDialog : public ModalDialog { -private: - GfxButton _btnSave, _btnRestore, _btnRestart; - GfxButton _btnQuit, _btnResume; - GfxButton _btnSound; - GfxMessage _gfxMessage; -public: - OptionsDialog(); - virtual ~OptionsDialog() {} - GfxButton *execute() { return GfxDialog::execute(&_btnResume); } - - static void show(); -}; - -/*--------------------------------------------------------------------------*/ - class SoundDialog { public: static void execute(); diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp index 9d1a7effc2..37101c9c58 100644 --- a/engines/tsage/ringworld/ringworld_dialogs.cpp +++ b/engines/tsage/ringworld/ringworld_dialogs.cpp @@ -210,13 +210,249 @@ void RightClickDialog::execute() { break; case 6: // Dialog options - OptionsDialog::show(); + Ringworld::OptionsDialog::show(); break; } _gfxManager.deactivate(); } +/*--------------------------------------------------------------------------*/ + +void OptionsDialog::show() { + OptionsDialog *dlg = new OptionsDialog(); + dlg->draw(); + + GfxButton *btn = dlg->execute(); + + if (btn == &dlg->_btnQuit) { + // Quit game + if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) { + g_vm->quitGame(); + } + } else if (btn == &dlg->_btnRestart) { + // Restart game + g_globals->_game->restartGame(); + } else if (btn == &dlg->_btnSound) { + // Sound dialog + SoundDialog::execute(); + } else if (btn == &dlg->_btnSave) { + // Save button + g_globals->_game->saveGame(); + } else if (btn == &dlg->_btnRestore) { + // Restore button + g_globals->_game->restoreGame(); + } + + dlg->remove(); + delete dlg; +} + +OptionsDialog::OptionsDialog() { + // Set the element text + _gfxMessage.set(OPTIONS_MSG, 140, ALIGN_LEFT); + _btnRestore.setText(RESTORE_BTN_STRING); + _btnSave.setText(SAVE_BTN_STRING); + _btnRestart.setText(RESTART_BTN_STRING); + _btnQuit.setText(QUIT_BTN_STRING); + _btnSound.setText(SOUND_BTN_STRING); + _btnResume.setText(RESUME_BTN_STRING); + + // Set position of the elements + _gfxMessage._bounds.moveTo(0, 1); + _btnRestore._bounds.moveTo(0, _gfxMessage._bounds.bottom + 1); + _btnSave._bounds.moveTo(0, _btnRestore._bounds.bottom + 1); + _btnRestart._bounds.moveTo(0, _btnSave._bounds.bottom + 1); + _btnQuit._bounds.moveTo(0, _btnRestart._bounds.bottom + 1); + _btnSound._bounds.moveTo(0, _btnQuit._bounds.bottom + 1); + _btnResume._bounds.moveTo(0, _btnSound._bounds.bottom + 1); + + // Set all the buttons to the widest button + GfxButton *btnList[6] = {&_btnRestore, &_btnSave, &_btnRestart, &_btnQuit, &_btnSound, &_btnResume}; + int16 btnWidth = 0; + for (int idx = 0; idx < 6; ++idx) + btnWidth = MAX(btnWidth, btnList[idx]->_bounds.width()); + for (int idx = 0; idx < 6; ++idx) + btnList[idx]->_bounds.setWidth(btnWidth); + + // Add the items to the dialog + addElements(&_gfxMessage, &_btnRestore, &_btnSave, &_btnRestart, &_btnQuit, &_btnSound, &_btnResume, NULL); + + // Set the dialog size and position + frame(); + setCenter(160, 100); +} + +/*--------------------------------------------------------------------------*/ + +bool GfxInvImage::process(Event &event) { + if (!event.handled && (event.eventType == EVENT_BUTTON_DOWN)) { + event.handled = _bounds.contains(event.mousePos); + return event.handled; + } + + return false; +} + +/*--------------------------------------------------------------------------*/ + +void InventoryDialog::show() { + // Determine how many items are in the player's inventory + int itemCount = 0; + SynchronizedList::iterator i; + for (i = RING_INVENTORY._itemList.begin(); i != RING_INVENTORY._itemList.end(); ++i) { + if ((*i)->inInventory()) + ++itemCount; + } + + if (itemCount == 0) { + MessageDialog::show(INV_EMPTY_MSG, OK_BTN_STRING); + return; + } + + InventoryDialog *dlg = new InventoryDialog(); + dlg->draw(); + dlg->execute(); + delete dlg; +} + +InventoryDialog::InventoryDialog() { + // Determine the maximum size of the image of any item in the player's inventory + int imgWidth = 0, imgHeight = 0; + + SynchronizedList::iterator i; + for (i = RING_INVENTORY._itemList.begin(); i != RING_INVENTORY._itemList.end(); ++i) { + InvObject *invObject = *i; + if (invObject->inInventory()) { + // Get the image for the item + GfxSurface itemSurface = surfaceFromRes(invObject->_displayResNum, invObject->_rlbNum, invObject->_cursorNum); + + // Maintain the dimensions of the largest item image + imgWidth = MAX(imgWidth, (int)itemSurface.getBounds().width()); + imgHeight = MAX(imgHeight, (int)itemSurface.getBounds().height()); + + // Add the item to the display list + GfxInvImage *img = new GfxInvImage(); + _images.push_back(img); + img->setDetails(invObject->_displayResNum, invObject->_rlbNum, invObject->_cursorNum); + img->_invObject = invObject; + add(img); + } + } + assert(_images.size() > 0); + + // Figure out the number of columns/rows to show all the items + int cellsSize = 3; + while ((cellsSize * cellsSize) < (int)_images.size()) + ++cellsSize; + + // Set the position of each inventory item to be displayed + int cellX = 0; + Common::Point pt(0, 0); + + for (uint idx = 0; idx < _images.size(); ++idx) { + if (cellX == cellsSize) { + // Move to the start of the next line + pt.x = 0; + pt.y += imgHeight + 2; + cellX = 0; + } + + _images[idx]->_bounds.moveTo(pt.x, pt.y); + + pt.x += imgWidth + 2; + ++cellX; + } + + // Set up the buttons + pt.y += imgHeight + 2; + _btnOk.setText(OK_BTN_STRING); + _btnOk._bounds.moveTo((imgWidth + 2) * cellsSize - _btnOk._bounds.width(), pt.y); + _btnLook.setText(LOOK_BTN_STRING); + _btnLook._bounds.moveTo(_btnOk._bounds.left - _btnLook._bounds.width() - 2, _btnOk._bounds.top); + addElements(&_btnLook, &_btnOk, NULL); + + frame(); + setCenter(SCREEN_CENTER_X, SCREEN_CENTER_Y); +} + +InventoryDialog::~InventoryDialog() { + for (uint idx = 0; idx < _images.size(); ++idx) + delete _images[idx]; +} + +void InventoryDialog::execute() { + if ((RING_INVENTORY._selectedItem) && RING_INVENTORY._selectedItem->inInventory()) + RING_INVENTORY._selectedItem->setCursor(); + + GfxElement *hiliteObj; + bool lookFlag = false; + _gfxManager.activate(); + + while (!g_vm->shouldQuit()) { + // Get events + Event event; + while (!g_globals->_events.getEvent(event) && !g_vm->shouldQuit()) { + g_system->delayMillis(10); + g_system->updateScreen(); + } + if (g_vm->shouldQuit()) + break; + + hiliteObj = NULL; + if ((event.eventType == EVENT_BUTTON_DOWN) && !_bounds.contains(event.mousePos)) + break; + + // Pass event to elements + event.mousePos.x -= _gfxManager._bounds.left; + event.mousePos.y -= _gfxManager._bounds.top; + + for (GfxElementList::iterator i = _elements.begin(); i != _elements.end(); ++i) { + if ((*i)->process(event)) + hiliteObj = *i; + } + + if (!event.handled && event.eventType == EVENT_KEYPRESS) { + if ((event.kbd.keycode == Common::KEYCODE_RETURN) || (event.kbd.keycode == Common::KEYCODE_ESCAPE)) { + // Exit the dialog + //hiliteObj = &_btnOk; + break; + } + } + + if (hiliteObj == &_btnOk) { + // Ok button clicked + if (lookFlag) + g_globals->_events.setCursor(CURSOR_WALK); + break; + } else if (hiliteObj == &_btnLook) { + // Look button clicked + if (_btnLook._message == LOOK_BTN_STRING) { + _btnLook._message = PICK_BTN_STRING; + lookFlag = 1; + g_globals->_events.setCursor(CURSOR_LOOK); + } else { + _btnLook._message = LOOK_BTN_STRING; + lookFlag = 0; + g_globals->_events.setCursor(CURSOR_WALK); + } + + hiliteObj->draw(); + } else if (hiliteObj) { + // Inventory item selected + InvObject *invObject = static_cast(hiliteObj)->_invObject; + if (lookFlag) { + g_globals->_screenSurface.displayText(invObject->_description); + } else { + RING_INVENTORY._selectedItem = invObject; + invObject->setCursor(); + } + } + } + + _gfxManager.deactivate(); +} + } // End of namespace Ringworld } // End of namespace TsAGE diff --git a/engines/tsage/ringworld/ringworld_dialogs.h b/engines/tsage/ringworld/ringworld_dialogs.h index 11a8f10e70..b14b3f6d78 100644 --- a/engines/tsage/ringworld/ringworld_dialogs.h +++ b/engines/tsage/ringworld/ringworld_dialogs.h @@ -63,6 +63,45 @@ public: void execute(); }; +class OptionsDialog : public ModalDialog { +private: + GfxButton _btnSave, _btnRestore, _btnRestart; + GfxButton _btnQuit, _btnResume; + GfxButton _btnSound; + GfxMessage _gfxMessage; +public: + OptionsDialog(); + virtual ~OptionsDialog() {} + GfxButton *execute() { return GfxDialog::execute(&_btnResume); } + + static void show(); +}; + +/*--------------------------------------------------------------------------*/ + +class GfxInvImage : public GfxImage { +public: + InvObject *_invObject; +public: + GfxInvImage() : GfxImage(), _invObject(NULL) {} + + virtual bool process(Event &event); +}; + +#define MAX_INVOBJECT_DISPLAY 20 + +class InventoryDialog : public ModalDialog { +private: + Common::Array _images; + GfxButton _btnOk, _btnLook; +public: + InventoryDialog(); + virtual ~InventoryDialog(); + void execute(); + + static void show(); +}; + } // End of namespace Ringworld } // End of namespace TsAGE diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index a6e6eae84e..4e7ac1fa10 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -77,7 +77,6 @@ const char *INV_EMPTY_MSG = "You have nothing in your possesion."; const char *QUIT_CONFIRM_MSG = "Do you want to quit playing this game?"; const char *RESTART_MSG = "Do you want to restart this game?"; const char *GAME_PAUSED_MSG = "Game is paused."; -const char *OPTIONS_MSG = "\x01Options..."; const char *OK_BTN_STRING = " Ok "; const char *CANCEL_BTN_STRING = "Cancel"; const char *QUIT_BTN_STRING = " Quit "; @@ -99,6 +98,7 @@ F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; const char *START_PLAY_BTN_STRING = " Start Play "; const char *INTRODUCTION_BTN_STRING = "Introduction"; +const char *OPTIONS_MSG = "\x01Options..."; // Scene specific resources const char *EXIT_MSG = " EXIT "; @@ -134,6 +134,7 @@ F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; const char *START_PLAY_BTN_STRING = " Play "; const char *INTRODUCTION_BTN_STRING = " Watch "; +const char *OPTIONS_MSG = "Options..."; // Blue Force general messages const char *BF_NAME = "Blue Force"; @@ -191,6 +192,8 @@ const char *CONSOLE_MESSAGES[] = { "Mozart", "Bach", "Rossini" }; +const char *HELP_MSG = "\x1\rRETURN TO\r RINGWORLD\x14"; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index b2c0b0f262..faaa0fee64 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -44,7 +44,6 @@ extern const char *RESTORING_NOT_ALLOWED_MSG; extern const char *QUIT_CONFIRM_MSG; extern const char *RESTART_MSG; extern const char *GAME_PAUSED_MSG; -extern const char *OPTIONS_MSG; extern const char *OK_BTN_STRING; extern const char *CANCEL_BTN_STRING; extern const char *QUIT_BTN_STRING; @@ -64,6 +63,7 @@ extern const char *HELP_MSG; extern const char *WATCH_INTRO_MSG; extern const char *START_PLAY_BTN_STRING; extern const char *INTRODUCTION_BTN_STRING; +extern const char *OPTIONS_MSG; // Scene specific resources extern const char *EXIT_MSG; @@ -98,6 +98,7 @@ extern const char *HELP_MSG; extern const char *WATCH_INTRO_MSG; extern const char *START_PLAY_BTN_STRING; extern const char *INTRODUCTION_BTN_STRING; +extern const char *OPTIONS_MSG; // Blue Force messages extern const char *BF_NAME; @@ -148,6 +149,9 @@ namespace Ringworld2 { // Scene 125 - Console messages extern const char *CONSOLE_MESSAGES[]; +// Dialog messages +extern const char *HELP_MSG; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- 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') 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 f14d3e0276d159dbcbab4582c47cde5c86dd5389 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Nov 2011 12:11:47 +1100 Subject: TSAGE: Bugfix for reading messages with an invalid line number --- engines/tsage/resources.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index 652ab32350..b8c8fcdeea 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -414,16 +414,27 @@ byte *TLib::getSubResource(int resNum, int rlbNum, int index, uint *size, bool s */ bool TLib::getMessage(int resNum, int lineNum, Common::String &result, bool suppressErrors) { byte *msgData = getResource(RES_MESSAGE, resNum, 0, true); - if (!msgData) { + if (!msgData || (lineNum < 0)) { if (suppressErrors) return false; error("Unknown message %d line %d", resNum, lineNum); } + int msgSize = _memoryManager.getSize(msgData); const char *srcP = (const char *)msgData; - while (lineNum-- > 0) + const char *endP = srcP + msgSize; + + while (lineNum-- > 0) { srcP += strlen(srcP) + 1; + + if (srcP >= endP) { + if (suppressErrors) + return false; + + error("Unknown message %d line %d", resNum, lineNum); + } + } result = Common::String(srcP); _memoryManager.deallocate(msgData); @@ -503,7 +514,7 @@ Common::String ResourceManager::getMessage(int resNum, int lineNum, bool suppres if (!suppressErrors) error("Unknown message %d line %d", resNum, lineNum); - return result; + return Common::String(); } } // end of namespace TsAGE -- 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') 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 acdeb1fb31021f0d563318639b4a261e3b370476 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Nov 2011 21:06:57 +1100 Subject: TSAGE: Added support for semi-transparent dialogs used in R2RW --- engines/tsage/blue_force/blueforce_dialogs.cpp | 1 - engines/tsage/core.cpp | 9 ++++++++ engines/tsage/core.h | 1 + engines/tsage/globals.cpp | 15 ++++++++----- engines/tsage/graphics.cpp | 31 +++++++++++++++++++++++++- 5 files changed, 49 insertions(+), 8 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index 8428086865..b9b3ad6c22 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -496,7 +496,6 @@ OptionsDialog::OptionsDialog() { setCenter(160, 90); } - } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index cd8e07e44e..4061705707 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1298,6 +1298,15 @@ void ScenePalette::setPalette(int index, int count) { g_system->getPaletteManager()->setPalette((const byte *)&_palette[index * 3], index, count); } +/** + * Get a palette entry + */ +void ScenePalette::getEntry(int index, uint *r, uint *g, uint *b) { + *r = _palette[index * 3]; + *g = _palette[index * 3 + 1]; + *b = _palette[index * 3 + 2]; +} + /** * Set a palette entry */ diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 87d4a02123..95ff1c145c 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -372,6 +372,7 @@ public: bool loadPalette(int paletteNum); void refresh(); void setPalette(int index, int count); + void getEntry(int index, uint *r, uint *g, uint *b); void setEntry(int index, uint r, uint g, uint b); uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff); void getPalette(int start = 0, int count = 256); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index a76e03ae69..b667924aef 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -79,12 +79,15 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _dialogCenter.y = 140; } else if (g_vm->getGameID() == GType_Ringworld2) { // Return to Ringworld - _gfxFontNumber = 2; - _gfxColors.background = 89; - _gfxColors.foreground = 83; - _fontColors.background = 88; - _fontColors.foreground = 92; - _dialogCenter.y = 140; + _gfxFontNumber = 50; + _gfxColors.background = 0; + _gfxColors.foreground = 59; + _fontColors.background = 4; + _fontColors.foreground = 15; + _color1 = 59; + _color2 = 15; + _color3 = 4; + _dialogCenter.y = 100; } else if (g_vm->getGameID() == GType_Geekwad) { // Blue Force _gfxFontNumber = 0; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 4b2da0b456..6d95d09d29 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -676,7 +676,36 @@ void GfxElement::drawFrame() { Rect tempRect = _bounds; tempRect.collapse(g_globals->_gfxEdgeAdjust, g_globals->_gfxEdgeAdjust); tempRect.collapse(-1, -1); - gfxManager.fillRect(tempRect, _colors.background); + + if (g_vm->getGameID() == GType_Ringworld2) { + // For Return to Ringworld, use palette shading + + // Get the current palette and determining a shading translation list + ScenePalette tempPalette; + tempPalette.getPalette(0, 256); + int transList[256]; + + for (int i = 0; i < 256; ++i) { + uint r, g, b, v; + tempPalette.getEntry(i, &r, &g, &b); + v = ((r >> 1) + (g >> 1) + (b >> 1)) / 4; + + transList[i] = tempPalette.indexOf(v, v, v); + } + + // Loop through the surface area to replace each pixel with it's proper shaded replacement + Graphics::Surface surface = gfxManager.lockSurface(); + for (int y = tempRect.top; y < tempRect.bottom; ++y) { + byte *lineP = (byte *)surface.getBasePtr(tempRect.left, y); + for (int x = 0; x < tempRect.width(); ++x) + *lineP++ = transList[*lineP]; + } + gfxManager.unlockSurface(); + + } else { + // Fill dialog content with specified background colour + gfxManager.fillRect(tempRect, _colors.background); + } --tempRect.bottom; --tempRect.right; gfxManager.fillArea(tempRect.left, tempRect.top, bgColor); -- 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 ++++++++ engines/tsage/staticres.cpp | 5 ++++ engines/tsage/staticres.h | 5 ++++ 4 files changed, 60 insertions(+) (limited to 'engines/tsage') 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 diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 4e7ac1fa10..84b76ad47f 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -193,6 +193,11 @@ const char *CONSOLE_MESSAGES[] = { }; const char *HELP_MSG = "\x1\rRETURN TO\r RINGWORLD\x14"; +const char *CHAR_TITLE = "\x01Select Character:"; +const char *CHAR_QUINN_MSG = " Quinn "; +const char *CHAR_SEEKER_MSG = " Seeker "; +const char *CHAR_MIRANDA_MSG = "Miranda"; +const char *CHAR_CANCEL_MSG = " Cancel "; } // End of namespace Ringworld2 diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index faaa0fee64..2fd97d198c 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -151,6 +151,11 @@ extern const char *CONSOLE_MESSAGES[]; // Dialog messages extern const char *HELP_MSG; +extern const char *CHAR_TITLE; +extern const char *CHAR_QUINN_MSG; +extern const char *CHAR_SEEKER_MSG; +extern const char *CHAR_MIRANDA_MSG; +extern const char *CHAR_CANCEL_MSG; } // End of namespace Ringworld2 -- cgit v1.2.3 From ebc3763d64c5192b04c35d27b876adeb88b5ef47 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 1 Nov 2011 21:59:43 +1100 Subject: TSAGE: Removed game stubs for Geekwad --- engines/tsage/core.cpp | 2 +- engines/tsage/detection.cpp | 1 - engines/tsage/detection_tables.h | 15 - engines/tsage/geekwad/geekwad_logic.cpp | 80 ----- engines/tsage/geekwad/geekwad_logic.h | 79 ----- engines/tsage/geekwad/geekwad_scenes0.cpp | 498 ------------------------------ engines/tsage/geekwad/geekwad_scenes0.h | 85 ----- engines/tsage/globals.cpp | 15 - engines/tsage/globals.h | 10 - engines/tsage/module.mk | 2 - engines/tsage/tsage.cpp | 6 - engines/tsage/tsage.h | 3 +- 12 files changed, 2 insertions(+), 794 deletions(-) delete mode 100644 engines/tsage/geekwad/geekwad_logic.cpp delete mode 100644 engines/tsage/geekwad/geekwad_logic.h delete mode 100644 engines/tsage/geekwad/geekwad_scenes0.cpp delete mode 100644 engines/tsage/geekwad/geekwad_scenes0.h (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 4061705707..dbea7e8d98 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1447,7 +1447,7 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { } Rect tempRect = bounds; - if ((g_vm->getGameID() != GType_Ringworld) && (g_vm->getGameID() != GType_Geekwad)) + if (g_vm->getGameID() != GType_Ringworld) tempRect.setHeight(T2_GLOBALS._interfaceY); g_globals->_screenSurface.copyFrom(g_globals->_sceneManager._scene->_backSurface, diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index ab179cbac8..12add10c58 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -62,7 +62,6 @@ static const PlainGameDescriptor tSageGameTitles[] = { { "ringworld", "Ringworld: Revenge of the Patriarch" }, { "blueforce", "Blue Force" }, { "ringworld2", "Return to Ringworld" }, - { "geekwad", "The Geekwad: Games Of The Galaxy" }, { 0, 0 } }; diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index e9796426cd..360dbac0ae 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -156,21 +156,6 @@ static const tSageGameDescription gameDescriptions[] = { GF_CD | GF_ALT_REGIONS }, - // Geekwad - { - { - "geekwad", - "CD", - AD_ENTRY1s("geekwad.rlb", "0a441f7c4c7ce20fd3ac7707a5d64ee5", 5570365), - Common::EN_ANY, - Common::kPlatformPC, - ADGF_CD | ADGF_UNSTABLE, - GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) - }, - GType_Geekwad, - GF_CD | GF_ALT_REGIONS - }, - { AD_TABLE_END_MARKER, 0, 0 } }; diff --git a/engines/tsage/geekwad/geekwad_logic.cpp b/engines/tsage/geekwad/geekwad_logic.cpp deleted file mode 100644 index a2d4fcb0f4..0000000000 --- a/engines/tsage/geekwad/geekwad_logic.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* 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 "common/config-manager.h" -#include "tsage/scenes.h" -#include "tsage/tsage.h" -#include "tsage/geekwad/geekwad_logic.h" -#include "tsage/geekwad/geekwad_scenes0.h" - -namespace TsAGE { - -namespace Geekwad { - -void GeekwadGame::start() { - // Start the game - g_globals->_sceneManager.changeScene(150); -} - -Scene *GeekwadGame::createScene(int sceneNumber) { - switch (sceneNumber) { - /* Scene group #0 */ - // Tsunami title screen - case 150: return new Scene150(); - - // Geekwad credits screen - case 200: return new Scene200(); - - default: - error("Unknown scene number - %d", sceneNumber); - break; - } -} - -void GeekwadGame::rightClick() { -} - -/** - * Returns true if it is currently okay to restore a game - */ -bool GeekwadGame::canLoadGameStateCurrently() { - return true; -} - -/** - * Returns true if it is currently okay to save the game - */ -bool GeekwadGame::canSaveGameStateCurrently() { - return true; -} - -void GeekwadGame::processEvent(Event &event) { -} - -/*--------------------------------------------------------------------------*/ - -SceneExt::SceneExt(): Scene() { -} - -} // End of namespace Geekwad - -} // End of namespace TsAGE diff --git a/engines/tsage/geekwad/geekwad_logic.h b/engines/tsage/geekwad/geekwad_logic.h deleted file mode 100644 index fbccaeee00..0000000000 --- a/engines/tsage/geekwad/geekwad_logic.h +++ /dev/null @@ -1,79 +0,0 @@ -/* 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_GEEKWAD_LOGIC_H -#define TSAGE_GEEKWAD_LOGIC_H - -#include "common/scummsys.h" -#include "tsage/events.h" -#include "tsage/core.h" -#include "tsage/scenes.h" -#include "tsage/globals.h" - -namespace TsAGE { - -namespace Geekwad { - -using namespace TsAGE; - -class SceneFactory { -public: - static Scene *createScene(int sceneNumber); -}; - -class SceneExt: public Scene { -public: -public: - SceneExt(); - - virtual Common::String getClassName() { return "SceneExt"; } -}; - -class GeekwadGame: public Game { -public: - virtual void start(); - - virtual Scene *createScene(int sceneNumber); - virtual void processEvent(Event &event); - virtual void rightClick(); - virtual bool canSaveGameStateCurrently(); - virtual bool canLoadGameStateCurrently(); -}; - -class SceneObject2: public SceneObject { -public: - int _v1, _v2; - - SceneObject2() { _v1 = _v2 = 0; } - virtual Common::String getClassName() { return "SceneObject2"; } - virtual void synchronize(Serializer &s) { - SceneObject::synchronize(s); - s.syncAsSint16LE(_v1); - s.syncAsSint16LE(_v2); - } -}; - -} // End of namespace Geekwad - -} // End of namespace TsAGE - -#endif diff --git a/engines/tsage/geekwad/geekwad_scenes0.cpp b/engines/tsage/geekwad/geekwad_scenes0.cpp deleted file mode 100644 index 9241b1dace..0000000000 --- a/engines/tsage/geekwad/geekwad_scenes0.cpp +++ /dev/null @@ -1,498 +0,0 @@ -/* 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/geekwad/geekwad_scenes0.h" - -namespace TsAGE { - -namespace Geekwad { - -/*-------------------------------------------------------------------------- - * Scene 150 - Tsunami Title Screen - * - *--------------------------------------------------------------------------*/ - -void Scene150::Action1::signal() { - Scene150 *scene = (Scene150 *)GW_GLOBALS._sceneManager._scene; - static byte black[3] = { 0, 0, 0 }; - - switch (_actionIndex++) { - case 0: - setDelay(2); - break; - case 1: - GW_GLOBALS._sound1.play(1); - GW_GLOBALS._scenePalette.addRotation(64, 127, -1, 1, this); - break; - case 2: - scene->_object1.setVisage(822); - scene->_object1._strip = 1; - scene->_object1._frame = 1; - scene->_object1.changeZoom(100); - - scene->_object2.setVisage(822); - scene->_object2._strip = 2; - scene->_object2._frame = 1; - scene->_object2.changeZoom(100); - - scene->_object3.setVisage(822); - scene->_object3._strip = 3; - scene->_object3._frame = 1; - scene->_object3.changeZoom(100); - - scene->_object4.setVisage(822); - scene->_object4._strip = 4; - scene->_object4._frame = 1; - scene->_object4.changeZoom(100); - - scene->_object5.setVisage(822); - scene->_object5._strip = 5; - scene->_object5._frame = 1; - scene->_object5.changeZoom(100); - - scene->_object6.setVisage(822); - scene->_object6._strip = 6; - scene->_object6._frame = 1; - scene->_object6.changeZoom(100); - - scene->_object7.setVisage(822); - scene->_object7._strip = 7; - scene->_object7._frame = 1; - scene->_object7.changeZoom(100); - - scene->_object8.setVisage(822); - scene->_object8._strip = 8; - scene->_object8._frame = 1; - scene->_object8.changeZoom(100); - - setDelay(1); - break; - case 3: - GW_GLOBALS._scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this); - break; - case 4: - setDelay(60); - break; - case 5: - scene->_object2.animate(ANIM_MODE_5, NULL); - scene->_object3.animate(ANIM_MODE_5, NULL); - scene->_object4.animate(ANIM_MODE_5, NULL); - scene->_object5.animate(ANIM_MODE_5, NULL); - scene->_object6.animate(ANIM_MODE_5, NULL); - scene->_object7.animate(ANIM_MODE_5, this); - break; - case 6: - setDelay(120); - break; - case 7: - GW_GLOBALS._scenePalette.addFader(black, 1, 5, this); - break; - case 8: - GW_GLOBALS._sceneManager.changeScene(200); - remove(); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -void Scene150::postInit(SceneObjectList *OwnerList) { - loadScene(820); - Scene::postInit(); - setZoomPercents(60, 85, 200, 100); - - _scenePalette.loadPalette(822); - - _object1.postInit(); - _object1.setVisage(821); - _object1._strip = 1; - _object1._frame = 1; - _object1.animate(ANIM_MODE_NONE, NULL); - _object1.setPosition(Common::Point(62, 85)); - - _object2.postInit(); - _object2.setVisage(821); - _object2._strip = 2; - _object2._frame = 1; - _object2.animate(ANIM_MODE_NONE, NULL); - _object2.setPosition(Common::Point(27, 94)); - - _object3.postInit(); - _object3.setVisage(821); - _object3._strip = 2; - _object3._frame = 2; - _object3.animate(ANIM_MODE_NONE, NULL); - _object3.setPosition(Common::Point(68, 94)); - - _object4.postInit(); - _object4.setVisage(821); - _object4._strip = 2; - _object4._frame = 3; - _object4.animate(ANIM_MODE_NONE, NULL); - _object4.setPosition(Common::Point(110, 94)); - - _object5.postInit(); - _object5.setVisage(821); - _object5._strip = 2; - _object5._frame = 4; - _object5.animate(ANIM_MODE_NONE, NULL); - _object5.setPosition(Common::Point(154, 94)); - - _object6.postInit(); - _object6.setVisage(821); - _object6._strip = 2; - _object6._frame = 5; - _object6.animate(ANIM_MODE_NONE, NULL); - _object6.setPosition(Common::Point(199, 94)); - - _object7.postInit(); - _object7.setVisage(821); - _object7._strip = 2; - _object7._frame = 6; - _object7.animate(ANIM_MODE_NONE, NULL); - _object7.setPosition(Common::Point(244, 94)); - - _object8.postInit(); - _object8.setVisage(821); - _object8._strip = 2; - _object8._frame = 7; - _object8.animate(ANIM_MODE_NONE, NULL); - _object8.setPosition(Common::Point(286, 94)); - - setAction(&_action1); -} - -/*-------------------------------------------------------------------------- - * Scene 200 - Geekwad credits screen - * - *--------------------------------------------------------------------------*/ - -struct CreditEntry { - int visage; - int strip; - int frame; -}; - -const CreditEntry credits[] = { - {5500, 1, 1}, {5500, 1, 2}, {5500, 2, 1}, {5500, 2, 2}, {5500, 8, 2}, {5500, 3, 1}, - {5500, 3, 2}, {5500, 4, 1}, {5500, 4, 2}, {5500, 5, 1}, {5500, 5, 2}, {5500, 8, 2}, - {5500, 6, 1}, {5500, 6, 2}, {5500, 7, 1}, {5500, 7, 2}, {5500, 8, 1} -}; -#define TOTAL_CREDITS 17 - -void Scene200::Action1::signal() { - Scene200 *scene = (Scene200 *)GW_GLOBALS._sceneManager._scene; - - switch (_actionIndex) { - case 0: { - ++scene->_fieldAB2; - - if ((scene->_creditIndex < TOTAL_CREDITS) && (!scene->_creditIndex || (*scene->_list2.begin())->_position.y < 192)) { - SceneObject2 *obj = new SceneObject2(); - obj->postInit(); - obj->setVisage(credits[scene->_creditIndex].visage); - obj->setStrip(credits[scene->_creditIndex].strip); - obj->setFrame(credits[scene->_creditIndex].frame); - obj->changeZoom(106); - obj->fixPriority(100); - obj->setPosition(Common::Point(160, 210)); - obj->_flags |= OBJFLAG_CLONED; - obj->_v1 = obj->_v2 = 0; - - scene->_list2.push_back(obj); - ++scene->_creditIndex; - } - - SceneObject2 *item; - SynchronizedList::iterator i; - for (i = scene->_list2.begin(); i != scene->_list2.end(); ++i) { - item = *i; - item->setPosition(Common::Point(item->_position.x, item->_position.y - 1)); - item->changeZoom(item->_percent - ((210 - item->_position.y + 100) / 100)); - } - - item = *scene->_list2.begin(); - if (item->_percent < 20) { - item->remove(); - scene->_list2.remove(item); - - if (scene->_list2.empty()) { - ++_actionIndex; - scene->_sound1.fadeOut(this); - } - } - - setDelay(6); - break; - } - case 1: - setDelay(1); - ++_actionIndex; - break; - case 2: - scene->_sound1.play(3); - scene->_sound1.setVol(127); - - scene->_object1.postInit(); - scene->_object1.setVisage(5510); - scene->_object1.setStrip(1); - scene->_object1.setFrame(1); - scene->_object1.changeZoom(10); - scene->_object1.fixPriority(100); - scene->_object1.setPosition(Common::Point(160, 190)); - - setDelay(3); - ++_actionIndex; - break; - case 3: - scene->_object1.changeZoom(scene->_object1._percent + 5); - if (scene->_object1._percent >= 100) - ++_actionIndex; - - setDelay(3); - break; - case 4: - scene->_object2.postInit(); - scene->_object2.setVisage(5000); - scene->_object2.setStrip(1); - scene->_object2.setFrame(1); - scene->_object2.fixPriority(110); - scene->_object2.setPosition(Common::Point(-30, 100)); - scene->_object2.animate(ANIM_MODE_2); - - scene->_object3.postInit(); - scene->_object3.setVisage(5505); - scene->_object3.setStrip(1); - scene->_object3.setFrame(1); - scene->_object3.fixPriority(100); - scene->_object3.setPosition(Common::Point(412, 117)); - - scene->_object4.postInit(); - scene->_object4.setVisage(5505); - scene->_object4.setStrip(2); - scene->_object4.setFrame(1); - scene->_object4.fixPriority(101); - scene->_object4.setPosition(Common::Point(scene->_object3._position.x + 35, - scene->_object3._position.y - 19)); - - ++_actionIndex; - setDelay(6); - break; - case 5: - scene->_creditIndex = 0; - scene->_object2.setPosition(Common::Point(scene->_object2._position.x +12, scene->_object2._position.y)); - - if (scene->_object2._position.x > 240) - ++_actionIndex; - break; - case 6: - ++scene->_creditIndex; - if ((scene->_creditIndex % 2) != 0) { - scene->_object2.setPosition(Common::Point(scene->_object2._position.x - 12, scene->_object2._position.y)); - scene->_sound2.play(611); - } else { - scene->_object2.setPosition(Common::Point(scene->_object2._position.x + 12, scene->_object2._position.y)); - } - - if (scene->_creditIndex >= 6) - ++_actionIndex; - break; - case 7: - scene->loadBackground(8, 0); - scene->_object2.setPosition(Common::Point(scene->_object2._position.x, scene->_object2._position.y + 2)); - scene->_object1.setPosition(Common::Point(scene->_object1._position.x - 12, scene->_object1._position.y)); - - if (scene->_sceneBounds.left >= 160) { - scene->_object1.remove(); - ++_actionIndex; - } - break; - case 8: - scene->_object2.setPosition(Common::Point(scene->_object2._position.x + 12, scene->_object2._position.y)); - - if (scene->_object2._position.x > 321) - ++_actionIndex; - break; - case 9: - scene->_sound2.play(611); - scene->_object2.setPosition(Common::Point(scene->_object2._position.x - 12, scene->_object2._position.y)); - scene->_object3.setPosition(Common::Point(scene->_object3._position.x + 12, scene->_object3._position.y)); - scene->_object4.setPosition(Common::Point(scene->_object4._position.x + 12, scene->_object2._position.y)); - scene->_object4.setFrame(scene->_object4.getFrameCount()); - - setDelay(6); - ++_actionIndex; - break; - case 10: - scene->_object3.setPosition(Common::Point(scene->_object3._position.x - 12, scene->_object3._position.y)); - scene->_object4.setPosition(Common::Point(scene->_object4._position.x - 12, scene->_object2._position.y)); - scene->_object4.setAction(&scene->_action2); - scene->_object2.setPosition(Common::Point(scene->_object2._position.x - 12, scene->_object2._position.y)); - scene->_object2.fixPriority(80); - - setDelay(6); - ++_actionIndex; - break; - case 11: - scene->_object2.changeZoom(scene->_object2._percent - 5); - if (scene->_object2._percent < 20) - ++_actionIndex; - break; - case 12: - scene->_object2.setPosition(Common::Point(scene->_object2._position.x + 2, - scene->_object2._position.y - ((scene->_object2._position.y <= 80) ? 0 : 2))); - if (scene->_object2._position.x > 390) - ++_actionIndex; - break; - case 13: - scene->_field846 = GW_GLOBALS._events.getFrameNumber() - scene->_field846; - scene->_field848 = (scene->_field846 > 3600) ? 2 : 1; - scene->_creditIndex = 0; - ++_actionIndex; - // Deliberate fall-through - case 14: { - setDelay(2); - - if ((scene->_creditIndex != 0) && ((scene->_creditIndex == -1) || ((*scene->_list1.begin())->_position.y >= 142))) { - Common::String msg = g_resourceManager->getMessage(200, scene->_creditIndex); - - if (msg.hasPrefix("~")) { - scene->_creditIndex = -1; - } else { - if (msg.empty()) - msg = " "; - - SceneText *sceneText = new SceneText(); - sceneText->_fontNumber = 71; - - if (msg.hasPrefix("@")) { - sceneText->_color1 = 43; - sceneText->_color2 = 46; - sceneText->_color3 = 80; - msg.deleteChar(0); - } else { - sceneText->_color1 = 100; - sceneText->_color2 = 103; - sceneText->_color3 = 16; - } - - sceneText->_width = 400; - sceneText->setup(msg); - sceneText->_flags |= OBJFLAG_CLONED; - sceneText->fixPriority(199); - - int fontNumber = GW_GLOBALS.gfxManager()._font._fontNumber; - GW_GLOBALS.gfxManager()._font.setFontNumber(sceneText->_fontNumber); - int strWidth = GW_GLOBALS.gfxManager().getStringWidth(msg.c_str()); - - sceneText->setPosition(Common::Point(270 - (strWidth / 2), 150)); - GW_GLOBALS.gfxManager()._font.setFontNumber(fontNumber); - - scene->_list1.push_back(sceneText); - } - } - - SynchronizedList::iterator i; - for (i = scene->_list1.begin(); i != scene->_list1.end(); ++i) { - SceneText *item = *i; - item->setPosition(Common::Point(item->_position.x, item->_position.y - scene->_field848)); - } - - SceneText *topItem = *scene->_list1.begin(); - if (topItem->_position.y < 50) { - topItem->remove(); - scene->_list1.remove(topItem); - - if (scene->_list1.empty()) { - setDelay(10); - ++_actionIndex; - } - } - break; - } - case 15: - ++_actionIndex; - scene->_sound1.fade(0, 5, 4, true, this); - break; - case 16: - GW_GLOBALS._sceneManager.changeScene(500); - remove(); - break; - } -} - -void Scene200::Action2::signal() { - switch (_actionIndex++) { - case 0: - ++_actionIndex; - setDelay(GW_GLOBALS._randomSource.getRandomNumber(50) + 50); - break; - case 1: - ++_actionIndex; - static_cast(_owner)->animate(ANIM_MODE_8, 1, this); - break; - case 2: - _actionIndex = 0; - static_cast(_owner)->setFrame(1); - setDelay(1); - break; - } -} - -/*--------------------------------------------------------------------------*/ - -Scene200::Scene200(): Scene() { - _creditIndex = _fieldAB2 = 0; - _field846 = GW_GLOBALS._events.getFrameNumber(); -} - -void Scene200::postInit(SceneObjectList *OwnerList) { - Scene::postInit(); - loadScene(5500); - _sound1.play(2); - - setAction(&_action1); -} - -void Scene200::process(Event &event) { - switch (event.eventType) { - case EVENT_BUTTON_DOWN: - GW_GLOBALS._sceneManager.changeScene(500); - break; - case EVENT_KEYPRESS: - if ((event.kbd.keycode == Common::KEYCODE_ESCAPE) || (event.kbd.keycode == Common::KEYCODE_RETURN)) - GW_GLOBALS._sceneManager.changeScene(500); - break; - default: - break; - } - - if (!event.handled) - Scene::process(event); -} - -} // End of namespace Geekwad - -} // End of namespace TsAGE diff --git a/engines/tsage/geekwad/geekwad_scenes0.h b/engines/tsage/geekwad/geekwad_scenes0.h deleted file mode 100644 index 8c04f12486..0000000000 --- a/engines/tsage/geekwad/geekwad_scenes0.h +++ /dev/null @@ -1,85 +0,0 @@ -/* 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_GEEKWAD_SCENES0_H -#define TSAGE_GEEKWAD_SCENES0_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/geekwad/geekwad_logic.h" - -namespace TsAGE { - -namespace Geekwad { - -using namespace TsAGE; - -class Scene150: public Scene { - /* Actions */ - class Action1 : public Action { - public: - virtual void signal(); - }; -public: - Action1 _action1; - ScenePalette _scenePalette; - SceneObject _object1, _object2, _object3, _object4; - SceneObject _object5, _object6, _object7, _object8; - - virtual void postInit(SceneObjectList *OwnerList = NULL); -}; - -class Scene200: public Scene { - /* Actions */ - class Action1: public Action { - public: - virtual void signal(); - }; - class Action2: public Action { - public: - virtual void signal(); - }; -public: - Action1 _action1; - Action2 _action2; - ASound _sound1, _sound2; - SceneObject _object1, _object2, _object3, _object4; - int _field846, _field848; - int _fieldAB2, _fieldAB4, _creditIndex; - SynchronizedList _list1; - SynchronizedList _list2; - - Scene200(); - virtual void postInit(SceneObjectList *OwnerList = NULL); - virtual void process(Event &event); -}; - -} // End of namespace Geekwad - -} // End of namespace TsAGE - -#endif diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index b667924aef..623332e864 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -23,7 +23,6 @@ #include "tsage/globals.h" #include "tsage/tsage.h" #include "tsage/blue_force/blueforce_logic.h" -#include "tsage/geekwad/geekwad_logic.h" #include "tsage/ringworld/ringworld_demo.h" #include "tsage/ringworld/ringworld_logic.h" #include "tsage/ringworld2/ringworld2_logic.h" @@ -88,14 +87,6 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _color2 = 15; _color3 = 4; _dialogCenter.y = 100; - } else if (g_vm->getGameID() == GType_Geekwad) { - // Blue Force - _gfxFontNumber = 0; - _gfxColors.background = 89; - _gfxColors.foreground = 83; - _fontColors.background = 88; - _fontColors.foreground = 92; - _dialogCenter.y = 140; } else if ((g_vm->getGameID() == GType_Ringworld) && (g_vm->getFeatures() & GF_CD)) { _gfxFontNumber = 50; _gfxColors.background = 53; @@ -152,12 +143,6 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _game = new Ringworld2::Ringworld2Game(); _sceneHandler = new Ringworld2::SceneHandlerExt(); break; - - case GType_Geekwad: - _game = new Geekwad::GeekwadGame(); - _inventory = NULL; - _sceneHandler = new SceneHandler(); - break; } } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 37918b1938..1dc8e28606 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -121,7 +121,6 @@ extern Globals *g_globals; #define T2_GLOBALS (*((::TsAGE::TsAGE2Globals *)g_globals)) #define BF_GLOBALS (*((::TsAGE::BlueForce::BlueForceGlobals *)g_globals)) #define R2_GLOBALS (*((::TsAGE::Ringworld2::Ringworld2Globals *)g_globals)) -#define GW_GLOBALS (*((::TsAGE::Geekwad::GeekwadGlobals *)g_globals)) // Note: Currently this can't be part of the g_globals structure, since it needs to be constructed // prior to many of the fields in Globals execute their constructors @@ -255,15 +254,6 @@ public: } // End of namespace Ringworld2 -namespace Geekwad { - -class GeekwadGlobals: public Globals { -public: - ASoundExt _sound1; -}; - -} // End of namespace Geekwad - } // End of namespace TsAGE #endif diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 60f1823da7..0ea8916647 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -20,8 +20,6 @@ MODULE_OBJS := \ detection.o \ dialogs.o \ events.o \ - geekwad/geekwad_logic.o \ - geekwad/geekwad_scenes0.o \ globals.o \ graphics.o \ resources.o \ diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index 7dbfdd1f62..f2775e083d 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -100,12 +100,6 @@ void TSageEngine::initialize() { // Reset all global variables R2_GLOBALS.reset(); - } else if (g_vm->getGameID() == GType_Geekwad) { - g_resourceManager->addLib("GEEKWAD.RLB"); - g_globals = new Geekwad::GeekwadGlobals(); - - // Reset all global variables - GW_GLOBALS.reset(); } g_globals->gfxManager().setDefaults(); diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index e57823ecbc..eb36cf0790 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -41,8 +41,7 @@ namespace TsAGE { enum { GType_Ringworld = 0, GType_BlueForce = 1, - GType_Ringworld2 = 2, - GType_Geekwad = 3 + GType_Ringworld2 = 2 }; enum { -- 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') 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 47bc08a429ce03bf811dd63c45bd05cd76828dd7 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 1 Nov 2011 15:24:14 +0100 Subject: TSAGE: Fix undefined evaluation order --- engines/tsage/graphics.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 6d95d09d29..40654a345e 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -693,12 +693,15 @@ void GfxElement::drawFrame() { transList[i] = tempPalette.indexOf(v, v, v); } - // Loop through the surface area to replace each pixel with it's proper shaded replacement + // Loop through the surface area to replace each pixel + // with its proper shaded replacement Graphics::Surface surface = gfxManager.lockSurface(); for (int y = tempRect.top; y < tempRect.bottom; ++y) { byte *lineP = (byte *)surface.getBasePtr(tempRect.left, y); - for (int x = 0; x < tempRect.width(); ++x) - *lineP++ = transList[*lineP]; + for (int x = 0; x < tempRect.width(); ++x) { + *lineP = transList[*lineP]; + lineP++; + } } gfxManager.unlockSurface(); -- cgit v1.2.3 From 639c69862de7c8fd956c13de754dcae53b8648f8 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 2 Nov 2011 00:23:47 +0100 Subject: TSAGE: Blue Force - Car accident (600): Fix fade out after accident, rename some objects --- engines/tsage/blue_force/blueforce_scenes6.cpp | 32 ++++++++++++++------------ engines/tsage/blue_force/blueforce_scenes6.h | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp index 5a651d8475..49a3fd81f4 100644 --- a/engines/tsage/blue_force/blueforce_scenes6.cpp +++ b/engines/tsage/blue_force/blueforce_scenes6.cpp @@ -37,7 +37,7 @@ namespace BlueForce { void Scene600::Action1::signal() { Scene600 *scene = (Scene600 *)BF_GLOBALS._sceneManager._scene; - static const uint32 black = 0; + static byte red[3] = {220, 0, 0}; switch (_actionIndex++) { case 0: @@ -49,8 +49,8 @@ void Scene600::Action1::signal() { break; case 2: scene->_sound1.play(59); - setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_object1, - &BF_GLOBALS._player, &scene->_object3, NULL); + setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_ryan, + &BF_GLOBALS._player, &scene->_skidMarks, NULL); break; case 3: BF_GLOBALS._sound1.play(61); @@ -61,13 +61,13 @@ void Scene600::Action1::signal() { break; case 5: { BF_GLOBALS._player.remove(); - scene->_object1.remove(); + scene->_ryan.remove(); scene->_object2.remove(); - scene->_object3.remove(); + scene->_skidMarks.remove(); - for (int percent = 100; percent >= 0; percent -= 5) { - BF_GLOBALS._scenePalette.fade((const byte *)&black, false, percent); - g_system->delayMillis(10); + for (int percent = 100; percent >= 0; percent -= 2) { + BF_GLOBALS._scenePalette.fade((const byte *)&red, false, percent); + g_system->delayMillis(5); } SynchronizedList::iterator i; @@ -91,6 +91,8 @@ void Scene600::Action1::signal() { BF_GLOBALS._v51C44 = 0; remove(); break; + default: + break; } } @@ -110,14 +112,14 @@ void Scene600::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.setPosition(Common::Point(639, 0)); BF_GLOBALS._player.disableControl(); - _object3.postInit(); - _object3.hide(); + _skidMarks.postInit(); + _skidMarks.hide(); _object2.postInit(); - - _object1.postInit(); - _object1.setVisage(600); - _object1.setStrip(7); - _object1.setPosition(Common::Point(417, 82)); + + _ryan.postInit(); + _ryan.setVisage(600); + _ryan.setStrip(7); + _ryan.setPosition(Common::Point(417, 82)); BF_GLOBALS.clearFlag(onDuty); BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60); diff --git a/engines/tsage/blue_force/blueforce_scenes6.h b/engines/tsage/blue_force/blueforce_scenes6.h index e354e9e069..3f9c14aa11 100644 --- a/engines/tsage/blue_force/blueforce_scenes6.h +++ b/engines/tsage/blue_force/blueforce_scenes6.h @@ -49,7 +49,7 @@ public: SequenceManager _sequenceManager; Action1 _action1; ASoundExt _sound1; - NamedObject _object1, _object2, _object3; + NamedObject _ryan, _object2, _skidMarks; BackgroundSceneObject _object4, _object5; BackgroundSceneObject _object6, _object7, _object8; -- cgit v1.2.3 From 4e2cc6d50af3ad7ef9c7cc74dd58496f670bee66 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 2 Nov 2011 00:46:36 +0100 Subject: TSAGE: Blue Force - Hospital cut-scene (620): Fix a glitch in a fader --- engines/tsage/blue_force/blueforce_scenes6.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp index 49a3fd81f4..5fb1b562e0 100644 --- a/engines/tsage/blue_force/blueforce_scenes6.cpp +++ b/engines/tsage/blue_force/blueforce_scenes6.cpp @@ -183,7 +183,7 @@ void Scene620::signal() { _object1.postInit(); _object1.setVisage(622); _object1.setPosition(Common::Point(101, 41)); - addFader((const byte *)&black, 2, this); + add2Faders((const byte *)&black, 2, 622, this); break; case 5: _object1.remove(); @@ -242,6 +242,8 @@ void Scene620::signal() { BF_GLOBALS._dayNumber = 3; BF_GLOBALS._sceneManager.changeScene(271); break; + default: + break; } } -- cgit v1.2.3 From e38921855cfb88b36c85eb38f18323b476478e78 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 2 Nov 2011 01:43:42 +0100 Subject: TSAGE: Blue Force - City Hall (385): Fix Jim action, fix bug when giving him blue prints, change type of _jimFlag --- engines/tsage/blue_force/blueforce_scenes3.cpp | 26 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes3.h | 3 ++- 2 files changed, 15 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 3d42304926..a32bd4ded9 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -5317,8 +5317,7 @@ bool Scene385::Door::startAction(CursorType action, Event &event) { bool Scene385::Jim::startAction(CursorType action, Event &event) { Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene; - switch (action) { - case CURSOR_TALK: + if (action == CURSOR_TALK) { if (scene->_jimFlag) { scene->_talkAction = 3867; scene->setAction(&scene->_action1); @@ -5342,24 +5341,24 @@ bool Scene385::Jim::startAction(CursorType action, Event &event) { break; } - scene->_jimFlag = 1; + scene->_jimFlag = true; scene->setAction(&scene->_action1); } return true; - case INV_PRINT_OUT: + } else if (action == INV_PRINT_OUT) { if (!BF_GLOBALS.getFlag(fGotPointsForMCard)) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.getFlag(fGotPointsForMCard); + BF_GLOBALS.setFlag(fGotPointsForMCard); scene->setAction(&scene->_action2); return true; - } - break; - default: - break; - } - - return NamedObject::startAction(action, event); + } else + return false; + } else if (action < CURSOR_WALK) + // Any other inventory item + return false; + else + return NamedObject::startAction(action, event); } bool Scene385::Dezi::startAction(CursorType action, Event &event) { @@ -5430,7 +5429,8 @@ bool Scene385::Exit::startAction(CursorType action, Event &event) { Scene385::Scene385(): SceneExt() { - _talkAction = _jimFlag = 0; + _talkAction = 0; + _jimFlag = false; } void Scene385::synchronize(Serializer &s) { diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index 2cff4d5df8..de53db83a9 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -815,7 +815,8 @@ public: SpeakerJake385 _jake385Speaker; NamedHotspot _item1, _item2, _item3, _item4, _item5; Exit _exit; - int _talkAction, _jimFlag; + int _talkAction; + bool _jimFlag; Scene385(); virtual void synchronize(Serializer &s); -- cgit v1.2.3 From e9aebf0a210271cb2489332ad0c4ea13bea7542f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 2 Nov 2011 19:43:52 +1100 Subject: TSAGE: Implement code for restarting the game in Blue Force --- engines/tsage/blue_force/blueforce_logic.cpp | 18 ++++++++++++++++++ engines/tsage/blue_force/blueforce_logic.h | 1 + engines/tsage/blue_force/blueforce_scenes1.cpp | 4 +++- 3 files changed, 22 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 77609715c7..6bfc74627d 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -315,6 +315,24 @@ void BlueForceGame::processEvent(Event &event) { } } +void BlueForceGame::restart() { + g_globals->_scenePalette.clearListeners(); + g_globals->_soundHandler.stop(); + + // Reset the globals + g_globals->reset(); + + // Clear save/load slots + g_globals->_sceneHandler->_saveGameSlot = -1; + g_globals->_sceneHandler->_loadGameSlot = -1; + + g_globals->_stripNum = 0; + g_globals->_events.setCursor(CURSOR_WALK); + + // Change to the first game scene + g_globals->_sceneManager.changeScene(190); +} + /*--------------------------------------------------------------------------*/ AObjectArray::AObjectArray(): EventHandler() { diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 1b161bce06..d0d0e0ee40 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -45,6 +45,7 @@ public: virtual void processEvent(Event &event); virtual bool canSaveGameStateCurrently(); virtual bool canLoadGameStateCurrently(); + virtual void restart(); }; #define OBJ_ARRAY_SIZE 10 diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index c73f3f8499..c97bb20e97 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -3220,9 +3220,11 @@ void Scene190::postInit(SceneObjectList *OwnerList) { (BF_GLOBALS._sceneManager._previousScene == 20)) { // clearScreen(); } - if (BF_GLOBALS._dayNumber == 0) + if (BF_GLOBALS._dayNumber == 0) { // If at start of game, change to first day BF_GLOBALS._dayNumber = 1; + g_globals->_sceneManager._previousScene = 100; + } // Load the scene data loadScene(190); -- 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/globals.cpp | 8 ++ engines/tsage/globals.h | 1 + engines/tsage/ringworld2/ringworld2_dialogs.cpp | 117 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_logic.cpp | 9 ++ engines/tsage/ringworld2/ringworld2_logic.h | 1 + 5 files changed, 135 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 623332e864..b82d4bce57 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -376,6 +376,12 @@ void Ringworld2Globals::reset() { _v5657C = 0; _v565F5 = 0; _v57C2C = 0; + Common::set_to(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); + + _player._characterIndex = 1; + _player._characterScene[1] = 100; + _player._characterScene[2] = 300; + _player._characterScene[3] = 300; } void Ringworld2Globals::synchronize(Serializer &s) { @@ -384,6 +390,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v57C2C); + for (int i = 0; i < MAX_CHARACTERS; ++i) + s.syncAsSint16LE(_v565F1[i]); } } // end of namespace Ringworld2 diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 1dc8e28606..6d61ce6b69 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -247,6 +247,7 @@ public: int _v565F5; int _v5657C; int _v57C2C; + int _v565F1[4]; virtual void reset(); virtual void synchronize(Serializer &s); 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 33fcbaa9eece36c7fbad4e44bf949c4dbfa72dbe Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 3 Nov 2011 20:46:26 +1100 Subject: TSAGE: Decrease game speed for Blue Force --- engines/tsage/blue_force/blueforce_logic.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 6bfc74627d..22299c1bf1 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -773,6 +773,7 @@ void SceneExt::loadScene(int sceneNum) { _v51C34.top = 0; _v51C34.bottom = 300; + BF_GLOBALS._sceneHandler->_delayTicks = 1; } void SceneExt::checkGun() { -- cgit v1.2.3 From ec6a9d28727071c73e7de113d0530a71ef24b7d6 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 4 Nov 2011 00:41:36 +0200 Subject: TSAGE: Removed duplicate assignments --- engines/tsage/blue_force/blueforce_scenes2.cpp | 1 - engines/tsage/blue_force/blueforce_scenes9.cpp | 1 - engines/tsage/core.cpp | 1 - 3 files changed, 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 4b26d8d604..008ab6a895 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -1152,7 +1152,6 @@ void Scene270::signal() { _grandma.setStrip(8); _grandma._frame = 5; _field384 = 1; - _field384 = 1; BF_GLOBALS._player._moveDiff.x = 8; BF_GLOBALS._player.enableControl(); diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index af32e6ccc3..dbc46ea6ed 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -667,7 +667,6 @@ void Scene900::signal() { break; case 9016: if ((BF_GLOBALS._clip1Bullets == 0) && (BF_GLOBALS._clip2Bullets == 0)){ - BF_GLOBALS._clip1Bullets = 8; BF_GLOBALS._clip1Bullets = 8; SceneItem::display2(900, 25); } else if (BF_GLOBALS._clip1Bullets == 0) { diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index dbea7e8d98..5a43a3b6c0 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1855,7 +1855,6 @@ SceneObject::SceneObject() : SceneHotspot() { _moveDiff.x = 5; _moveDiff.y = 3; _numFrames = 10; - _numFrames = 10; _moveRate = 10; _regionBitList = 0; _sceneRegionId = 0; -- cgit v1.2.3 From 8712d48cd82db57d0fab1a8bea4da9178a8a6e1e Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 4 Nov 2011 11:13:06 +0200 Subject: TSAGE: Fixed a bug from commit ec6a9d2 --- engines/tsage/blue_force/blueforce_scenes9.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index dbc46ea6ed..12bff75d8b 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -666,8 +666,9 @@ void Scene900::signal() { BF_GLOBALS._player.enableControl(); break; case 9016: - if ((BF_GLOBALS._clip1Bullets == 0) && (BF_GLOBALS._clip2Bullets == 0)){ + if ((BF_GLOBALS._clip1Bullets == 0) && (BF_GLOBALS._clip2Bullets == 0)) { BF_GLOBALS._clip1Bullets = 8; + BF_GLOBALS._clip2Bullets = 8; SceneItem::display2(900, 25); } else if (BF_GLOBALS._clip1Bullets == 0) { BF_GLOBALS._clip1Bullets = 8; -- cgit v1.2.3 From 8535e12e0b43526c013ee3be1614ff201a693411 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 4 Nov 2011 11:30:38 +0200 Subject: TSAGE: Restored a duplicated assignment from commit ec6a9d2, with a FIXME --- engines/tsage/blue_force/blueforce_scenes2.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 008ab6a895..31a34e8cbc 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -1152,6 +1152,7 @@ void Scene270::signal() { _grandma.setStrip(8); _grandma._frame = 5; _field384 = 1; + //_field384 = 1; // FIXME: Removed, as it seems duplicated BF_GLOBALS._player._moveDiff.x = 8; BF_GLOBALS._player.enableControl(); -- cgit v1.2.3 From 48d9c3d155a21ed26309df6119e440e8a39c6498 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 4 Nov 2011 20:39:39 +1100 Subject: TSAGE: Fix field initialisation in Scene270::signal --- engines/tsage/blue_force/blueforce_scenes2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 31a34e8cbc..5af567f71e 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -1152,7 +1152,7 @@ void Scene270::signal() { _grandma.setStrip(8); _grandma._frame = 5; _field384 = 1; - //_field384 = 1; // FIXME: Removed, as it seems duplicated + _field386 = 1; BF_GLOBALS._player._moveDiff.x = 8; BF_GLOBALS._player.enableControl(); -- cgit v1.2.3 From e0faee40b8bedb85ed9987417924add8dc55d97d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 4 Nov 2011 20:09:16 +0100 Subject: TSAGE: Blue Force - Child protection site (580). Fix vehicle display when moving with Lyle. It now displays a car instead of a dwarf. --- engines/tsage/blue_force/blueforce_scenes5.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp index f5f05c8148..7a250e2233 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.cpp +++ b/engines/tsage/blue_force/blueforce_scenes5.cpp @@ -2220,7 +2220,6 @@ void Scene580::postInit(SceneObjectList *OwnerList) { _vechile.setStrip(3); _vechile.setPosition(Common::Point(165, 76)); _vechile.setDetails(580, 2, 3, -1, 1, NULL); - _vechile.setVisage(303); BF_GLOBALS._player.setVisage(303); -- cgit v1.2.3 From 8f7fcac98d11b0224a2510ba356c0e60e66f9098 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 5 Nov 2011 10:07:36 +0100 Subject: TSAGE: Blue Force - Lyle office (810): Partly Rewrite Lyle's logic --- engines/tsage/blue_force/blueforce_scenes8.cpp | 44 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp index 4a52f10704..32cd376891 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.cpp +++ b/engines/tsage/blue_force/blueforce_scenes8.cpp @@ -562,24 +562,36 @@ bool Scene810::Lyle::startAction(CursorType action, Event &event) { case INV_PRINT_OUT: if (BF_GLOBALS.getFlag(shownLylePO)) { scene->_sceneMode = 8149; - } else if (!BF_GLOBALS.getFlag(shownLylePO)) { - if (!BF_GLOBALS.getFlag(shownFax)) { - // WORKAROUND: Original did not do a 'not', but I think this is correct - BF_GLOBALS.setFlag(shownFax); - scene->_sceneMode = 8125; - } else if (BF_GLOBALS.getFlag(shownLyleRapsheet)) { - scene->_sceneMode = 8104; + } else { + BF_GLOBALS.setFlag(shownLylePO); + if (BF_GLOBALS._dayNumber == 3) { + if (BF_GLOBALS.getFlag(shownFax)) { + BF_GLOBALS.setFlag(shownFax); + scene->_sceneMode = 8125; + } else if (BF_GLOBALS.getFlag(shownLyleRapsheet)) { + scene->_sceneMode = 8104; + } else { + scene->_sceneMode = 8121; + } + } else if (BF_GLOBALS.getFlag(onDuty)) { + if ((BF_GLOBALS.getFlag(shownLyleRapsheet)) || (BF_GLOBALS.getFlag(shownLyleCrate1))){ + scene->_sceneMode = 8141; + } else { + // Doublecheck on shownLyleCrate1 removed: useless + scene->_sceneMode = 8144; + } } else { - scene->_sceneMode = 8121; + if ((BF_GLOBALS.getFlag(shownLyleRapsheet)) || (BF_GLOBALS.getFlag(shownLyleCrate1))) { + scene->_sceneMode = 8129; + } else { // if (BF_GLOBALS.getFlag(shownLyleCrate1)) { + scene->_sceneMode = 8132; + // doublecheck Present in the original, may hide a bug in the original + //} else + // scene->_sceneMode = 8121; + } } - } else if (BF_GLOBALS.getFlag(onDuty)) { - scene->_sceneMode = 8141; - } else { - if (BF_GLOBALS.getFlag(shownLyleRapsheet) || BF_GLOBALS.getFlag(shownLyleCrate1)) - scene->_sceneMode = 8129; - else - scene->_sceneMode = 8121; } + BF_GLOBALS._player.disableControl(); scene->setAction(&scene->_action1); return true; @@ -654,12 +666,12 @@ bool Scene810::FaxMachineInset::startAction(CursorType action, Event &event) { if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 811) { T2_GLOBALS._uiElements.addScore(50); scene->_sound1.play(77); + scene->_fieldA70 = 1; BF_GLOBALS._player.disableControl(); scene->_sceneMode = 8109; scene->setAction(&scene->_sequenceManager1, scene, 8109, &BF_GLOBALS._player, &scene->_object6, &scene->_object5, NULL); - scene->_fieldA70 = 1; scene->_fieldA74 = 1; remove(); } else { -- cgit v1.2.3 From 149fc6f1203e17212ee97b77fd168086e701705f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 5 Nov 2011 10:44:53 +0100 Subject: TSAGE: Blue Force - Rename some variables Also add a (missing?) scene postinit --- engines/tsage/blue_force/blueforce_scenes1.cpp | 48 +++++++++++++++----------- engines/tsage/blue_force/blueforce_scenes1.h | 6 ++-- 2 files changed, 30 insertions(+), 24 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index c97bb20e97..b8c09d3e89 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -3123,7 +3123,7 @@ void Scene180::dispatch() { * *--------------------------------------------------------------------------*/ -bool Scene190::Object4::startAction(CursorType action, Event &event) { +bool Scene190::LyleCar::startAction(CursorType action, Event &event) { Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; switch (action) { @@ -3191,14 +3191,14 @@ void Scene190::Action1::signal() { } case 2: scene->_sound.play(82); - scene->_object2.animate(ANIM_MODE_5, this); + scene->_door.animate(ANIM_MODE_5, this); break; case 3: ADD_MOVER(BF_GLOBALS._player, 180, 86); break; case 4: scene->_sound.play(82); - scene->_object2.animate(ANIM_MODE_6, this); + scene->_door.animate(ANIM_MODE_6, this); break; case 5: BF_GLOBALS._sound1.fadeOut2(NULL); @@ -3223,11 +3223,14 @@ void Scene190::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._dayNumber == 0) { // If at start of game, change to first day BF_GLOBALS._dayNumber = 1; + // To be checked: Not present in the original g_globals->_sceneManager._previousScene = 100; } + SceneExt::postInit(); // Load the scene data loadScene(190); + BF_GLOBALS._scenePalette.loadPalette(2); _stripManager.addSpeaker(&_speaker); @@ -3235,18 +3238,20 @@ void Scene190::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.disableControl(); // Initialise objects - _object2.postInit(); - _object2.setVisage(190); - _object2.setStrip(1); - _object2.setPosition(Common::Point(179, 88)); + _door.postInit(); + _door.setVisage(190); + _door.setStrip(1); + _door.setPosition(Common::Point(179, 88)); - _object3.postInit(); - _object3.setVisage(190); - _object3.setStrip(2); - _object3.fixPriority(200); - _object3.setPosition(Common::Point(170, 31)); - _object3.animate(ANIM_MODE_7, 0, NULL); - _object3.setDetails(190, 8, 26, 19, 1, NULL); + _flag.postInit(); + _flag.setVisage(190); + _flag.setStrip(2); + _flag.fixPriority(200); + _flag.setPosition(Common::Point(170, 31)); + _flag.animate(ANIM_MODE_7, 0, NULL); + _flag.setDetails(190, 8, 26, 19, 1, NULL); + + _fieldB52 = true; if (BF_GLOBALS.getFlag(fWithLyle)) { BF_GLOBALS._player.setVisage(303); @@ -3254,11 +3259,11 @@ void Scene190::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player._moveDiff = Common::Point(3, 1); - _object4.postInit(); - _object4.setVisage(444); - _object4.setFrame(2); - _object4.setPosition(Common::Point(54, 114)); - _object4.setDetails(190, -1, -1, -1, 1, NULL); + _lyleCar.postInit(); + _lyleCar.setVisage(444); + _lyleCar.setFrame(2); + _lyleCar.setPosition(Common::Point(54, 114)); + _lyleCar.setDetails(190, -1, -1, -1, 1, NULL); switch (BF_GLOBALS._sceneManager._previousScene) { case 300: { @@ -3269,7 +3274,7 @@ void Scene190::postInit(SceneObjectList *OwnerList) { } case 315: _sceneMode = 1901; - setAction(&_sequenceManager, this, 1901, &BF_GLOBALS._player, &_object2, NULL); + setAction(&_sequenceManager, this, 1901, &BF_GLOBALS._player, &_door, NULL); break; case 50: case 60: @@ -3303,13 +3308,14 @@ void Scene190::postInit(SceneObjectList *OwnerList) { case 315: BF_GLOBALS._player._moveDiff = Common::Point(3, 1); _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 1900 : 1901; - setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object2, NULL); + setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_door, NULL); break; case 50: case 60: default: BF_GLOBALS.setFlag(onBike); BF_GLOBALS._player.disableControl(); + // To be checked: Not present in the original T2_GLOBALS._uiElements._active = true; _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 192 : 190; setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL); diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 403fbfbab6..0a43b8ba2e 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -432,7 +432,7 @@ public: class Scene190: public SceneExt { /* Objects */ - class Object4: public NamedObject { + class LyleCar: public NamedObject { public: virtual bool startAction(CursorType action, Event &event); }; @@ -459,8 +459,8 @@ class Scene190: public SceneExt { public: SequenceManager _sequenceManager; FollowerObject _object1; - NamedObject _object2, _object3; - Object4 _object4; + NamedObject _door, _flag; + LyleCar _lyleCar; Item1 _item1; Item2 _item2; NamedHotspot _item3, _item4, _item5, _item6; -- cgit v1.2.3 From 0fd1058386368b06d8054e7b4a7841ea19e9f0bd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 5 Nov 2011 14:54:19 +0100 Subject: TSAGE: Blue Force - inside PD (315): Fix display of Ryan when discussing about Forest Rapsheet. Also fix a test on mugshot --- engines/tsage/blue_force/blueforce_scenes3.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index a32bd4ded9..cd664dfd3d 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -679,7 +679,7 @@ bool Scene315::Barry::startAction(CursorType action, Event &event) { break; case INV_FOREST_RAP: BF_GLOBALS._player.disableControl(); - scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3178 : 3173; + scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3173 : 3178; scene->setAction(&scene->_action1); break; case INV_GREEN_ID: @@ -697,7 +697,7 @@ bool Scene315::Barry::startAction(CursorType action, Event &event) { scene->setAction(&scene->_action1); break; case INV_COBB_RAP: - if (BF_INVENTORY._mugshot._sceneNumber == 1) + if (BF_INVENTORY.getObjectScene(INV_MUG_SHOT) == 1) NamedHotspot::startAction(action, event); else { BF_GLOBALS._player.disableControl(); -- cgit v1.2.3 From 21fa7bda57c2656db5abd68fdabe0bcd5f292e18 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 5 Nov 2011 17:39:50 +0100 Subject: TSAGE: Blue Force - Inside PD (315): Implement a missing case in signal() --- engines/tsage/blue_force/blueforce_scenes3.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index cd664dfd3d..be102b9f83 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -1287,6 +1287,10 @@ void Scene315::signal() { BF_GLOBALS._player.enableControl(); _object9.remove(); break; + case 3169: + T2_GLOBALS._uiElements.addScore(30); + BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1); + BF_GLOBALS._player.enableControl(); case 3154: default: break; -- cgit v1.2.3 From 783d60be1bd4e68dc20eaaaa305d05ffa178364e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 6 Nov 2011 22:53:41 +0100 Subject: TSAGE: Blue Force - Inside PD (315): Add a hack in order to avoid infinite points bug. To be checked in the original if it occurs too --- engines/tsage/blue_force/blueforce_scenes3.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index be102b9f83..f8f735c913 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -944,6 +944,10 @@ void Scene315::Action1::signal() { if (scene->_sceneMode == 3169) { T2_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1); + //HACK: This has to be checked wether or not it occurs in the original. + //When the _sceneMode is set to 3169, the value desn't change. + //If you show the forest rapsheet, it gives points (and again... and again...) + scene->_sceneMode = 3154; } remove(); @@ -1291,6 +1295,7 @@ void Scene315::signal() { T2_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1); BF_GLOBALS._player.enableControl(); + break; case 3154: default: break; -- cgit v1.2.3 From 3a1d1699d0a7084778eccbbd0fae14e3c79405bc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 8 Nov 2011 00:05:36 +0100 Subject: TSAGE: Blue Force - Grandma's house, set 2 (271): Fix a crash and a glitch when failing scene 9xx cleanup --- engines/tsage/blue_force/blueforce_scenes2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 5af567f71e..5a181af927 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -1290,7 +1290,7 @@ void Scene270::dispatch() { void Scene271::Action1::signal() { Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene; - scene->setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL); + setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL); } /*--------------------------------------------------------------------------*/ @@ -1454,7 +1454,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._walkRegions.disableRegion(14); BF_GLOBALS._walkRegions.disableRegion(19); - BF_GLOBALS._player.setVisage(151); + BF_GLOBALS._player.setVisage(275); BF_GLOBALS._player.setPosition(Common::Point(348, 151)); _object12.postInit(); -- cgit v1.2.3 From d762d5b7760117501c6a48ee17b8ae02f84a229b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 8 Nov 2011 08:14:15 +0100 Subject: TSAGE: Blue Force - on FW (355): Fix glitch --- engines/tsage/blue_force/blueforce_scenes3.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index f8f735c913..11cf764b60 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -2980,8 +2980,8 @@ bool Scene355::LockerInset::startAction(CursorType action, Event &event) { if (_frame == 1) { SceneItem::display2(355, 23); return true; - } - return true; + } else + return NamedObject::startAction(action, event); case INV_SCREWDRIVER: scene->_sound2.play(104); BF_INVENTORY.setObjectScene(INV_SCREWDRIVER, 999); -- cgit v1.2.3 From c58af59ae41a3bb18860c8da2823e5baf1884172 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 8 Nov 2011 08:32:00 +0100 Subject: TSAGE: Blue Force - Inside warehouse (910): Fix a glitch, rename an object --- engines/tsage/blue_force/blueforce_scenes9.cpp | 30 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes9.h | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 12bff75d8b..66456650b1 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -755,26 +755,26 @@ void Scene910::Action2::signal() { switch (_actionIndex++) { case 0: - scene->_object7.postInit(); - scene->_object7.setVisage(919); - scene->_object7.setPosition(Common::Point(267, 51)); - scene->_object7.fixPriority(40); + scene->_shadow.postInit(); + scene->_shadow.setVisage(919); + scene->_shadow.setPosition(Common::Point(267, 51)); + scene->_shadow.fixPriority(40); signal(); break; case 1: - scene->_object7.hide(); + scene->_shadow.hide(); setDelay(600); break; case 2: - scene->_object7.setStrip(BF_GLOBALS._randomSource.getRandomNumber(3) + 2); - scene->_object7.setFrame(1); - scene->_object7.show(); + scene->_shadow.setStrip(BF_GLOBALS._randomSource.getRandomNumber(2) + 2); + scene->_shadow.setFrame(1); + scene->_shadow.show(); setDelay(6); break; case 3: _actionIndex = 1; - scene->_object7.setStrip(BF_GLOBALS._randomSource.getRandomNumber(3) + 2); - scene->_object7.animate(ANIM_MODE_5, this); + scene->_shadow.setStrip(BF_GLOBALS._randomSource.getRandomNumber(2) + 2); + scene->_shadow.animate(ANIM_MODE_5, this); break; default: break; @@ -1302,7 +1302,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { // _objectList.draw(); BF_GLOBALS._player.disableControl(); scene->_lyle.setVisage(912); - scene->_object7.remove(); + scene->_shadow.remove(); scene->_action2.remove(); scene->_nico.postInit(); scene->_sceneMode = 9129; @@ -2158,8 +2158,8 @@ void Scene910::postInit(SceneObjectList *OwnerList) { } if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)){ - _object7.postInit(); - _object7.setAction(&_action2); + _shadow.postInit(); + _shadow.setAction(&_action2); } if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 1) @@ -2457,7 +2457,7 @@ void Scene910::signal() { _nico.postInit(); _nico.setDetails(910, 63, 64, 65, 5, &_item4); BF_GLOBALS._v4CEE6 = 0; - _object7.postInit(); + _shadow.postInit(); _action2.remove(); _sceneMode = 9116; setAction(&_sequenceManager1, this, 9116, &_nico, NULL); @@ -2842,7 +2842,7 @@ void Scene910::dispatch() { if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._v4CEE0 != 0) && (BF_GLOBALS._v4CEE2 == 0)) { BF_GLOBALS._player.disableControl(); - _object7.remove(); + _shadow.remove(); _nico.remove(); _nico.postInit(); _nico.setDetails(910, 63, 64, 65, 5, &_item4); diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h index b0761713b1..f1dbb027d0 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.h +++ b/engines/tsage/blue_force/blueforce_scenes9.h @@ -270,7 +270,7 @@ public: Nico _nico; Stuart _stuart; Forbes _forbes; - NamedObject _object5, _vent, _object7; + NamedObject _object5, _vent, _shadow; PowerCord _blackCord, _yellowCord; BreakerBox _breakerBox; FakeWall _fakeWall; -- 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') 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/globals.cpp | 2 ++ engines/tsage/globals.h | 1 + engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 42 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 14 +++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index b82d4bce57..dfdc3e00c7 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -376,6 +376,7 @@ void Ringworld2Globals::reset() { _v5657C = 0; _v565F5 = 0; _v57C2C = 0; + _v58CE2 = 0; Common::set_to(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); _player._characterIndex = 1; @@ -390,6 +391,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v57C2C); + s.syncAsSint16LE(_v58CE2); for (int i = 0; i < MAX_CHARACTERS; ++i) s.syncAsSint16LE(_v565F1[i]); } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 6d61ce6b69..3280d70361 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -247,6 +247,7 @@ public: int _v565F5; int _v5657C; int _v57C2C; + int _v58CE2; int _v565F1[4]; virtual void reset(); 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 c813b30cc97e01de1540bbb8f57827672c6a19f4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 00:26:27 +0100 Subject: TSAGE: BF - intro (20): renaming objects --- engines/tsage/blue_force/blueforce_scenes0.cpp | 216 ++++++++++++------------- engines/tsage/blue_force/blueforce_scenes0.h | 4 +- 2 files changed, 110 insertions(+), 110 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 69a2273237..6ad0d63f43 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -48,45 +48,45 @@ void Scene20::Action1::signal() { BF_GLOBALS._scenePalette.addRotation(64, 127, -1, 1, this); break; case 2: - scene->_object1.setVisage(22); - scene->_object1._strip = 1; - scene->_object1._frame = 1; - scene->_object1.changeZoom(100); - - scene->_object2.setVisage(22); - scene->_object2._strip = 2; - scene->_object2._frame = 1; - scene->_object2.changeZoom(100); - - scene->_object3.setVisage(22); - scene->_object3._strip = 3; - scene->_object3._frame = 1; - scene->_object3.changeZoom(100); - - scene->_object4.setVisage(22); - scene->_object4._strip = 4; - scene->_object4._frame = 1; - scene->_object4.changeZoom(100); - - scene->_object5.setVisage(22); - scene->_object5._strip = 5; - scene->_object5._frame = 1; - scene->_object5.changeZoom(100); - - scene->_object6.setVisage(22); - scene->_object6._strip = 6; - scene->_object6._frame = 1; - scene->_object6.changeZoom(100); - - scene->_object7.setVisage(22); - scene->_object7._strip = 7; - scene->_object7._frame = 1; - scene->_object7.changeZoom(100); - - scene->_object8.setVisage(22); - scene->_object8._strip = 8; - scene->_object8._frame = 1; - scene->_object8.changeZoom(100); + scene->_tsunamiWave.setVisage(22); + scene->_tsunamiWave._strip = 1; + scene->_tsunamiWave._frame = 1; + scene->_tsunamiWave.changeZoom(100); + + scene->_letterT.setVisage(22); + scene->_letterT._strip = 2; + scene->_letterT._frame = 1; + scene->_letterT.changeZoom(100); + + scene->_letterS.setVisage(22); + scene->_letterS._strip = 3; + scene->_letterS._frame = 1; + scene->_letterS.changeZoom(100); + + scene->_letterU.setVisage(22); + scene->_letterU._strip = 4; + scene->_letterU._frame = 1; + scene->_letterU.changeZoom(100); + + scene->_letterN.setVisage(22); + scene->_letterN._strip = 5; + scene->_letterN._frame = 1; + scene->_letterN.changeZoom(100); + + scene->_letterA.setVisage(22); + scene->_letterA._strip = 6; + scene->_letterA._frame = 1; + scene->_letterA.changeZoom(100); + + scene->_letterM.setVisage(22); + scene->_letterM._strip = 7; + scene->_letterM._frame = 1; + scene->_letterM.changeZoom(100); + + scene->_letterI.setVisage(22); + scene->_letterI._strip = 8; + scene->_letterI._frame = 1; + scene->_letterI.changeZoom(100); setDelay(1); break; @@ -97,12 +97,12 @@ void Scene20::Action1::signal() { setDelay(60); break; case 5: - scene->_object2.animate(ANIM_MODE_5, NULL); - scene->_object3.animate(ANIM_MODE_5, NULL); - scene->_object4.animate(ANIM_MODE_5, NULL); - scene->_object5.animate(ANIM_MODE_5, NULL); - scene->_object6.animate(ANIM_MODE_5, NULL); - scene->_object7.animate(ANIM_MODE_5, this); + scene->_letterT.animate(ANIM_MODE_5, NULL); + scene->_letterS.animate(ANIM_MODE_5, NULL); + scene->_letterU.animate(ANIM_MODE_5, NULL); + scene->_letterN.animate(ANIM_MODE_5, NULL); + scene->_letterA.animate(ANIM_MODE_5, NULL); + scene->_letterM.animate(ANIM_MODE_5, this); break; case 6: setDelay(120); @@ -128,69 +128,69 @@ void Scene20::postInit(SceneObjectList *OwnerList) { _scenePalette.loadPalette(1); _scenePalette.loadPalette(22); - _object1.postInit(); - _object1.setVisage(21); - _object1._strip = 1; - _object1._frame = 1; - _object1.animate(ANIM_MODE_NONE, NULL); - _object1.setPosition(Common::Point(62, 85)); - _object1.changeZoom(100); - - _object2.postInit(); - _object2.setVisage(21); - _object2._strip = 2; - _object2._frame = 1; - _object2.animate(ANIM_MODE_NONE, NULL); - _object2.setPosition(Common::Point(27, 94)); - _object2.changeZoom(100); - - _object3.postInit(); - _object3.setVisage(21); - _object3._strip = 2; - _object3._frame = 2; - _object3.animate(ANIM_MODE_NONE, NULL); - _object3.setPosition(Common::Point(68, 94)); - _object3.changeZoom(100); - - _object4.postInit(); - _object4.setVisage(21); - _object4._strip = 2; - _object4._frame = 3; - _object4.animate(ANIM_MODE_NONE, NULL); - _object4.setPosition(Common::Point(110, 94)); - _object4.changeZoom(100); - - _object5.postInit(); - _object5.setVisage(21); - _object5._strip = 2; - _object5._frame = 4; - _object5.animate(ANIM_MODE_NONE, NULL); - _object5.setPosition(Common::Point(154, 94)); - _object5.changeZoom(100); - - _object6.postInit(); - _object6.setVisage(21); - _object6._strip = 2; - _object6._frame = 5; - _object6.animate(ANIM_MODE_NONE, NULL); - _object6.setPosition(Common::Point(199, 94)); - _object6.changeZoom(100); - - _object7.postInit(); - _object7.setVisage(21); - _object7._strip = 2; - _object7._frame = 6; - _object7.animate(ANIM_MODE_NONE, NULL); - _object7.setPosition(Common::Point(244, 94)); - _object7.changeZoom(100); - - _object8.postInit(); - _object8.setVisage(21); - _object8._strip = 2; - _object8._frame = 7; - _object8.animate(ANIM_MODE_NONE, NULL); - _object8.setPosition(Common::Point(286, 94)); - _object8.changeZoom(100); + _tsunamiWave.postInit(); + _tsunamiWave.setVisage(21); + _tsunamiWave._strip = 1; + _tsunamiWave._frame = 1; + _tsunamiWave.animate(ANIM_MODE_NONE, NULL); + _tsunamiWave.setPosition(Common::Point(62, 85)); + _tsunamiWave.changeZoom(100); + + _letterT.postInit(); + _letterT.setVisage(21); + _letterT._strip = 2; + _letterT._frame = 1; + _letterT.animate(ANIM_MODE_NONE, NULL); + _letterT.setPosition(Common::Point(27, 94)); + _letterT.changeZoom(100); + + _letterS.postInit(); + _letterS.setVisage(21); + _letterS._strip = 2; + _letterS._frame = 2; + _letterS.animate(ANIM_MODE_NONE, NULL); + _letterS.setPosition(Common::Point(68, 94)); + _letterS.changeZoom(100); + + _letterU.postInit(); + _letterU.setVisage(21); + _letterU._strip = 2; + _letterU._frame = 3; + _letterU.animate(ANIM_MODE_NONE, NULL); + _letterU.setPosition(Common::Point(110, 94)); + _letterU.changeZoom(100); + + _letterN.postInit(); + _letterN.setVisage(21); + _letterN._strip = 2; + _letterN._frame = 4; + _letterN.animate(ANIM_MODE_NONE, NULL); + _letterN.setPosition(Common::Point(154, 94)); + _letterN.changeZoom(100); + + _letterA.postInit(); + _letterA.setVisage(21); + _letterA._strip = 2; + _letterA._frame = 5; + _letterA.animate(ANIM_MODE_NONE, NULL); + _letterA.setPosition(Common::Point(199, 94)); + _letterA.changeZoom(100); + + _letterM.postInit(); + _letterM.setVisage(21); + _letterM._strip = 2; + _letterM._frame = 6; + _letterM.animate(ANIM_MODE_NONE, NULL); + _letterM.setPosition(Common::Point(244, 94)); + _letterM.changeZoom(100); + + _letterI.postInit(); + _letterI.setVisage(21); + _letterI._strip = 2; + _letterI._frame = 7; + _letterI.animate(ANIM_MODE_NONE, NULL); + _letterI.setPosition(Common::Point(286, 94)); + _letterI.changeZoom(100); setAction(&_action1); BF_GLOBALS._dialogCenter.y = 165; diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 103e5f0a4c..7680fb2cbd 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -50,8 +50,8 @@ class Scene20 : public SceneExt { public: Action1 _action1; ScenePalette _scenePalette; - SceneObject _object1, _object2, _object3, _object4; - SceneObject _object5, _object6, _object7, _object8; + SceneObject _tsunamiWave, _letterT, _letterS, _letterU; + SceneObject _letterN, _letterA, _letterM, _letterI; virtual void postInit(SceneObjectList *OwnerList = NULL); }; -- cgit v1.2.3 From b21a7352569c863018a55887428e523e8b6ea2c2 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 00:50:31 +0100 Subject: TSAGE: BF - Map (50): rename a couple of parameters, remove two useless variables and simplify checks --- engines/tsage/blue_force/blueforce_scenes0.cpp | 17 +++++------------ engines/tsage/blue_force/blueforce_scenes0.h | 4 +--- 2 files changed, 6 insertions(+), 15 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 6ad0d63f43..61f19b9e9a 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -239,11 +239,11 @@ void Scene50::Tooltip2::dispatch() { } } -void Scene50::Tooltip::set(const Rect &bounds, int v60, const Common::String &msg, int v62) { +void Scene50::Tooltip::set(const Rect &bounds, int sceneNum, const Common::String &msg, int locationId) { _bounds = bounds; - _newSceneNumber = v60; + _newSceneNumber = sceneNum; _msg = msg; - _locationId = v62; + _locationId = locationId; } void Scene50::Tooltip::update() { @@ -261,8 +261,8 @@ void Scene50::Tooltip::update() { void Scene50::Tooltip::highlight(bool btnDown) { Scene50 *scene = (Scene50 *)BF_GLOBALS._sceneManager._scene; - scene->_field382 = _newSceneNumber; - if ((scene->_field380 != 0) || (scene->_field380 != _newSceneNumber)) + // In the original, a variable was used, always set to 0. The check is simplified + if (_newSceneNumber != 0) update(); if (btnDown) { @@ -323,11 +323,6 @@ void Scene50::Tooltip::highlight(bool btnDown) { /*--------------------------------------------------------------------------*/ -Scene50::Scene50(): SceneExt() { - _field382 = 0; - _field380 = 0; -} - void Scene50::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); @@ -469,7 +464,6 @@ void Scene50::signal() { BF_GLOBALS._player.enableControl(); BF_GLOBALS._events.setCursor(CURSOR_WALK); _sceneMode = 0; - _field380 = 0; } } @@ -477,7 +471,6 @@ void Scene50::process(Event &event) { SceneExt::process(event); Common::Point pt(event.mousePos.x + _sceneBounds.left, event.mousePos.y + _sceneBounds.top); bool mouseDown = false; - _field382 = 0; if ((event.mousePos.x > 270 && (_sceneBounds.right < (SCREEN_WIDTH * 2)))) loadBackground(4, 0); diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 7680fb2cbd..29adec7e00 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -65,7 +65,7 @@ class Scene50: public SceneExt { int _locationId; public: Tooltip(); - void set(const Rect &bounds, int v60, const Common::String &msg, int v62); + void set(const Rect &bounds, int sceneNum, const Common::String &msg, int locationId); void update(); void highlight(bool btnDown); @@ -81,7 +81,6 @@ class Scene50: public SceneExt { virtual void dispatch(); }; public: - int _field380, _field382; int _sceneNumber; SceneText _text; SceneItemType2 _item; @@ -89,7 +88,6 @@ public: Tooltip _location6, _location7, _location8, _location9; Timer _timer; public: - Scene50(); virtual Common::String getClassName() { return "Scene50"; } virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); -- cgit v1.2.3 From c4f2b045bcb2491cb01a3b5ab61024c226c222ea Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 07:38:53 +0100 Subject: TSAGE: BF - Cleanup: Use enum name where global flags was set to value directly --- engines/tsage/blue_force/blueforce_scenes0.cpp | 4 +-- engines/tsage/blue_force/blueforce_scenes3.cpp | 6 ++-- engines/tsage/blue_force/blueforce_scenes9.cpp | 48 +++++++++++++------------- 3 files changed, 29 insertions(+), 29 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 61f19b9e9a..e50fcfcfad 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -434,11 +434,11 @@ void Scene50::signal() { } if ((BF_GLOBALS._driveFromScene == 410) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { - BF_GLOBALS.setFlag(125); + BF_GLOBALS.setFlag(f1097Frankie); } if ((BF_GLOBALS._driveFromScene == 340) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { - BF_GLOBALS.setFlag(123); + BF_GLOBALS.setFlag(f1097Marina); } if ((BF_GLOBALS._driveFromScene == 380) && (_sceneNumber != BF_GLOBALS._driveFromScene)) { diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 11cf764b60..35246f189d 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -306,14 +306,14 @@ void Scene300::postInit(SceneObjectList *OwnerList) { break; case 190: _sceneMode = 0; - if (!BF_GLOBALS.getFlag(2)) { + if (!BF_GLOBALS.getFlag(onBike)) { _sceneMode = 7308; BF_GLOBALS._player.setPosition(Common::Point(175, 50)); ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 123, 71); if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne)) setupInspection(); - } else if (!BF_GLOBALS.getFlag(3)) { + } else if (!BF_GLOBALS.getFlag(onDuty)) { BF_GLOBALS._player.disableControl(); _sceneMode = 300; setAction(&_sequenceManager1, this, 300, &BF_GLOBALS._player, NULL); @@ -424,7 +424,7 @@ void Scene300::signal() { setAction(&_sequenceManager1, this, 312, &_object1, &_object16, NULL); break; case 317: - BF_GLOBALS.setFlag(2); + BF_GLOBALS.setFlag(onBike); BF_GLOBALS._sceneManager.changeScene(60); break; case 318: diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 66456650b1..a317cbc008 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -847,7 +847,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { case 1: if (BF_GLOBALS._v4CEE2 > 1) { if (BF_GLOBALS._v4CEE2 != 4) { - if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())) { + if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())) { if (scene->_field2DE0 == 0) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9126; @@ -868,7 +868,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { return true; } } else { - if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())) { + if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9125; scene->setAction(&scene->_sequenceManager1, scene, 9125, &scene->_nico, NULL); @@ -966,7 +966,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { return true; break; case 1: - if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())){ + if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())){ BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._v4CEE4 == 2) { scene->_sceneMode = 9132; @@ -1291,9 +1291,9 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { case 1: if (BF_GLOBALS._v4CEE2 < 1) { if (_frame == 2) { - if (!BF_GLOBALS.getFlag(81)) { + if (!BF_GLOBALS.getFlag(fGotPointsForClosingDoor)) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.setFlag(81); + BF_GLOBALS.setFlag(fGotPointsForClosingDoor); } scene->_sceneMode = 0; if (BF_GLOBALS._dayNumber == 5) { @@ -1332,9 +1332,9 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { // _objectList.draw(); } else { if (BF_GLOBALS._v4CEC8 == 1) { - if (!BF_GLOBALS.getFlag(78)) { + if (!BF_GLOBALS.getFlag(fGotPointsForStartGenerator)) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.setFlag(78); + BF_GLOBALS.setFlag(fGotPointsForStartGenerator); } BF_GLOBALS._player.disableControl(); BF_GLOBALS._v4CEC8 = 0; @@ -1770,9 +1770,9 @@ bool Scene910::PowerButton::startAction(CursorType action, Event &event) { if (_frame == 4) { scene->_sound1.play(100); scene->_sound1.holdAt(1); - if (!BF_GLOBALS.getFlag(77)) { + if (!BF_GLOBALS.getFlag(fGotPointsForFuseBoxPlug)) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.setFlag(77); + BF_GLOBALS.setFlag(fGotPointsForFuseBoxPlug); } setFrame(5); _object32.setFrame(7); @@ -1784,10 +1784,10 @@ bool Scene910::PowerButton::startAction(CursorType action, Event &event) { } } else { scene->_sound1.release(); - if (BF_GLOBALS._bookmark == 21) { - if (!BF_GLOBALS.getFlag(82)) { + if (BF_GLOBALS._bookmark == bEndDayThree) { + if (!BF_GLOBALS.getFlag(fGotPointsForLightsOff)) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.setFlag(82); + BF_GLOBALS.setFlag(fGotPointsForLightsOff); } } setFrame(4); @@ -2041,7 +2041,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._dayNumber == 0) { BF_GLOBALS._dayNumber = 5; BF_GLOBALS._sceneManager._previousScene = 900; - BF_GLOBALS.setFlag(7); + BF_GLOBALS.setFlag(fWithLyle); } if ( (BF_GLOBALS._sceneManager._previousScene == 910) @@ -2055,11 +2055,11 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _field2DE0 = 0; _field2DE2 = 0; _field2DE4 = 0; - BF_GLOBALS.clearFlag(34); + BF_GLOBALS.clearFlag(fCanDrawGun); _lyle._position.x = 0; if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._sceneManager._previousScene == 900)){ - BF_GLOBALS.setFlag(34); + BF_GLOBALS.setFlag(fCanDrawGun); BF_GLOBALS._v4CEC8 = 0; BF_GLOBALS._player.setVisage(129); @@ -2085,7 +2085,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { } if (BF_GLOBALS._sceneManager._previousScene == 920) { - BF_GLOBALS.setFlag(34); + BF_GLOBALS.setFlag(fCanDrawGun); BF_GLOBALS._player.setPosition(Common::Point(276, 119)); BF_GLOBALS._player.setStrip(6); if (BF_GLOBALS._v4CECC == 0) @@ -2116,7 +2116,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { } BF_GLOBALS._player.enableControl(); } else if (BF_GLOBALS._sceneManager._previousScene == 935) { - BF_GLOBALS.setFlag(34); + BF_GLOBALS.setFlag(fCanDrawGun); BF_GLOBALS._v4CEC8 = 0; _lyle.postInit(); _lyle.setVisage(916); @@ -2153,7 +2153,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { else add2Faders((const byte *)&unk_50E90, 2, 911, this); } else { - BF_GLOBALS.clearFlag(8); + BF_GLOBALS.clearFlag(gunDrawn); BF_GLOBALS._player.disableControl(); } @@ -2885,9 +2885,9 @@ void Scene910::subE82BD() { void Scene910::subE83E1() { if (BF_GLOBALS._v4CEE0 != 0) { _fakeWall.show(); - if ((BF_GLOBALS._bookmark == 21) && (!BF_GLOBALS.getFlag(80))) { + if ((BF_GLOBALS._bookmark == 21) && (!BF_GLOBALS.getFlag(fGotPointsForOpeningDoor))) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.setFlag(80); + BF_GLOBALS.setFlag(fGotPointsForOpeningDoor); } BF_GLOBALS._v4CEE0 = 0; BF_GLOBALS._walkRegions.disableRegion(10); @@ -3107,7 +3107,7 @@ bool Scene930::Object1::startAction(CursorType action, Event &event) { Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; bool result; - if ((action == CURSOR_USE) && (!BF_GLOBALS.getFlag(93))) { + if ((action == CURSOR_USE) && (!BF_GLOBALS.getFlag(fGotPointsForFBI))) { scene->setAction(&scene->_action2); result = true; } else @@ -3125,7 +3125,7 @@ bool Scene930::Object2::startAction(CursorType action, Event &event) { NamedObject::startAction(action, event); T2_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene(54, 1); - BF_GLOBALS.setFlag(93); + BF_GLOBALS.setFlag(fGotPointsForFBI); remove(); scene->_box.remove(); return true; @@ -3269,9 +3269,9 @@ void Scene930::Action1::signal() { break; case 5: scene->showBootWindow(); - if (!BF_GLOBALS.getFlag(72)) { + if (!BF_GLOBALS.getFlag(fGotPointsForCPU)) { T2_GLOBALS._uiElements.addScore(30); - BF_GLOBALS.setFlag(72); + BF_GLOBALS.setFlag(fGotPointsForCPU); } SceneItem::display(0, 312); BF_GLOBALS._player.enableControl(); -- cgit v1.2.3 From e0bc00a4881d07eb004bd6ca33faed9eb97747b1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 07:42:24 +0100 Subject: TSAGE: BF - Cleanup: Use enum name where bookmark is set to value directly --- engines/tsage/blue_force/blueforce_scenes9.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index a317cbc008..61aefd6534 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -2885,7 +2885,7 @@ void Scene910::subE82BD() { void Scene910::subE83E1() { if (BF_GLOBALS._v4CEE0 != 0) { _fakeWall.show(); - if ((BF_GLOBALS._bookmark == 21) && (!BF_GLOBALS.getFlag(fGotPointsForOpeningDoor))) { + if ((BF_GLOBALS._bookmark == bEndDayThree) && (!BF_GLOBALS.getFlag(fGotPointsForOpeningDoor))) { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForOpeningDoor); } -- cgit v1.2.3 From 3747f106238dce2e0cfadf12b1cc186b4ebacd4b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 07:49:40 +0100 Subject: TSAGE: BF - Cleanup: Use enum name where object/icon identifier is directly used --- engines/tsage/blue_force/blueforce_scenes9.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 61aefd6534..f753e49028 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -2894,7 +2894,7 @@ void Scene910::subE83E1() { BF_GLOBALS._player.disableControl(); _sceneMode = 9115; _sound2.play(42); - if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(57) == 910)) + if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910)) setAction(&_sequenceManager1, this, 9128, &_fakeWall, &_yellowCord, &_object5, NULL); else setAction(&_sequenceManager1, this, 9115, &_fakeWall, &_object5, NULL); @@ -2941,7 +2941,7 @@ bool Scene920::Item1::startAction(CursorType action, Event &event) { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS.getFlag(fCrateOpen)) { if (BF_GLOBALS._player._visage == 921) { - if ((BF_INVENTORY.getObjectScene(15) != 1) && (BF_GLOBALS.getFlag(fSawGuns))) { + if ((BF_INVENTORY.getObjectScene(INV_AUTO_RIFLE) != 1) && (BF_GLOBALS.getFlag(fSawGuns))) { scene->_sceneMode = 9207; scene->setAction(&scene->_sequenceManager1, scene, 9207, &BF_GLOBALS._player, NULL); } else { @@ -3055,7 +3055,7 @@ void Scene920::signal() { case 9207: BF_GLOBALS._player.enableControl(); T2_GLOBALS._uiElements.addScore(30); - BF_INVENTORY.setObjectScene(15, 1); + BF_INVENTORY.setObjectScene(INV_AUTO_RIFLE, 1); BF_GLOBALS._bookmark = bEndDayThree; break; default: @@ -3124,7 +3124,7 @@ bool Scene930::Object2::startAction(CursorType action, Event &event) { NamedObject::startAction(action, event); T2_GLOBALS._uiElements.addScore(30); - BF_INVENTORY.setObjectScene(54, 1); + BF_INVENTORY.setObjectScene(INV_9MM_BULLETS, 1); BF_GLOBALS.setFlag(fGotPointsForFBI); remove(); scene->_box.remove(); @@ -3195,7 +3195,7 @@ bool Scene930::Object5::startAction(CursorType action, Event &event) { case CURSOR_WALK: return true; case CURSOR_USE: - if (BF_INVENTORY.getObjectScene(55) == 1) + if (BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) return NamedObject::startAction(action, event); if (scene->_v141A == 0) { animate(ANIM_MODE_4, getFrameCount() - 1, 1, NULL); @@ -3204,7 +3204,7 @@ bool Scene930::Object5::startAction(CursorType action, Event &event) { _useLineNum = 78; } else { T2_GLOBALS._uiElements.addScore(50); - BF_INVENTORY.setObjectScene(55, 1); + BF_INVENTORY.setObjectScene(INV_SCHEDULE, 1); setFrame2(getFrameCount()); _lookLineNum = 92; _useLineNum = -1; @@ -3350,7 +3350,7 @@ void Scene930::postInit(SceneObjectList *OwnerList) { setZoomPercents(83, 75, 140, 100); _v141A = 0; _v141C = 0; - if (BF_INVENTORY.getObjectScene(54) != 1) { + if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) != 1) { _box.postInit(); _box.setVisage(930); _box.setStrip(1); -- cgit v1.2.3 From e67ab21b5f79b35896c55b10cf39bda990e9142d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 08:30:52 +0100 Subject: TSAGE: BF - Cleanup: Remove _uselessVariable in scene 360 --- engines/tsage/blue_force/blueforce_scenes3.cpp | 11 +++++------ engines/tsage/blue_force/blueforce_scenes3.h | 2 -- engines/tsage/saveload.h | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 35246f189d..db9425436b 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -4347,13 +4347,12 @@ void Scene360::Action1::signal() { /*--------------------------------------------------------------------------*/ -Scene360::Scene360() { - _uselessVariable = 0; -} - void Scene360::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_uselessVariable); + if (s.getVersion() < 9) { + int tmpVar; + s.syncAsSint16LE(tmpVar); + } } void Scene360::postInit(SceneObjectList *OwnerList) { @@ -4432,7 +4431,7 @@ void Scene360::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.enableControl(); if ((BF_GLOBALS._sceneManager._previousScene == 355) || (BF_GLOBALS._sceneManager._previousScene != 370)) { - _uselessVariable = 0; + // The original was using there a useless variable (now removed) BF_GLOBALS._player.setPosition(Common::Point(253, 135)); BF_GLOBALS._player.setStrip(2); diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h index de53db83a9..ea9d5f7311 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.h +++ b/engines/tsage/blue_force/blueforce_scenes3.h @@ -676,9 +676,7 @@ public: Barometer _barometer; Action1 _action1; ASound _sound1; - int _uselessVariable; - Scene360(); virtual void synchronize(Serializer &s); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 207051a182..ff78abf52d 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -33,7 +33,7 @@ namespace TsAGE { typedef void (*SaveNotifierFn)(bool postFlag); -#define TSAGE_SAVEGAME_VERSION 8 +#define TSAGE_SAVEGAME_VERSION 9 class SavedObject; -- cgit v1.2.3 From 9b8b8410940db0645e2d04317262044396e667c4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 08:53:41 +0100 Subject: TSAGE: BF - Cleanup: Rename a couple of global variables, remove a useless global Savegame version wasn't incremented as the current one is too recent --- engines/tsage/blue_force/blueforce_scenes0.cpp | 22 +++++++++++----------- engines/tsage/blue_force/blueforce_scenes3.cpp | 2 +- engines/tsage/globals.cpp | 14 ++++++++------ engines/tsage/globals.h | 5 ++--- 4 files changed, 22 insertions(+), 21 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index e50fcfcfad..682e273716 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -530,7 +530,7 @@ bool Scene60::Ignition::startAction(CursorType action, Event &event) { bool Scene60::Ignition::check1() { if (BF_GLOBALS._bookmark >= bStoppedFrankie) { - BF_GLOBALS._v5098C |= 1; + BF_GLOBALS._subFlagBitArr1 |= 1; return false; } else { if ((BF_GLOBALS._bookmark == bBookedGreen) && BF_GLOBALS.getFlag(fArrivedAtGangStop)) { @@ -557,13 +557,13 @@ bool Scene60::Ignition::check1() { } else if (BF_GLOBALS._bookmark < bStartOfGame) { // Should never reach here } else if (BF_GLOBALS._bookmark < bCalledToDomesticViolence) { - if ((BF_GLOBALS._v5098C >> 1) & 1) + if ((BF_GLOBALS._subFlagBitArr1 >> 1) & 1) BF_GLOBALS.setFlag(fLateToMarina); else - BF_GLOBALS._v5098C |= 2; + BF_GLOBALS._subFlagBitArr1 |= 2; } else { - int v = (((BF_GLOBALS._v5098C >> 2) & 15) + 1) & 15; - BF_GLOBALS._v5098C = (BF_GLOBALS._v5098C & 0xC3) | (v << 2); + int v = (((BF_GLOBALS._subFlagBitArr1 >> 2) & 15) + 1) & 15; + BF_GLOBALS._subFlagBitArr1 = (BF_GLOBALS._subFlagBitArr1 & 0xC3) | (v << 2); if ((v != 1) && (v != 2)) { BF_GLOBALS._deathReason = 19; @@ -573,17 +573,17 @@ bool Scene60::Ignition::check1() { } } - BF_GLOBALS._v5098C |= 1; + BF_GLOBALS._subFlagBitArr1 |= 1; return false; } bool Scene60::Ignition::check2() { switch (BF_GLOBALS._bookmark) { case bInspectionDone: - if (BF_GLOBALS._v5098D & 1) { + if (BF_GLOBALS._subFlagBitArr2 & 1) { BF_GLOBALS.setFlag(fLateToDrunkStop); } else { - BF_GLOBALS._v5098D |= 1; + BF_GLOBALS._subFlagBitArr2 |= 1; } break; case bCalledToDrunkStop: @@ -593,7 +593,7 @@ bool Scene60::Ignition::check2() { break; } - BF_GLOBALS._v5098C |= 0x80; + BF_GLOBALS._subFlagBitArr1 |= 0x80; return false; } @@ -1076,7 +1076,7 @@ void Scene60::postInit(SceneObjectList *OwnerList) { switch (BF_GLOBALS._dayNumber) { case 1: - if (BF_GLOBALS.getFlag(onDuty) && (BF_GLOBALS._v5098C & 1) && + if (BF_GLOBALS.getFlag(onDuty) && (BF_GLOBALS._subFlagBitArr1 & 1) && (BF_GLOBALS._bookmark < bStartOfGame) && (BF_GLOBALS._sceneManager._previousScene != 342)) { setAction(&_action2); if (BF_GLOBALS._sceneManager._previousScene == 342) @@ -1084,7 +1084,7 @@ void Scene60::postInit(SceneObjectList *OwnerList) { } break; case 2: - if (BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._v5098C >> 7) & 1) && + if (BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._subFlagBitArr1 >> 7) & 1) && (BF_GLOBALS._sceneManager._previousScene != 550) && (BF_GLOBALS._bookmark < bInspectionDone)) { setAction(&_action3); diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index db9425436b..1dea7f7687 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -556,7 +556,7 @@ void Scene300::dispatch() { if ((BF_GLOBALS._player._position.y < 59) && (BF_GLOBALS._player._position.x > 137) && (_sceneMode != 6308) && (_sceneMode != 7308)) { - BF_GLOBALS._v4CEA4 = 3; + // The original was setting a useless global variable (removed) _sceneMode = 6308; BF_GLOBALS._player.disableControl(); ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 20, diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index dfdc3e00c7..c2c9a4f96e 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -229,7 +229,10 @@ void BlueForceGlobals::synchronize(Serializer &s) { TsAGE2Globals::synchronize(s); s.syncAsSint16LE(_dayNumber); - s.syncAsSint16LE(_v4CEA4); + if (s.getVersion() < 9) { + int tmpVar; + s.syncAsSint16LE(tmpVar); + } s.syncAsSint16LE(_v4CEAA); s.syncAsSint16LE(_marinaWomanCtr); s.syncAsSint16LE(_v4CEB0); @@ -257,8 +260,8 @@ void BlueForceGlobals::synchronize(Serializer &s) { s.syncAsSint16LE(_v501FC); s.syncAsSint16LE(_v5020C); s.syncAsSint16LE(_v50696); - s.syncAsSint16LE(_v5098C); - s.syncAsSint16LE(_v5098D); + s.syncAsSint16LE(_subFlagBitArr1); + s.syncAsSint16LE(_subFlagBitArr2); s.syncAsSint16LE(_v50CC2); s.syncAsSint16LE(_v50CC4); s.syncAsSint16LE(_v50CC6); @@ -287,7 +290,6 @@ void BlueForceGlobals::reset() { _interfaceY = UI_INTERFACE_Y; _dayNumber = 0; - _v4CEA4 = 0; _v4CEAA = 0; _marinaWomanCtr = 0; _v4CEB0 = 0; @@ -329,8 +331,8 @@ void BlueForceGlobals::reset() { _v501FC = 0; _v5020C = 0; _v50696 = 0; - _v5098C = 0; - _v5098D = 0; + _subFlagBitArr1 = 0; + _subFlagBitArr2 = 0; _v50CC2 = 0; _v50CC4 = 0; _v50CC6 = 0; diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 3280d70361..3d3ccb9abf 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -187,7 +187,6 @@ public: ASoundExt _sound1, _sound3; StripProxy _stripProxy; int _dayNumber; - int _v4CEA4; int _v4CEAA; int _marinaWomanCtr; int _v4CEB0; @@ -214,8 +213,8 @@ public: int _v501FC; int _v5020C; int _v50696; - uint8 _v5098C; - uint8 _v5098D; + uint8 _subFlagBitArr1; + uint8 _subFlagBitArr2; int _v50CC2; int _v50CC4; int _v50CC6; -- cgit v1.2.3 From 302c733df9105439b49752cf9d7eb09aefe7f794 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 09:19:33 +0100 Subject: TSAGE: BF - Cleanup: Rename two more global variables --- engines/tsage/blue_force/blueforce_scenes1.cpp | 26 +++++++++++++------------- engines/tsage/globals.cpp | 8 ++++---- engines/tsage/globals.h | 4 ++-- 3 files changed, 19 insertions(+), 19 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index b8c09d3e89..66ed605aff 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -1017,7 +1017,7 @@ bool Scene115::Object1::startAction(CursorType action, Event &event) { if (scene->_field31E8 == 0) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; - if (BF_GLOBALS._v4CEAA == 0) + if (BF_GLOBALS._tonyDialogCtr == 0) scene->_stripManager.start(1167, scene); else if (BF_GLOBALS.getFlag(fShowedIdToKate)) scene->_stripManager.start(1159, scene); @@ -1036,7 +1036,7 @@ bool Scene115::Object1::startAction(CursorType action, Event &event) { return true; case INV_ID: if (scene->_field31E8 == 0) { - if (BF_GLOBALS._v4CEAA == 0) { + if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1167; scene->setAction(&scene->_action6); } else if (BF_GLOBALS.getFlag(fShowedIdToKate)) { @@ -1077,7 +1077,7 @@ bool Scene115::Object2::startAction(CursorType action, Event &event) { else if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) { if (BF_GLOBALS.getFlag(fTalkedToTony)) scene->_sceneMode = 1151; - else if (BF_GLOBALS._v4CEAA == 0) { + else if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1150; BF_GLOBALS.setFlag(fTalkedToTony); } else @@ -1111,7 +1111,7 @@ bool Scene115::Object2::startAction(CursorType action, Event &event) { case INV_COBB_RAP: if (BF_GLOBALS.getFlag(onDuty)) scene->_sceneMode = 1177; - else if (BF_GLOBALS._v4CEAA == 0) + else if (BF_GLOBALS._tonyDialogCtr == 0) scene->_sceneMode = 1179; else scene->_sceneMode = 1154; @@ -1132,11 +1132,11 @@ bool Scene115::Object2::startAction(CursorType action, Event &event) { } else { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fTalkedToTony); - if (BF_GLOBALS._v4CEAA == 0) { + if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1150; scene->setAction(&scene->_action9); } else { - BF_GLOBALS._v4CEAA = 1; + BF_GLOBALS._tonyDialogCtr = 1; scene->setAction(&scene->_action2); } } @@ -1339,7 +1339,7 @@ void Scene115::Action2::signal() { switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); - if (BF_GLOBALS._v4CEAA < 3) { + if (BF_GLOBALS._tonyDialogCtr < 3) { if (scene->_object2._position.x > 67) { scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_object2, NULL); } else if (scene->_object2._position.x != 67) { @@ -1349,10 +1349,10 @@ void Scene115::Action2::signal() { BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player); break; case 1: - BF_GLOBALS._v4CEAA++; + ++BF_GLOBALS._tonyDialogCtr; if (BF_GLOBALS.getFlag(onDuty)) { if (BF_GLOBALS.getFlag(fTalkedToTony)) { - switch (BF_GLOBALS._v4CEAA) { + switch (BF_GLOBALS._tonyDialogCtr) { case 1: T2_GLOBALS._uiElements.addScore(30); scene->_stripManager.start(1181, this); @@ -1369,7 +1369,7 @@ void Scene115::Action2::signal() { } } else { if (BF_GLOBALS.getFlag(fTalkedToTony)) { - switch (BF_GLOBALS._v4CEAA) { + switch (BF_GLOBALS._tonyDialogCtr) { case 1: T2_GLOBALS._uiElements.addScore(30); scene->_stripManager.start(1153, this); @@ -1387,7 +1387,7 @@ void Scene115::Action2::signal() { } break; case 2: - if (BF_GLOBALS._v4CEAA == 3) + if (BF_GLOBALS._tonyDialogCtr == 3) scene->_object2.setAction(&scene->_sequenceManager3, NULL, 3119, &scene->_object2, NULL); BF_GLOBALS._player.enableControl(); remove(); @@ -1507,11 +1507,11 @@ void Scene115::Action7::signal() { break; case 1: BF_GLOBALS._player.setStrip(4); - if (BF_GLOBALS._v4CEB0 == 0) + if (BF_GLOBALS._kateDialogCtr == 0) scene->_stripManager.start(1156, this); else scene->_stripManager.start(1157, this); - BF_GLOBALS._v4CEB0++; + ++BF_GLOBALS._kateDialogCtr; break; case 2: BF_GLOBALS._player.enableControl(); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index c2c9a4f96e..3bf9722416 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -233,9 +233,9 @@ void BlueForceGlobals::synchronize(Serializer &s) { int tmpVar; s.syncAsSint16LE(tmpVar); } - s.syncAsSint16LE(_v4CEAA); + s.syncAsSint16LE(_tonyDialogCtr); s.syncAsSint16LE(_marinaWomanCtr); - s.syncAsSint16LE(_v4CEB0); + s.syncAsSint16LE(_kateDialogCtr); s.syncAsSint16LE(_v4CEB6); s.syncAsSint16LE(_safeCombination); s.syncAsSint16LE(_v4CEC0); @@ -290,9 +290,9 @@ void BlueForceGlobals::reset() { _interfaceY = UI_INTERFACE_Y; _dayNumber = 0; - _v4CEAA = 0; + _tonyDialogCtr = 0; _marinaWomanCtr = 0; - _v4CEB0 = 0; + _kateDialogCtr = 0; _v4CEB6 = 0; _safeCombination = 0; _v4CEC0 = 0; diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 3d3ccb9abf..21a4b921d1 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -187,9 +187,9 @@ public: ASoundExt _sound1, _sound3; StripProxy _stripProxy; int _dayNumber; - int _v4CEAA; + int _tonyDialogCtr; int _marinaWomanCtr; - int _v4CEB0; + int _kateDialogCtr; int _v4CEB6; int _safeCombination; int _v4CEC0; -- cgit v1.2.3 From 701d984c5124daad3e154a90ab6c9facf7e05683 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 23:20:45 +0100 Subject: TSAGE: BF - Cleanup: Rename several variables and objects in scene 115 --- engines/tsage/blue_force/blueforce_scenes1.cpp | 86 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes1.h | 10 +-- 2 files changed, 48 insertions(+), 48 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 66ed605aff..734828b115 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -1059,7 +1059,7 @@ bool Scene115::Object1::startAction(CursorType action, Event &event) { } } -bool Scene115::Object2::startAction(CursorType action, Event &event) { +bool Scene115::Tony::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { @@ -1088,14 +1088,14 @@ bool Scene115::Object2::startAction(CursorType action, Event &event) { } else scene->_sceneMode = 1172; } else if (BF_GLOBALS.getFlag(onDuty)) { - if (scene->_field31EA == 0) { - scene->_field31EA = 1; + if (scene->_talkToTonyCtr == 0) { + scene->_talkToTonyCtr = 1; scene->_sceneMode = 1169; } else scene->_sceneMode = 1170; - } else if (scene->_field31EA == 0) { + } else if (scene->_talkToTonyCtr == 0) { scene->_sceneMode = 1171; - scene->_field31EA = 1; + scene->_talkToTonyCtr = 1; } else scene->_sceneMode = 1172; @@ -1340,10 +1340,10 @@ void Scene115::Action2::signal() { case 0: BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._tonyDialogCtr < 3) { - if (scene->_object2._position.x > 67) { - scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_object2, NULL); - } else if (scene->_object2._position.x != 67) { - scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_object2, NULL); + if (scene->_tony._position.x > 67) { + scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_tony, NULL); + } else if (scene->_tony._position.x != 67) { + scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_tony, NULL); } } BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player); @@ -1388,7 +1388,7 @@ void Scene115::Action2::signal() { break; case 2: if (BF_GLOBALS._tonyDialogCtr == 3) - scene->_object2.setAction(&scene->_sequenceManager3, NULL, 3119, &scene->_object2, NULL); + scene->_tony.setAction(&scene->_sequenceManager3, NULL, 3119, &scene->_tony, NULL); BF_GLOBALS._player.enableControl(); remove(); default: @@ -1399,7 +1399,7 @@ void Scene115::Action2::signal() { void Scene115::Action3::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - setAction(&scene->_sequenceManager4, this, 3117, &scene->_object7, NULL); + setAction(&scene->_sequenceManager4, this, 3117, &scene->_neonSign, NULL); } void Scene115::Action4::signal() { @@ -1442,7 +1442,7 @@ void Scene115::Action5::signal() { if (scene->_item1._field1F8A == 0) { setAction(&scene->_sequenceManager5, this, 1115, &scene->_object1, NULL); } else { - _actionIndex--; + --_actionIndex; setDelay(120); } break; @@ -1476,7 +1476,7 @@ void Scene115::Action6::signal() { case 1: if (scene->_sceneMode == 9999) { setAction(&scene->_sequenceManager1, this, 4115, &scene->_object1, &BF_GLOBALS._player, NULL); - _actionIndex--; + --_actionIndex; scene->_sceneMode = 1166; } else { scene->_stripManager.start(scene->_sceneMode, this); @@ -1565,17 +1565,17 @@ void Scene115::Action9::signal() { switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); - if (scene->_object2._position.x > 67) - scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_object2, NULL); - else if (scene->_object2._position.x != 67) - scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_object2, NULL); + if (scene->_tony._position.x > 67) + scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_tony, NULL); + else if (scene->_tony._position.x != 67) + scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_tony, NULL); BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player, NULL); break; case 1: scene->_stripManager.start(scene->_sceneMode, this); break; case 2: - scene->_object2.setAction(&scene->_sequenceManager3, this, 3119, &scene->_object2, NULL); + scene->_tony.setAction(&scene->_sequenceManager3, this, 3119, &scene->_tony, NULL); break; case 3: BF_GLOBALS._player.enableControl(); @@ -1586,7 +1586,7 @@ void Scene115::Action9::signal() { } Scene115::Scene115() : SceneExt () { - _field168A = _field31E8 = _field31EA = 0; + _lineNumModifier = _field31E8 = _talkToTonyCtr = 0; } void Scene115::postInit(SceneObjectList *OwnerList) { @@ -1620,24 +1620,24 @@ void Scene115::postInit(SceneObjectList *OwnerList) { _object5.fixPriority(95); // Bartender - _object2.postInit(); - _object2.setVisage(132); - _object2.setPosition(Common::Point(74, 66)); - _object2.setStrip(3); - _object2.setFrame(1); - _object2.fixPriority(95); - _object2.animate(ANIM_MODE_2, NULL); - _object2._numFrames = 5; - _object2._field15F8 = 0; - _field31EA = 0; + _tony.postInit(); + _tony.setVisage(132); + _tony.setPosition(Common::Point(74, 66)); + _tony.setStrip(3); + _tony.setFrame(1); + _tony.fixPriority(95); + _tony.animate(ANIM_MODE_2, NULL); + _tony._numFrames = 5; + _tony._field15F8 = 0; + _talkToTonyCtr = 0; //Neon sign - _object7.postInit(); - _object7.setVisage(115); - _object7.setStrip(4); - _object7.setFrame(1); - _object7.setPosition(Common::Point(262, 29)); - _object7.setAction(&_action3); + _neonSign.postInit(); + _neonSign.setVisage(115); + _neonSign.setStrip(4); + _neonSign.setFrame(1); + _neonSign.setPosition(Common::Point(262, 29)); + _neonSign.setAction(&_action3); _object11.postInit(); _object11.hide(); @@ -1674,7 +1674,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) { _object3.setVisage(123); _object3.setPosition(Common::Point(212, 108)); _object3.setAction(&_action1); - _field168A = 0; + _lineNumModifier = 0; BF_GLOBALS._sceneItems.push_front(&_object3); _object8.postInit(); @@ -1707,7 +1707,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) { } addTimer(&_eventHandler1); } - BF_GLOBALS._sceneItems.push_front(&_object2); + BF_GLOBALS._sceneItems.push_front(&_tony); _item11.setDetails(16, 115, 4, 15, 21, 1); _item12.setDetails(20, 115, 5, 15, 21, 1); @@ -1741,14 +1741,14 @@ void Scene115::signal() { break; case 1: BF_GLOBALS._player.updateAngle(_object3._position); - SceneItem::display(115, 38 + _field168A, SET_WIDTH, 312, + SceneItem::display(115, 38 + _lineNumModifier, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); - _field168A++; - if (_field168A >= 4) - _field168A = 0; + ++_lineNumModifier; + if (_lineNumModifier >= 4) + _lineNumModifier = 0; // No break on purpose case 0: // No break on purpose @@ -1777,9 +1777,9 @@ void Scene115::process(Event &event) { void Scene115::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field168A); + s.syncAsSint16LE(_lineNumModifier); s.syncAsSint16LE(_field31E8); - s.syncAsSint16LE(_field31EA); + s.syncAsSint16LE(_talkToTonyCtr); } /*-------------------------------------------------------------------------- diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 0a43b8ba2e..70272cc7e3 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -175,7 +175,7 @@ class Scene115: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Object2: public NamedObject { + class Tony: public NamedObject { public: int _field15F8; virtual bool startAction(CursorType action, Event &event); @@ -260,10 +260,10 @@ class Scene115: public SceneExt { SequenceManager _sequenceManager4; SequenceManager _sequenceManager5; Object1 _object1; - Object2 _object2; + Tony _tony; Object3 _object3; Object4 _object4; - SceneObject _object5, _object6, _object7, _object8, _object9; + SceneObject _object5, _object6, _neonSign, _object8, _object9; SceneObject _object10, _object11, _object12, _object13; Item1 _item1; EventHandler1 _eventHandler1; @@ -287,9 +287,9 @@ class Scene115: public SceneExt { SpeakerJakeUniform _jakeUniformSpeaker; SpeakerLyleHat _lyleHatSpeaker; ASound _sound1; - int _field168A; + int _lineNumModifier; int _field31E8; - int _field31EA; + int _talkToTonyCtr; public: Scene115(); virtual void synchronize(Serializer &s); -- cgit v1.2.3 From 92312a65d00d92da9770a82abc8a4bf31e32dc4d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 23:25:50 +0100 Subject: TSAGE: BF - Fix unnoticed bug in scene 115 --- engines/tsage/blue_force/blueforce_scenes1.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 734828b115..b4835fc794 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -1441,6 +1441,7 @@ void Scene115::Action5::signal() { case 0: if (scene->_item1._field1F8A == 0) { setAction(&scene->_sequenceManager5, this, 1115, &scene->_object1, NULL); + scene->_field31E8 = 1; } else { --_actionIndex; setDelay(120); -- cgit v1.2.3 From c2ebbf38a1697c939691dcf9fa8078f696d3250c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 9 Nov 2011 23:56:08 +0100 Subject: TSAGE: BF - Cleanup: Rename some more objects in scene 115 --- engines/tsage/blue_force/blueforce_scenes1.cpp | 103 ++++++++++++------------- engines/tsage/blue_force/blueforce_scenes1.h | 14 ++-- 2 files changed, 58 insertions(+), 59 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index b4835fc794..402d776429 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -985,7 +985,7 @@ void Scene114::signal() { * Scene 115 - Inside Tony's bar * *--------------------------------------------------------------------------*/ -bool Scene115::Object1::startAction(CursorType action, Event &event) { +bool Scene115::Kate::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { @@ -1001,7 +1001,7 @@ bool Scene115::Object1::startAction(CursorType action, Event &event) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; scene->_stripManager.start(1174, scene); - } else if (scene->_field31E8 == 0) { + } else if (scene->_jukeboxPlaying == 0) { if (BF_GLOBALS.getFlag(fShowedIdToKate)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; @@ -1014,7 +1014,7 @@ bool Scene115::Object1::startAction(CursorType action, Event &event) { scene->setAction(&scene->_action7); return true; case INV_MUG_SHOT: - if (scene->_field31E8 == 0) { + if (scene->_jukeboxPlaying == 0) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; if (BF_GLOBALS._tonyDialogCtr == 0) @@ -1035,7 +1035,7 @@ bool Scene115::Object1::startAction(CursorType action, Event &event) { SET_EXT_FGCOLOR, 13, LIST_END); return true; case INV_ID: - if (scene->_field31E8 == 0) { + if (scene->_jukeboxPlaying == 0) { if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1167; scene->setAction(&scene->_action6); @@ -1215,24 +1215,23 @@ bool Scene115::Object4::startAction(CursorType action, Event &event) { } } -void Scene115::Item1::signal() { +void Scene115::Jukebox::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - if (_field1F8A == 2) - _field1F8A = 0; - - if (_field1F8A == 1) { - _field1F8A = 2; + if (_jokeboxPlayingCtr == 2) + _jokeboxPlayingCtr = 0; + else if (_jokeboxPlayingCtr == 1) { + _jokeboxPlayingCtr = 2; setAction(&_sequenceManager6, this, 118, &scene->_object12, &scene->_object11, NULL); } } -bool Scene115::Item1::startAction(CursorType action, Event &event) { +bool Scene115::Jukebox::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { - if (_field1F8A == 0) { - _field1F8A = 1; + if (_jokeboxPlayingCtr == 0) { + _jokeboxPlayingCtr = 1; BF_GLOBALS._player.disableControl(); scene->setAction(&scene->_action4); } else @@ -1246,20 +1245,20 @@ bool Scene115::Item1::startAction(CursorType action, Event &event) { return NamedHotspot::startAction(action, event); } -void Scene115::Item1::synchronize(Serializer &s) { +void Scene115::Jukebox::synchronize(Serializer &s) { NamedHotspot::synchronize(s); - s.syncAsSint16LE(_field1F8A); + s.syncAsSint16LE(_jokeboxPlayingCtr); } -Scene115::Item1::Item1() { - _field1F8A = 0; +Scene115::Jukebox::Jukebox() { + _jokeboxPlayingCtr = 0; } void Scene115::EventHandler1::dispatch() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; if (BF_GLOBALS._player.getRegionIndex() == 27) { - scene->_object1.setAction(&scene->_action5); + scene->_kate.setAction(&scene->_action5); scene->removeTimer(this); } } @@ -1426,7 +1425,7 @@ void Scene115::Action4::signal() { setAction(&scene->_sequenceManager1, this, 117, &scene->_object12, &scene->_object11, NULL); break; case 3: - scene->_sound1.play(81, &scene->_item1, 127); + scene->_sound1.play(81, &scene->_itemJukebox, 127); BF_GLOBALS._player.enableControl(); remove(); default: @@ -1439,9 +1438,9 @@ void Scene115::Action5::signal() { switch (_actionIndex++) { case 0: - if (scene->_item1._field1F8A == 0) { - setAction(&scene->_sequenceManager5, this, 1115, &scene->_object1, NULL); - scene->_field31E8 = 1; + if (scene->_itemJukebox._jokeboxPlayingCtr == 0) { + setAction(&scene->_sequenceManager5, this, 1115, &scene->_kate, NULL); + scene->_jukeboxPlaying = 1; } else { --_actionIndex; setDelay(120); @@ -1451,15 +1450,15 @@ void Scene115::Action5::signal() { setAction(&scene->_sequenceManager5, this, 117, &scene->_object12, &scene->_object11, NULL); break; case 2: - scene->_sound1.play(81, &scene->_item1, 127); - scene->_item1._field1F8A = 1; + scene->_sound1.play(81, &scene->_itemJukebox, 127); + scene->_itemJukebox._jokeboxPlayingCtr = 1; setDelay(3); break; case 3: - setAction(&scene->_sequenceManager5, this, 1116, &scene->_object1, NULL); + setAction(&scene->_sequenceManager5, this, 1116, &scene->_kate, NULL); break; case 4: - scene->_field31E8 = 0; + scene->_jukeboxPlaying = 0; remove(); default: break; @@ -1472,11 +1471,11 @@ void Scene115::Action6::signal() { switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); - BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 2115, &scene->_object1, &BF_GLOBALS._player, NULL); + BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 2115, &scene->_kate, &BF_GLOBALS._player, NULL); break; case 1: if (scene->_sceneMode == 9999) { - setAction(&scene->_sequenceManager1, this, 4115, &scene->_object1, &BF_GLOBALS._player, NULL); + setAction(&scene->_sequenceManager1, this, 4115, &scene->_kate, &BF_GLOBALS._player, NULL); --_actionIndex; scene->_sceneMode = 1166; } else { @@ -1484,10 +1483,10 @@ void Scene115::Action6::signal() { } break; case 2: - scene->_object1.setVisage(131); - scene->_object1.setStrip(1); - scene->_object1.setFrame(1); - scene->_object1.setPosition(Common::Point(122, 97)); + scene->_kate.setVisage(131); + scene->_kate.setStrip(1); + scene->_kate.setFrame(1); + scene->_kate.setPosition(Common::Point(122, 97)); BF_GLOBALS._player.enableControl(); remove(); default: @@ -1529,11 +1528,11 @@ void Scene115::Action8::signal() { switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); - setAction(&scene->_sequenceManager1, this, 2115, &scene->_object1, &BF_GLOBALS._player, NULL); + setAction(&scene->_sequenceManager1, this, 2115, &scene->_kate, &BF_GLOBALS._player, NULL); break; case 1: T2_GLOBALS._uiElements.addScore(30); - setAction(&scene->_sequenceManager1, this, 4115, &scene->_object1, &BF_GLOBALS._player, NULL); + setAction(&scene->_sequenceManager1, this, 4115, &scene->_kate, &BF_GLOBALS._player, NULL); break; case 2: scene->_stripManager.start(1160, this); @@ -1543,15 +1542,15 @@ void Scene115::Action8::signal() { break; case 4: BF_GLOBALS.setFlag(fGivenNapkin); - setAction(&scene->_sequenceManager1, this, 2117, &scene->_object1, &BF_GLOBALS._player, &scene->_object13, NULL); + setAction(&scene->_sequenceManager1, this, 2117, &scene->_kate, &BF_GLOBALS._player, &scene->_object13, NULL); break; case 5: BF_INVENTORY.setObjectScene(INV_NAPKIN, 1); T2_GLOBALS._uiElements.addScore(10); - scene->_object1.setVisage(131); - scene->_object1.setStrip(1); - scene->_object1.setFrame(1); - scene->_object1.setPosition(Common::Point(122, 97)); + scene->_kate.setVisage(131); + scene->_kate.setStrip(1); + scene->_kate.setFrame(1); + scene->_kate.setPosition(Common::Point(122, 97)); BF_GLOBALS._player.enableControl(); remove(); break; @@ -1587,7 +1586,7 @@ void Scene115::Action9::signal() { } Scene115::Scene115() : SceneExt () { - _lineNumModifier = _field31E8 = _talkToTonyCtr = 0; + _lineNumModifier = _jukeboxPlaying = _talkToTonyCtr = 0; } void Scene115::postInit(SceneObjectList *OwnerList) { @@ -1596,7 +1595,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._sound1.fadeSound(15); loadScene(115); setZoomPercents(98, 85, 115, 100); - _field31E8 = 0; + _jukeboxPlaying = 0; _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_kateSpeaker); _stripManager.addSpeaker(&_tonySpeaker); @@ -1697,14 +1696,14 @@ void Scene115::postInit(SceneObjectList *OwnerList) { _object10.fixPriority(112); if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) { - _object1.postInit(); - _object1.setVisage(131); - _object1.setPosition(Common::Point(122, 97)); - _object1.setStrip(1); - _object1.setFrame(1); - _object1.changeZoom(100); - _object1.fixPriority(95); - BF_GLOBALS._sceneItems.push_front(&_object1); + _kate.postInit(); + _kate.setVisage(131); + _kate.setPosition(Common::Point(122, 97)); + _kate.setStrip(1); + _kate.setFrame(1); + _kate.changeZoom(100); + _kate.fixPriority(95); + BF_GLOBALS._sceneItems.push_front(&_kate); } addTimer(&_eventHandler1); } @@ -1717,8 +1716,8 @@ void Scene115::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._sceneItems.push_front(&_item14); _item10.setDetails(Rect(0, 147, 30, 167), 115, -1, -1, -1, 1, NULL); // SUB_177B8 - addTimer(&_item1); - _item1.setDetails(Rect(147, 45, 179, 91), 115, 25, 26, 27, 1, NULL); + addTimer(&_itemJukebox); + _itemJukebox.setDetails(Rect(147, 45, 179, 91), 115, 25, 26, 27, 1, NULL); // _item6.setDetails(Rect(107, 43, 122, 61), 115, 28, 29, 30, 1, NULL); _item7.setDetails(Rect(180, 33, 230, 63), 115, 31, 32, 33, 1, NULL); @@ -1779,7 +1778,7 @@ void Scene115::process(Event &event) { void Scene115::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_lineNumModifier); - s.syncAsSint16LE(_field31E8); + s.syncAsSint16LE(_jukeboxPlaying); s.syncAsSint16LE(_talkToTonyCtr); } diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 70272cc7e3..3424521e5a 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -171,7 +171,7 @@ public: class Scene115: public SceneExt { /* Objects */ - class Object1: public NamedObject { + class Kate: public NamedObject { public: virtual bool startAction(CursorType action, Event &event); }; @@ -197,12 +197,12 @@ class Scene115: public SceneExt { }; /* Items */ - class Item1: public NamedHotspot { + class Jukebox: public NamedHotspot { SequenceManager _sequenceManager6; public: - int _field1F8A; + int _jokeboxPlayingCtr; - Item1(); + Jukebox(); virtual bool startAction(CursorType action, Event &event); virtual void signal(); virtual void synchronize(Serializer &s); @@ -259,13 +259,13 @@ class Scene115: public SceneExt { SequenceManager _sequenceManager3; SequenceManager _sequenceManager4; SequenceManager _sequenceManager5; - Object1 _object1; + Kate _kate; Tony _tony; Object3 _object3; Object4 _object4; SceneObject _object5, _object6, _neonSign, _object8, _object9; SceneObject _object10, _object11, _object12, _object13; - Item1 _item1; + Jukebox _itemJukebox; EventHandler1 _eventHandler1; NamedHotspot _item2, _item3, _item4, _item5, _item6, _item7, _item8, _item9; Item10 _item10; @@ -288,7 +288,7 @@ class Scene115: public SceneExt { SpeakerLyleHat _lyleHatSpeaker; ASound _sound1; int _lineNumModifier; - int _field31E8; + int _jukeboxPlaying; int _talkToTonyCtr; public: Scene115(); -- 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 +- engines/tsage/staticres.cpp | 17 +++++ engines/tsage/staticres.h | 17 +++++ 5 files changed, 150 insertions(+), 1 deletion(-) (limited to 'engines/tsage') 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(); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 84b76ad47f..238e7b3049 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -199,6 +199,23 @@ const char *CHAR_SEEKER_MSG = " Seeker "; const char *CHAR_MIRANDA_MSG = "Miranda"; const char *CHAR_CANCEL_MSG = " Cancel "; +const char *GAME_VERSION = "ScummVM Version"; +const char *SOUND_OPTIONS = "Sound options"; +const char *QUIT_GAME = "Quit"; +const char *RESTART_GAME = "Restart"; +const char *SAVE_GAME = "Save game"; +const char *RESTORE_GAME = "Restore game"; +const char *SHOW_CREDITS = "Show credits"; +const char *PAUSE_GAME = "Pause game"; +const char *RESUME_PLAY = " Resume play "; +const char *F2 = "F2"; +const char *F3 = "F3"; +const char *F4 = "F4"; +const char *F5 = "F5"; +const char *F7 = "F7"; +const char *F8 = "F8"; +const char *F10 = "F10"; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 2fd97d198c..faff3f4103 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -157,6 +157,23 @@ extern const char *CHAR_SEEKER_MSG; extern const char *CHAR_MIRANDA_MSG; extern const char *CHAR_CANCEL_MSG; +extern const char *GAME_VERSION; +extern const char *SOUND_OPTIONS; +extern const char *QUIT_GAME; +extern const char *RESTART_GAME; +extern const char *SAVE_GAME; +extern const char *RESTORE_GAME; +extern const char *SHOW_CREDITS; +extern const char *PAUSE_GAME; +extern const char *RESUME_PLAY; +extern const char *F2; +extern const char *F3; +extern const char *F4; +extern const char *F5; +extern const char *F7; +extern const char *F8; +extern const char *F10; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- 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') 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 2acfca89984cabdac986a624cce2eba91727afb8 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 12 Nov 2011 00:44:48 +0100 Subject: TSAGE: BF - Some more renaming --- engines/tsage/blue_force/blueforce_scenes9.cpp | 230 ++++++++++++------------- engines/tsage/blue_force/blueforce_scenes9.h | 8 +- engines/tsage/globals.cpp | 42 ++--- engines/tsage/globals.h | 4 +- 4 files changed, 141 insertions(+), 143 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index f753e49028..5e8bc12a18 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -62,16 +62,16 @@ bool Scene900::Gate::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (BF_GLOBALS._v4CEC0 == 0) { + if (BF_GLOBALS._gateStatus == 0) { return NamedObject::startAction(action, event); } else { BF_GLOBALS._player.disableControl(); - if (BF_GLOBALS._v4CEC0 == 2) { + if (BF_GLOBALS._gateStatus == 2) { scene->_sceneMode = 9006; - BF_GLOBALS._v4CEC0 = 1; + BF_GLOBALS._gateStatus = 1; scene->setAction(&scene->_sequenceManager1, scene, 9006, &BF_GLOBALS._player, this, NULL); } else { - BF_GLOBALS._v4CEC0 = 2; + BF_GLOBALS._gateStatus = 2; if (scene->_dog._flag == false) { BF_GLOBALS._player.setAction(&scene->_action4); } else { @@ -84,15 +84,15 @@ bool Scene900::Gate::startAction(CursorType action, Event &event) { } break; case INV_WAREHOUSE_KEYS: - if (BF_GLOBALS._v4CEC0 == 2) { + if (BF_GLOBALS._gateStatus == 2) { SceneItem::display2(900, 14); } else { - if (BF_GLOBALS._v4CEC0 == 0) { + if (BF_GLOBALS._gateStatus == 0) { if (!BF_GLOBALS.getFlag(fGotPointsForUnlockGate)) { BF_GLOBALS.setFlag(fGotPointsForUnlockGate); T2_GLOBALS._uiElements.addScore(30); } - BF_GLOBALS._v4CEC0 = 1; + BF_GLOBALS._gateStatus = 1; } else { if (!BF_GLOBALS.getFlag(fGotPointsForLockGate)) { if (BF_GLOBALS._bookmark == bEndDayThree) { @@ -100,7 +100,7 @@ bool Scene900::Gate::startAction(CursorType action, Event &event) { T2_GLOBALS._uiElements.addScore(30); } } - BF_GLOBALS._v4CEC0 = 0; + BF_GLOBALS._gateStatus = 0; } scene->_sceneMode = 9004; BF_GLOBALS._player.disableControl(); @@ -117,7 +117,7 @@ bool Scene900::Door::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (BF_GLOBALS._v4CEC0 == 2) { + if (BF_GLOBALS._gateStatus == 2) { if (_flag) { SceneItem::display2(900, 1); } else { @@ -131,7 +131,7 @@ bool Scene900::Door::startAction(CursorType action, Event &event) { return NamedObject::startAction(action, event); break; case INV_WAREHOUSE_KEYS: - if (BF_GLOBALS._v4CEC0 == 2) { + if (BF_GLOBALS._gateStatus == 2) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9012; scene->setAction(&scene->_sequenceManager1, scene, 9012, &BF_GLOBALS._player, &scene->_door, NULL); @@ -180,11 +180,11 @@ bool Scene900::Lyle::startAction(CursorType action, Event &event) { if (action == CURSOR_TALK) { if (!_action) { if (scene->_dog._flag) { - if (BF_GLOBALS._v4CEC0 == 0) + if (BF_GLOBALS._gateStatus == 0) scene->_stripManager.start(9004, &BF_GLOBALS._stripProxy); else { if (scene->_door._flag == 1) { - if (BF_GLOBALS._v4CEC0 == 2) + if (BF_GLOBALS._gateStatus == 2) scene->_stripManager.start(9005, &BF_GLOBALS._stripProxy); else scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy); @@ -445,7 +445,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._sceneManager._previousScene == 910) { _sceneBounds.moveTo(639, 0); - BF_GLOBALS._v4CEC0 = 2; + BF_GLOBALS._gateStatus = 2; BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900); _dog._flag = 1; } @@ -485,7 +485,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _gate.setVisage(900); _gate.setStrip(2); - if (BF_GLOBALS._v4CEC0 == 2) + if (BF_GLOBALS._gateStatus == 2) _gate.setPosition(Common::Point(758, 127)); else { BF_GLOBALS._walkRegions.disableRegion(24); @@ -580,7 +580,7 @@ void Scene900::signal() { BF_GLOBALS._player.enableControl(); break; case 9001: - if ((BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900) || (BF_GLOBALS._v4CEC0 != 0) || + if ((BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900) || (BF_GLOBALS._gateStatus != 0) || (_door._flag == 0)) BF_GLOBALS.setFlag(fLeftTraceIn900); else @@ -593,7 +593,7 @@ void Scene900::signal() { BF_GLOBALS._player.enableControl(); break; case 9004: - if (BF_GLOBALS._v4CEC0 == 0) + if (BF_GLOBALS._gateStatus == 0) SceneItem::display2(900, 3); else SceneItem::display2(900, 4); @@ -625,7 +625,7 @@ void Scene900::signal() { break; case 9010: _sound1.play(92); - if (BF_GLOBALS._v4CEC0 == 2) { + if (BF_GLOBALS._gateStatus == 2) { _sceneMode = 9008; setAction(&_sequenceManager1, this, 9008, &BF_GLOBALS._player, &_dog, NULL); } else { @@ -822,7 +822,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: BF_GLOBALS._player.disableControl(); - scene->_field2DDA = 6; + scene->_sceneSubMode = 6; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -896,7 +896,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { if (BF_GLOBALS._v4CEE2 < 4) { BF_GLOBALS._player.disableControl(); scene->_yellowCord.fixPriority(121); - scene->_field2DDA = 10; + scene->_sceneSubMode = 10; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -950,7 +950,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: BF_GLOBALS._player.disableControl(); - scene->_field2DDA = 7; + scene->_sceneSubMode = 7; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -994,7 +994,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { } else { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._v4CEE2 == 4) { - scene->_field2DDA = 11; + scene->_sceneSubMode = 11; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1002,7 +1002,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { scene->signal(); return true; } else { - scene->_field2DDA = 12; + scene->_sceneSubMode = 12; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1022,7 +1022,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { return true; } else { BF_GLOBALS._player.disableControl(); - scene->_field2DDA = 11; + scene->_sceneSubMode = 11; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1082,7 +1082,7 @@ bool Scene910::PowerCord::startAction(CursorType action, Event &event) { if ((BF_GLOBALS._v4CEE0 == 0) || (_field92 != 1)) { BF_GLOBALS._player.disableControl(); if (_field92 == 1) { - scene->_field2DDA = 8; + scene->_sceneSubMode = 8; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1092,7 +1092,7 @@ bool Scene910::PowerCord::startAction(CursorType action, Event &event) { return true; } else { scene->_destPos = Common::Point(151, 186); - scene->_field2DDA = 4; + scene->_sceneSubMode = 4; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1143,7 +1143,7 @@ bool Scene910::BreakerBox::startAction(CursorType action, Event &event) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 9102; if (BF_GLOBALS.getFlag(gunDrawn)) { - scene->_field2DDA = 1; + scene->_sceneSubMode = 1; scene->_sceneMode = 9123; scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); return true; @@ -1173,7 +1173,7 @@ bool Scene910::FakeWall::startAction(CursorType action, Event &event) { if (action == INV_YELLOW_CORD) { BF_GLOBALS._player.disableControl(); scene->_destPos = Common::Point(285, 114); - scene->_field2DDA = 9; + scene->_sceneSubMode = 9; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1192,23 +1192,23 @@ void Scene910::BreakerBoxInset::postInit(SceneObjectList *OwnerList) { _lookLineNum = 7; _useLineNum = 8; BF_GLOBALS._sceneItems.push_back(this); - scene->_field2DD8 = 0; + scene->_breakerButtonCtr = 0; - _object13.setupBreaker(115, 44, 1, BF_GLOBALS._v4CECE[0]); - _object14.setupBreaker(116, 63, 2, BF_GLOBALS._v4CECE[1]); - _object15.setupBreaker(116, 69, 2, BF_GLOBALS._v4CECE[2]); - _object16.setupBreaker(115, 76, 1, BF_GLOBALS._v4CECE[3]); - _object17.setupBreaker(115, 95, 1, BF_GLOBALS._v4CECE[4]); - _object18.setupBreaker(116, 114, 2, BF_GLOBALS._v4CECE[5]); - _object19.setupBreaker(116, 120, 2, BF_GLOBALS._v4CECE[6]); - _object20.setupBreaker(188, 45, 2, BF_GLOBALS._v4CECE[7]); - _object21.setupBreaker(188, 51, 2, BF_GLOBALS._v4CECE[8]); - _object22.setupBreaker(179, 59, 1, BF_GLOBALS._v4CECE[9]); - _object23.setupBreaker(187, 78, 2, BF_GLOBALS._v4CECE[10]); - _object24.setupBreaker(187, 84, 2, BF_GLOBALS._v4CECE[11]); + _object13.setupBreaker(115, 44, 1, BF_GLOBALS._breakerBoxStatusArr[0]); + _object14.setupBreaker(116, 63, 2, BF_GLOBALS._breakerBoxStatusArr[1]); + _object15.setupBreaker(116, 69, 2, BF_GLOBALS._breakerBoxStatusArr[2]); + _object16.setupBreaker(115, 76, 1, BF_GLOBALS._breakerBoxStatusArr[3]); + _object17.setupBreaker(115, 95, 1, BF_GLOBALS._breakerBoxStatusArr[4]); + _object18.setupBreaker(116, 114, 2, BF_GLOBALS._breakerBoxStatusArr[5]); + _object19.setupBreaker(116, 120, 2, BF_GLOBALS._breakerBoxStatusArr[6]); + _object20.setupBreaker(188, 45, 2, BF_GLOBALS._breakerBoxStatusArr[7]); + _object21.setupBreaker(188, 51, 2, BF_GLOBALS._breakerBoxStatusArr[8]); + _object22.setupBreaker(179, 59, 1, BF_GLOBALS._breakerBoxStatusArr[9]); + _object23.setupBreaker(187, 78, 2, BF_GLOBALS._breakerBoxStatusArr[10]); + _object24.setupBreaker(187, 84, 2, BF_GLOBALS._breakerBoxStatusArr[11]); - _object25.subEBBDC(178, 90, 1, BF_GLOBALS._v4CECE[12]); - _object26.subEBBDC(178, 108, 2, BF_GLOBALS._v4CECE[13]); + _object25.setupHiddenSwitch(178, 90, 1, BF_GLOBALS._breakerBoxStatusArr[12]); + _object26.setupHiddenSwitch(178, 108, 2, BF_GLOBALS._breakerBoxStatusArr[13]); } void Scene910::BreakerBoxInset::remove() { @@ -1231,7 +1231,7 @@ void Scene910::BreakerBoxInset::remove() { _object27.remove(); _object28.remove(); - if ((BF_GLOBALS._v4CECE[13] < 4) && (scene->_breakerBox._frame > 1)) + if ((BF_GLOBALS._breakerBoxStatusArr[13] < 4) && (scene->_breakerBox._frame > 1)) scene->_breakerBox.animate(ANIM_MODE_6, NULL); FocusObject::remove(); @@ -1240,19 +1240,19 @@ void Scene910::BreakerBoxInset::remove() { void Scene910::Object13::synchronize(Serializer &s) { NamedObject::synchronize(s); s.syncAsSint16LE(_field90); - s.syncAsSint16LE(_field92); + s.syncAsSint16LE(_mode); } bool Scene910::Object13::startAction(CursorType action, Event &event) { static uint32 black = 0; Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; - int8 var2; + int8 xDiff; - if (_field92 == 1) - var2 = 12; + if (_mode == 1) + xDiff = 12; else - var2 = 7; + xDiff = 7; switch (action) { case CURSOR_LOOK: @@ -1264,8 +1264,8 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { return true; case CURSOR_USE: scene->_sound2.play(101); - if (event.mousePos.x <= _position.x + var2) { - if (_field92 != 1) { + if (event.mousePos.x <= _position.x + xDiff) { + if (_mode != 1) { if (_frame > 6) setFrame(_frame - 1); } else { @@ -1273,7 +1273,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { setFrame(_frame - 1); } } else { - if (_field92 == 1) { + if (_mode == 1) { if (_frame < 3) setFrame(_frame + 1); } else { @@ -1282,10 +1282,10 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { } } - if (_field92 != 1) - BF_GLOBALS._v4CECE[_field90 - 1] = (_field90 + 251) % 256; + if (_mode != 1) + BF_GLOBALS._breakerBoxStatusArr[_field90 - 1] = (_field90 + 251) % 256; else - BF_GLOBALS._v4CECE[_field90 - 1] = _field90; + BF_GLOBALS._breakerBoxStatusArr[_field90 - 1] = _field90; switch (_field90) { case 1: @@ -1351,7 +1351,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { return true; case 4: if (_frame == 2) { - if (BF_GLOBALS._v4CECE[4] == 2) { + if (BF_GLOBALS._breakerBoxStatusArr[4] == 2) { scene->_action1.setActionIndex(2); scene->_action1.signal(); } @@ -1362,7 +1362,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { return true; case 5: if (_frame == 2) { - if (BF_GLOBALS._v4CECE[3] == 2) { + if (BF_GLOBALS._breakerBoxStatusArr[3] == 2) { scene->_action1.setActionIndex(2); scene->_action1.signal(); } @@ -1372,7 +1372,7 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { } return true; case 15: - if ((BF_GLOBALS._v4CECA == 2) && (BF_GLOBALS._v4CECE[17] == 1)) { + if ((BF_GLOBALS._v4CECA == 2) && (BF_GLOBALS._breakerBoxStatusArr[17] == 1)) { if (_frame == 7) scene->subE83E1(); else @@ -1397,9 +1397,9 @@ void Scene910::Object13::setupBreaker(int x, int y, int mode, int8 frameNumber) Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; NamedObject::postInit(); - _field92 = mode; - scene->_field2DD8++; - _field90 = scene->_field2DD8; + _mode = mode; + scene->_breakerButtonCtr++; + _field90 = scene->_breakerButtonCtr; setVisage(910); if (mode == 1) { @@ -1432,18 +1432,18 @@ bool Scene910::Object25::startAction(CursorType action, Event &event) { SceneItem::display2(910, 11); return true; case CURSOR_USE: - _field92 = BF_GLOBALS._v4CECE[_field90 + 11]; + _field92 = BF_GLOBALS._breakerBoxStatusArr[_field90 + 11]; switch (_field92 - 1) { case 0: _field92 = 2; setStrip(7); setFrame(1); if (_field90 == 1) { - scene->_field2DD8 = 14; - scene->_breakerBoxInset._object27.setupBreaker(182, 92, 2, BF_GLOBALS._v4CECE[14]); + scene->_breakerButtonCtr = 14; + scene->_breakerBoxInset._object27.setupBreaker(182, 92, 2, BF_GLOBALS._breakerBoxStatusArr[14]); } else { - scene->_field2DD8 = 15; - scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._v4CECE[15]); + scene->_breakerButtonCtr = 15; + scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._breakerBoxStatusArr[15]); } SceneItem::display2(910, 12); break; @@ -1461,11 +1461,11 @@ bool Scene910::Object25::startAction(CursorType action, Event &event) { setStrip(7); setFrame(1); if (_field90 == 1) { - scene->_field2DD8 = 14; - scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._v4CECE[14]); + scene->_breakerButtonCtr = 14; + scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._breakerBoxStatusArr[14]); } else { - scene->_field2DD8 = 15; - scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._v4CECE[15]); + scene->_breakerButtonCtr = 15; + scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._breakerBoxStatusArr[15]); } break; case 3: @@ -1475,7 +1475,7 @@ bool Scene910::Object25::startAction(CursorType action, Event &event) { break; } - BF_GLOBALS._v4CECE[_field90 + 11] = _field92; + BF_GLOBALS._breakerBoxStatusArr[_field90 + 11] = _field92; return true; default: return NamedObject::startAction(action, event); @@ -1488,11 +1488,11 @@ void Scene910::Object25::remove() { SceneObject::remove(); } -void Scene910::Object25::subEBBDC(int x, int y, int arg8, int argA) { +void Scene910::Object25::setupHiddenSwitch(int x, int y, int arg8, int argA) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; NamedObject::postInit(); - scene->_field2DD8++; + scene->_breakerButtonCtr++; _field90 = arg8; _field92 = argA; setVisage(910); @@ -1504,11 +1504,11 @@ void Scene910::Object25::subEBBDC(int x, int y, int arg8, int argA) { setStrip(7); setFrame(1); if (_field90 == 1) { - scene->_field2DD8 = 14; - scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._v4CECE[14]); + scene->_breakerButtonCtr = 14; + scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._breakerBoxStatusArr[14]); } else { - scene->_field2DD8 = 15; - scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._v4CECE[15]); + scene->_breakerButtonCtr = 15; + scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._breakerBoxStatusArr[15]); } } @@ -1593,12 +1593,12 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { default: break; } - BF_GLOBALS._v4CECE[_field90 + 15] = _frame; + BF_GLOBALS._breakerBoxStatusArr[_field90 + 15] = _frame; if (_field90 == 0) { if (_frame == 2) - BF_GLOBALS._v4CECE[13] = 2; + BF_GLOBALS._breakerBoxStatusArr[13] = 2; else - BF_GLOBALS._v4CECE[13] = 4; + BF_GLOBALS._breakerBoxStatusArr[13] = 4; } return true; case INV_HALF_YELLOW_CORD: @@ -1636,13 +1636,12 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { setFrame(_field90 + 4); else if (_frame - _field90 == 3) setFrame(_field90 + 5); - BF_GLOBALS._v4CECE[15 + _field90] = _frame; - BF_GLOBALS._v4CECE[_field90 + 15] = _frame; + BF_GLOBALS._breakerBoxStatusArr[_field90 + 15] = _frame; if (_field90 == 0) { if (_frame == 2) - BF_GLOBALS._v4CECE[13] = 2; + BF_GLOBALS._breakerBoxStatusArr[13] = 2; else - BF_GLOBALS._v4CECE[13] = 4; + BF_GLOBALS._breakerBoxStatusArr[13] = 4; } return true; case INV_HALF_BLACK_CORD: @@ -1691,8 +1690,8 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { scene->_blackCord.fixPriority(50); scene->_blackCord.show(); scene->_blackCord._field90 = 1; - if (BF_GLOBALS._v4CECE[17] == 1) { - if (BF_GLOBALS._v4CECE[14] == 2) + if (BF_GLOBALS._breakerBoxStatusArr[17] == 1) { + if (BF_GLOBALS._breakerBoxStatusArr[14] == 2) scene->subE83E1(); else scene->subE82BD(); @@ -1702,13 +1701,12 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { setFrame(_field90 + 3); else if (_frame - _field90 == 4) setFrame(_field90 + 5); - BF_GLOBALS._v4CECE[15 + _field90] = _frame; - BF_GLOBALS._v4CECE[_field90 + 15] = _frame; + BF_GLOBALS._breakerBoxStatusArr[_field90 + 15] = _frame; if (_field90 == 0) { if (_frame == 2) - BF_GLOBALS._v4CECE[13] = 2; + BF_GLOBALS._breakerBoxStatusArr[13] = 2; else - BF_GLOBALS._v4CECE[13] = 4; + BF_GLOBALS._breakerBoxStatusArr[13] = 4; } return true; default: @@ -1719,7 +1717,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { void Scene910::BlackPlug::init(int x, int y, int arg8, int8 argA) { NamedObject::postInit(); _field90 = arg8; - _field92 = argA; + _mode = argA; setVisage(910); if (_field90 == 0) setStrip(7); @@ -1745,11 +1743,11 @@ void Scene910::GeneratorInset::postInit(SceneObjectList *OwnerList) { _useLineNum = 87; BF_GLOBALS._sceneItems.push_front(this); - scene->_field2DD8 = 16; - _blackPlug.init(142, 86, 1, BF_GLOBALS._v4CECE[16]); + scene->_breakerButtonCtr = 16; + _blackPlug.init(142, 86, 1, BF_GLOBALS._breakerBoxStatusArr[16]); - scene->_field2DD8 = 17; - _powerButton.init(BF_GLOBALS._v4CECE[17]); + scene->_breakerButtonCtr = 17; + _powerButton.init(BF_GLOBALS._breakerBoxStatusArr[17]); } void Scene910::GeneratorInset::remove() { @@ -1777,7 +1775,7 @@ bool Scene910::PowerButton::startAction(CursorType action, Event &event) { setFrame(5); _object32.setFrame(7); if (BF_GLOBALS._v4CECA == 2) { - if (BF_GLOBALS._v4CECE[14] == 2) + if (BF_GLOBALS._breakerBoxStatusArr[14] == 2) scene->subE83E1(); else scene->subE82BD(); @@ -1793,7 +1791,7 @@ bool Scene910::PowerButton::startAction(CursorType action, Event &event) { setFrame(4); _object32.setFrame(6); } - BF_GLOBALS._v4CECE[17] = (_frame + 252) % 256; + BF_GLOBALS._breakerBoxStatusArr[17] = (_frame + 252) % 256; return true; } else return NamedObject::startAction(action, event); @@ -1855,7 +1853,7 @@ bool Scene910::Item2::startAction(CursorType action, Event &event) { if (action == 59) { BF_GLOBALS._player.disableControl(); scene->_destPos = Common::Point(151, 186); - scene->_field2DDA = 5; + scene->_sceneSubMode = 5; scene->_sceneMode = 9123; if (BF_GLOBALS._player._visage == 1911) scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); @@ -1913,7 +1911,7 @@ bool Scene910::Item16::startAction(CursorType action, Event &event) { if (BF_GLOBALS._player._visage == 1911) { BF_GLOBALS._player.disableControl(); scene->_destPos = Common::Point(292, 100); - scene->_field2DDA = 0; + scene->_sceneSubMode = 0; scene->_sceneMode = 9123; scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL); } else { @@ -1940,8 +1938,8 @@ void Scene910::remove() { void Scene910::synchronize(Serializer &s) { PalettedScene::synchronize(s); - s.syncAsSint16LE(_field2DDA); - s.syncAsSint16LE(_field2DD8); + s.syncAsSint16LE(_sceneSubMode); + s.syncAsSint16LE(_breakerButtonCtr); s.syncAsSint16LE(_field2DE0); s.syncAsSint16LE(_field2DE2); s.syncAsSint16LE(_field2DE4); @@ -1979,7 +1977,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _vent.postInit(); _vent.setVisage(910); - if ((BF_GLOBALS._v4CECE[3] == 2) && (BF_GLOBALS._v4CECE[4] == 2)) { + if ((BF_GLOBALS._breakerBoxStatusArr[3] == 2) && (BF_GLOBALS._breakerBoxStatusArr[4] == 2)) { _action1.setActionIndex(4); } else { _vent.animate(ANIM_MODE_2, NULL); @@ -2071,13 +2069,13 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _lyle._field90 = 0; _lyle.setDetails(910, 69, 70, 71, 5, &_item4); - BF_GLOBALS._v4CECE[0] = 3; - BF_GLOBALS._v4CECE[12] = 2; - BF_GLOBALS._v4CECE[13] = 4; - BF_GLOBALS._v4CECE[14] = 3; - BF_GLOBALS._v4CECE[15] = 3; - BF_GLOBALS._v4CECE[16] = 4; - BF_GLOBALS._v4CECE[17] = 1; + BF_GLOBALS._breakerBoxStatusArr[0] = 3; + BF_GLOBALS._breakerBoxStatusArr[12] = 2; + BF_GLOBALS._breakerBoxStatusArr[13] = 4; + BF_GLOBALS._breakerBoxStatusArr[14] = 3; + BF_GLOBALS._breakerBoxStatusArr[15] = 3; + BF_GLOBALS._breakerBoxStatusArr[16] = 4; + BF_GLOBALS._breakerBoxStatusArr[17] = 1; BF_GLOBALS._v4CECA = 2; BF_GLOBALS._v4CEE0 = 1; _yellowCord.setPosition(Common::Point(291, -30)); @@ -2212,7 +2210,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._walkRegions.disableRegion(10); } - if (BF_GLOBALS._v4CECE[17] != 0) { + if (BF_GLOBALS._breakerBoxStatusArr[17] != 0) { _sound1.play(100); _sound1.holdAt(1); } @@ -2379,7 +2377,7 @@ void Scene910::signal() { BF_GLOBALS._player.enableControl(); break; case 9101: - if ((BF_GLOBALS._v4CEE0 == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._v4CECE[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910)) + if ((BF_GLOBALS._v4CEE0 == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._breakerBoxStatusArr[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910)) BF_GLOBALS.clearFlag(fGotPointsForSearchingDA); else BF_GLOBALS.setFlag(fGotPointsForSearchingDA); @@ -2387,7 +2385,7 @@ void Scene910::signal() { BF_GLOBALS._sceneManager.changeScene(900); break; case 9102: - if ((BF_GLOBALS._v4CECE[13] < 4) && (_breakerBox._frame == 1)) + if ((BF_GLOBALS._breakerBoxStatusArr[13] < 4) && (_breakerBox._frame == 1)) _breakerBox.animate(ANIM_MODE_5, NULL); BF_GLOBALS._player.enableControl(); @@ -2505,7 +2503,7 @@ void Scene910::signal() { break; case 9123: BF_GLOBALS.clearFlag(gunDrawn); - switch (_field2DDA - 1) { + switch (_sceneSubMode - 1) { case 0: _sceneMode = 9102; setAction(&_sequenceManager1, this, 9102, &BF_GLOBALS._player, NULL); @@ -2622,7 +2620,7 @@ void Scene910::signal() { break; case 9130: _lyle.setAction(&_sequenceManager2, NULL, 9133, &_lyle, NULL); - BF_GLOBALS._v4CECE[14] = 3; + BF_GLOBALS._breakerBoxStatusArr[14] = 3; subE82BD(); BF_GLOBALS._walkRegions.disableRegion(15); break; @@ -2781,7 +2779,7 @@ void Scene910::process(Event &event) { if (BF_GLOBALS._player._visage == 1911) { BF_GLOBALS._player.disableControl(); _destPos = event.mousePos; - _field2DDA = 0; + _sceneSubMode = 0; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); } else { @@ -2792,7 +2790,7 @@ void Scene910::process(Event &event) { } else if (BF_GLOBALS._player._visage == 1911) { BF_GLOBALS._player.disableControl(); _destPos = event.mousePos; - _field2DDA = 0; + _sceneSubMode = 0; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); } @@ -2823,7 +2821,7 @@ void Scene910::dispatch() { if ((BF_GLOBALS._player._position.x > 265) && (BF_GLOBALS._player._position.y < 102) && (BF_GLOBALS._v4CEE0 != 0) && (_sceneMode != 9143)) { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS.getFlag(gunDrawn)) { - _field2DDA = 3; + _sceneSubMode = 3; _sceneMode = 9123; setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL); } else if (BF_GLOBALS._v4CEE2 == 0) { diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h index f1dbb027d0..358f0b42e0 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.h +++ b/engines/tsage/blue_force/blueforce_scenes9.h @@ -170,7 +170,7 @@ class Scene910: public PalettedScene { class Object13: public NamedObject { protected: - int _field90, _field92; + int _field90, _mode; public: void setupBreaker(int x, int y, int mode, int8 frameNumber); virtual void synchronize(Serializer &s); @@ -180,7 +180,7 @@ class Scene910: public PalettedScene { class BlackPlug: public Object13 { public: - void init(int x, int y, int arg8, int8 argA); + void init(int x, int y, int arg8, int8 mode); virtual bool startAction(CursorType action, Event &event); virtual void remove(); }; @@ -188,7 +188,7 @@ class Scene910: public PalettedScene { class Object25: public NamedObject { int _field90, _field92; public: - void subEBBDC(int x, int y, int arg8, int argA); + void setupHiddenSwitch(int x, int y, int arg8, int argA); virtual void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); virtual void remove(); @@ -253,7 +253,7 @@ class Scene910: public PalettedScene { virtual bool startAction(CursorType action, Event &event); }; - int _field2DDA, _field2DD8, _field2DE0, _field2DE2, _field2DE4; + int _sceneSubMode, _breakerButtonCtr, _field2DE0, _field2DE2, _field2DE4; Common::Point _destPos; public: SequenceManager _sequenceManager1, _sequenceManager2; diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 3bf9722416..d2999a2603 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -238,14 +238,14 @@ void BlueForceGlobals::synchronize(Serializer &s) { s.syncAsSint16LE(_kateDialogCtr); s.syncAsSint16LE(_v4CEB6); s.syncAsSint16LE(_safeCombination); - s.syncAsSint16LE(_v4CEC0); + s.syncAsSint16LE(_gateStatus); s.syncAsSint16LE(_greenDay5TalkCtr); s.syncAsSint16LE(_v4CEC4); s.syncAsSint16LE(_v4CEC8); s.syncAsSint16LE(_v4CECA); s.syncAsSint16LE(_v4CECC); for (int i = 0; i < 18; i++) - s.syncAsByte(_v4CECE[i]); + s.syncAsByte(_breakerBoxStatusArr[i]); s.syncAsSint16LE(_v4CEE0); s.syncAsSint16LE(_v4CEE2); s.syncAsSint16LE(_v4CEE4); @@ -295,30 +295,30 @@ void BlueForceGlobals::reset() { _kateDialogCtr = 0; _v4CEB6 = 0; _safeCombination = 0; - _v4CEC0 = 0; + _gateStatus = 0; _greenDay5TalkCtr = 0; _v4CEC4 = 0; _v4CEC8 = 1; _v4CECA = 0; _v4CECC = 0; - _v4CECE[0] = 2; - _v4CECE[1] = 2; - _v4CECE[2] = 2; - _v4CECE[3] = 1; - _v4CECE[4] = 2; - _v4CECE[5] = 2; - _v4CECE[6] = 2; - _v4CECE[7] = 2; - _v4CECE[8] = 2; - _v4CECE[9] = 2; - _v4CECE[10] = 2; - _v4CECE[11] = 2; - _v4CECE[12] = 1; - _v4CECE[13] = 1; - _v4CECE[14] = 2; - _v4CECE[15] = 2; - _v4CECE[16] = 3; - _v4CECE[17] = 0; + _breakerBoxStatusArr[0] = 2; + _breakerBoxStatusArr[1] = 2; + _breakerBoxStatusArr[2] = 2; + _breakerBoxStatusArr[3] = 1; + _breakerBoxStatusArr[4] = 2; + _breakerBoxStatusArr[5] = 2; + _breakerBoxStatusArr[6] = 2; + _breakerBoxStatusArr[7] = 2; + _breakerBoxStatusArr[8] = 2; + _breakerBoxStatusArr[9] = 2; + _breakerBoxStatusArr[10] = 2; + _breakerBoxStatusArr[11] = 2; + _breakerBoxStatusArr[12] = 1; + _breakerBoxStatusArr[13] = 1; + _breakerBoxStatusArr[14] = 2; + _breakerBoxStatusArr[15] = 2; + _breakerBoxStatusArr[16] = 3; + _breakerBoxStatusArr[17] = 0; _v4CEE0 = 0; _v4CEE2 = 0; _v4CEE4 = 0; diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 21a4b921d1..c4108e175c 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -192,13 +192,13 @@ public: int _kateDialogCtr; int _v4CEB6; int _safeCombination; - int _v4CEC0; + int _gateStatus; int _greenDay5TalkCtr; int _v4CEC4; int _v4CEC8; int _v4CECA; int _v4CECC; - int8 _v4CECE[18]; + int8 _breakerBoxStatusArr[18]; int _v4CEE0; int _v4CEE2; int _v4CEE4; -- cgit v1.2.3 From 1e607dc22d08dd9e35c53f2168161600dfbcb89a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Nov 2011 18:19:32 +0100 Subject: TSAGE: Rename a variable using double-underscore (reserved) --- engines/tsage/sound.cpp | 14 +++++++------- engines/tsage/sound.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index b61e63236b..fb88a5ff5e 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -36,7 +36,7 @@ static SoundManager *_soundManager = NULL; SoundManager::SoundManager() { _soundManager = this; - __sndmgrReady = false; + _sndmgrReady = false; _ourSndResVersion = 0x102; _ourDrvResVersion = 0x10A; @@ -52,7 +52,7 @@ SoundManager::SoundManager() { } SoundManager::~SoundManager() { - if (__sndmgrReady) { + if (_sndmgrReady) { Common::StackLock slock(_serverDisabledMutex); g_vm->_mixer->stopAll(); @@ -83,7 +83,7 @@ SoundManager::~SoundManager() { } void SoundManager::postInit() { - if (!__sndmgrReady) { + if (!_sndmgrReady) { g_saver->addSaveNotifier(&SoundManager::saveNotifier); g_saver->addLoadNotifier(&SoundManager::loadNotifier); g_saver->addListener(this); @@ -94,7 +94,7 @@ void SoundManager::postInit() { // thread, and doesn't get too far ahead, I've left it to the AdlibSoundDriver class to // call the update method, rather than having it be called separately // g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / SOUND_FREQUENCY, NULL, "tsageSoundUpdate"); - __sndmgrReady = true; + _sndmgrReady = true; } } @@ -136,7 +136,7 @@ void SoundManager::update() { } Common::List &SoundManager::buildDriverList(bool detectFlag) { - assert(__sndmgrReady); + assert(_sndmgrReady); _availableDrivers.clear(); // Build up a list of available drivers. Currently we only implement an Adlib music @@ -549,7 +549,7 @@ void SoundManager::loadNotifier(bool postFlag) { void SoundManager::loadNotifierProc(bool postFlag) { if (!postFlag) { // Stop any currently playing sounds - if (__sndmgrReady) { + if (_sndmgrReady) { Common::StackLock slock(_serverDisabledMutex); for (Common::List::iterator i = _soundList.begin(); i != _soundList.end(); ) { @@ -569,7 +569,7 @@ void SoundManager::loadNotifierProc(bool postFlag) { void SoundManager::listenerSynchronize(Serializer &s) { s.validate("SoundManager"); - assert(__sndmgrReady && _driversDetected); + assert(_sndmgrReady && _driversDetected); if (s.getVersion() < 6) return; diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index 5802a62686..f4286565b0 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -169,7 +169,7 @@ class SoundManager : public SaveListener { private: SoundDriver *instantiateDriver(int driverNum); public: - bool __sndmgrReady; + bool _sndmgrReady; int _ourSndResVersion, _ourDrvResVersion; SynchronizedList _playList; Common::List _installedDrivers; -- 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/globals.cpp | 3 + engines/tsage/globals.h | 1 + engines/tsage/ringworld2/ringworld2_logic.cpp | 123 +++++++++++++++++++++++--- engines/tsage/ringworld2/ringworld2_logic.h | 34 ++++++- 4 files changed, 147 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index d2999a2603..d21321a201 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -380,7 +380,9 @@ void Ringworld2Globals::reset() { _v57C2C = 0; _v58CE2 = 0; Common::set_to(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); + _insetUp = 0; + // Reset fields stored in the player class _player._characterIndex = 1; _player._characterScene[1] = 100; _player._characterScene[2] = 300; @@ -396,6 +398,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v58CE2); for (int i = 0; i < MAX_CHARACTERS; ++i) s.syncAsSint16LE(_v565F1[i]); + s.syncAsSint16LE(_insetUp); } } // end of namespace Ringworld2 diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index c4108e175c..d644a02e7c 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -243,6 +243,7 @@ class Ringworld2Globals: public TsAGE2Globals { public: ASoundExt _sound1, _sound2, _sound3, _sound4; PlayStream _playStream; + int _insetUp; int _v565F5; int _v5657C; int _v57C2C; 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 61795739f8f45c5de4cfd0fe57af459146c5173c Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Wed, 16 Nov 2011 18:06:30 +0100 Subject: COMMON: Rename Common::set_to to Common::fill. This makes the name match with the name of the STL function with the same behavior. --- engines/tsage/converse.cpp | 6 +++--- engines/tsage/globals.cpp | 4 ++-- engines/tsage/graphics.cpp | 10 +++++----- engines/tsage/graphics.h | 2 +- engines/tsage/resources.cpp | 4 ++-- engines/tsage/scenes.cpp | 4 ++-- engines/tsage/sound.cpp | 8 ++++---- 7 files changed, 19 insertions(+), 19 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index d86548bd4b..31a689b80c 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -32,7 +32,7 @@ namespace TsAGE { SequenceManager::SequenceManager() : Action() { - Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL); + Common::fill(&_objectList[0], &_objectList[6], (SceneObject *)NULL); _sequenceData.clear(); _fontNum = 0; _sequenceOffset = 0; @@ -81,7 +81,7 @@ void SequenceManager::remove() { if (g_globals->_sceneObjects->contains(&_sceneText)) _sceneText.remove(); - Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL); + Common::fill(&_objectList[0], &_objectList[6], (SceneObject *)NULL); Action::remove(); } @@ -342,7 +342,7 @@ void SequenceManager::attached(EventHandler *newOwner, EventHandler *endHandler, DEALLOCATE(seqData); - Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL); + Common::fill(&_objectList[0], &_objectList[6], (SceneObject *)NULL); for (int idx = 0; idx < 6; ++idx) { _objectList[idx] = va_arg(va, SceneObject *); if (!_objectList[idx]) diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index d21321a201..540c3b6225 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -155,7 +155,7 @@ Globals::~Globals() { } void Globals::reset() { - Common::set_to(&_flags[0], &_flags[MAX_FLAGS], false); + Common::fill(&_flags[0], &_flags[MAX_FLAGS], false); g_saver->addFactory(classFactoryProc); } @@ -379,7 +379,7 @@ void Ringworld2Globals::reset() { _v565F5 = 0; _v57C2C = 0; _v58CE2 = 0; - Common::set_to(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); + Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); _insetUp = 0; // Reset fields stored in the player class diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 40654a345e..f0a5973e6b 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -81,7 +81,7 @@ GfxSurface surfaceFromRes(const byte *imgData) { if (!rleEncoded) { Common::copy(srcP, srcP + (r.width() * r.height()), destP); } else { - Common::set_to(destP, destP + (r.width() * r.height()), s._transColor); + Common::fill(destP, destP + (r.width() * r.height()), s._transColor); for (int yp = 0; yp < r.height(); ++yp) { int width = r.width(); @@ -105,7 +105,7 @@ GfxSurface surfaceFromRes(const byte *imgData) { controlVal &= 0x3f; int pixel = *srcP++; - Common::set_to(destP, destP + controlVal, pixel); + Common::fill(destP, destP + controlVal, pixel); destP += controlVal; width -= controlVal; } @@ -261,7 +261,7 @@ void GfxSurface::create(int width, int height) { } _customSurface = new Graphics::Surface(); _customSurface->create(width, height, Graphics::PixelFormat::createFormatCLUT8()); - Common::set_to((byte *)_customSurface->pixels, (byte *)_customSurface->pixels + (width * height), 0); + Common::fill((byte *)_customSurface->pixels, (byte *)_customSurface->pixels + (width * height), 0); _bounds = Rect(0, 0, width, height); } @@ -455,7 +455,7 @@ static int *scaleLine(int size, int srcSize) { int scale = PRECISION_FACTOR * size / srcSize; assert(scale >= 0); int *v = new int[size]; - Common::set_to(v, &v[size], -1); + Common::fill(v, &v[size], -1); int distCtr = PRECISION_FACTOR / 2; int *destP = v; @@ -493,7 +493,7 @@ static GfxSurface ResizeSurface(GfxSurface &src, int xSize, int ySize, int trans byte *destP = (byte *)destImage.getBasePtr(0, yp); if (vertUsage[yp] == -1) { - Common::set_to(destP, destP + xSize, transIndex); + Common::fill(destP, destP + xSize, transIndex); } else { const byte *srcP = (const byte *)srcImage.getBasePtr(0, vertUsage[yp]); diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index 06b482d7b5..dba3401700 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -292,7 +292,7 @@ public: Common::copy(src, src + size, dest); } virtual void set(byte *dest, int size, byte val) { - Common::set_to(dest, dest + size, val); + Common::fill(dest, dest + size, val); } void copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion = NULL) { _surface.setBounds(_bounds); diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index b8c8fcdeea..824f20e9b2 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -33,7 +33,7 @@ namespace TsAGE { MemoryManager::MemoryManager() { _memoryPool = new MemoryHeader*[MEMORY_POOL_SIZE]; - Common::set_to(&_memoryPool[0], &_memoryPool[MEMORY_POOL_SIZE], (MemoryHeader *)NULL); + Common::fill(&_memoryPool[0], &_memoryPool[MEMORY_POOL_SIZE], (MemoryHeader *)NULL); } MemoryManager::~MemoryManager() { @@ -67,7 +67,7 @@ uint16 MemoryManager::allocate(uint32 size) { byte *MemoryManager::allocate2(uint32 size) { uint32 idx = allocate(size); byte *result = lock(idx); - Common::set_to(result, result + size, 0); + Common::fill(result, result + size, 0); return result; } diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 5ed7c06800..6362c63bc3 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -259,7 +259,7 @@ Scene::Scene() : _sceneBounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), _sceneMode = 0; _activeScreenNumber = 0; _oldSceneBounds = Rect(4000, 4000, 4100, 4100); - Common::set_to(&_zoomPercents[0], &_zoomPercents[256], 0); + Common::fill(&_zoomPercents[0], &_zoomPercents[256], 0); } Scene::~Scene() { @@ -363,7 +363,7 @@ void Scene::loadSceneData(int sceneNum) { _priorities.load(sceneNum); // Initialize the section enabled list - Common::set_to(&_enabledSections[0], &_enabledSections[16 * 16], 0xffff); + Common::fill(&_enabledSections[0], &_enabledSections[16 * 16], 0xffff); g_globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160; g_globals->_sceneOffset.y = (_sceneBounds.top / 100) * 100; diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index fb88a5ff5e..9df5a6666b 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -798,7 +798,7 @@ void SoundManager::_sfRethinkVoiceTypes() { continue; _sfUpdateVoiceStructs(); - Common::set_to(sound->_chWork, sound->_chWork + SOUND_ARR_SIZE, false); + Common::fill(sound->_chWork, sound->_chWork + SOUND_ARR_SIZE, false); for (;;) { // Scan for sub priority @@ -1485,7 +1485,7 @@ Sound::Sound() { memset(_chNumVoices, 0, SOUND_ARR_SIZE * sizeof(int)); memset(_chSubPriority, 0, SOUND_ARR_SIZE * sizeof(int)); memset(_chFlags, 0, SOUND_ARR_SIZE * sizeof(int)); - Common::set_to(_chWork, _chWork + SOUND_ARR_SIZE, false); + Common::fill(_chWork, _chWork + SOUND_ARR_SIZE, false); memset(_channelData, 0, SOUND_ARR_SIZE * sizeof(byte *)); memset(_trkChannel, 0, SOUND_ARR_SIZE * sizeof(int)); memset(_trkState, 0, SOUND_ARR_SIZE * sizeof(int)); @@ -2557,7 +2557,7 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() { _mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); - Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false); + Common::fill(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false); memset(_channelVolume, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); memset(_v4405E, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); memset(_v44067, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); @@ -2565,7 +2565,7 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() { memset(_v44079, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); memset(_v44082, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); _v44082[ADLIB_CHANNEL_COUNT] = 0x90; - Common::set_to(_pitchBlend, _pitchBlend + ADLIB_CHANNEL_COUNT, 0x2000); + Common::fill(_pitchBlend, _pitchBlend + ADLIB_CHANNEL_COUNT, 0x2000); memset(_v4409E, 0, ADLIB_CHANNEL_COUNT * sizeof(int)); _patchData = NULL; } -- cgit v1.2.3 From 7a494ed7cdb68ce5f49c86f93d36bcd070e33a43 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 17 Nov 2011 01:05:04 +0100 Subject: TSAGE: Ringworld - Cleanup: Rename some variables --- engines/tsage/ringworld/ringworld_scenes10.cpp | 10 +++--- engines/tsage/ringworld/ringworld_scenes10.h | 2 +- engines/tsage/ringworld/ringworld_scenes5.cpp | 20 +++++------ engines/tsage/ringworld/ringworld_scenes5.h | 8 ++--- engines/tsage/ringworld/ringworld_scenes8.cpp | 46 +++++++++++++------------- engines/tsage/ringworld/ringworld_scenes8.h | 2 +- 6 files changed, 44 insertions(+), 44 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp index 5aeb127915..668e86dafb 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -709,7 +709,7 @@ void Scene9360::postInit(SceneObjectList *OwnerList) { * *--------------------------------------------------------------------------*/ Scene9400::Scene9400() { - _field1032 = 0; + _hittingAnvil = false; } void Scene9400::SceneHotspot7::doAction(int action) { @@ -767,12 +767,12 @@ void Scene9400::signal() { void Scene9400::dispatch() { if ((_object1._animateMode == 2) && (_object1._strip == 1) && (_object1._frame == 4)){ - if (_field1032 == 0) { + if (_hittingAnvil == false) { _soundHandler.play(296); - _field1032 = 1; + _hittingAnvil = true; } } else { - _field1032 = 0; + _hittingAnvil = false; } if (_action == 0) { if (g_globals->_player._position.y < 120) { @@ -826,7 +826,7 @@ void Scene9400::postInit(SceneObjectList *OwnerList) { void Scene9400::synchronize(Serializer &s) { Scene::synchronize(s); if (s.getVersion() >= 3) - s.syncAsSint16LE(_field1032); + s.syncAsSint16LE(_hittingAnvil); } /*-------------------------------------------------------------------------- diff --git a/engines/tsage/ringworld/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h index 0193d5af63..48859ab454 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.h +++ b/engines/tsage/ringworld/ringworld_scenes10.h @@ -236,7 +236,7 @@ public: NamedHotspot _hotspot5; NamedHotspot _hotspot6; ASound _soundHandler; - int _field1032; + bool _hittingAnvil; SceneHotspot7 _hotspot7; SceneHotspot8 _hotspot8; diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 2090bc5da7..49726eba2e 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -1478,7 +1478,7 @@ void Scene4025::Hole::doAction(int action) { void Scene4025::Peg::synchronize(Serializer &s) { SceneObject::synchronize(s); - s.syncAsSint16LE(_field88); + s.syncAsSint16LE(_pegId); s.syncAsSint16LE(_armStrip); } @@ -1513,35 +1513,35 @@ void Scene4025::postInit(SceneObjectList *OwnerList) { _pegPtr = _pegPtr2 = NULL; _peg1.postInit(); - _peg1._field88 = 1; + _peg1._pegId = 1; _peg1.setVisage(4025); _peg1.setStrip(2); _peg1.setFrame(1); _peg1.setPosition(Common::Point(203, 61)); _peg2.postInit(); - _peg2._field88 = 4; + _peg2._pegId = 4; _peg2.setVisage(4025); _peg2.setStrip(2); _peg2.setFrame(2); _peg2.setPosition(Common::Point(195, 57)); _peg3.postInit(); - _peg3._field88 = 0; + _peg3._pegId = 0; _peg3.setVisage(4025); _peg3.setStrip(2); _peg3.setFrame(3); _peg3.setPosition(Common::Point(202, 66)); _peg4.postInit(); - _peg4._field88 = 3; + _peg4._pegId = 3; _peg4.setVisage(4025); _peg4.setStrip(2); _peg4.setFrame(4); _peg4.setPosition(Common::Point(194, 68)); _peg5.postInit(); - _peg5._field88 = 2; + _peg5._pegId = 2; _peg5.setVisage(4025); _peg5.setStrip(1); _peg5.setFrame(5); @@ -4311,7 +4311,7 @@ void Scene4301::Action1::signal() { setDelay(20); break; case 21: - scene->_field68E = true; + scene->_puzzleDone = true; remove(); break; } @@ -4412,7 +4412,7 @@ void Scene4301::postInit(SceneObjectList *OwnerList) { Scene::postInit(); setZoomPercents(0, 100, 200, 100); - _field68E = false; + _puzzleDone = false; RING_INVENTORY._stasisBox2._sceneNumber = 1; _hotspot4.setDetails(97, 76, 127, 102, 4300, 5, 6); @@ -4432,8 +4432,8 @@ void Scene4301::postInit(SceneObjectList *OwnerList) { void Scene4301::dispatch() { if (_action) { _action->dispatch(); - } else if (_field68E) { - _field68E = 0; + } else if (_puzzleDone) { + _puzzleDone = false; g_globals->clearFlag(50); g_globals->_sceneManager._fadeMode = FADEMODE_NONE; g_globals->_sceneManager.setNewScene(4300); diff --git a/engines/tsage/ringworld/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h index 80e67755bd..c93df2a1d8 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.h +++ b/engines/tsage/ringworld/ringworld_scenes5.h @@ -215,10 +215,10 @@ class Scene4025 : public Scene { }; class Peg : public SceneObject { public: - int _field88; + int _pegId; int _armStrip; - Peg() : SceneObject() { _field88 = 0; _armStrip = 3; } + Peg() : SceneObject() { _pegId = 0; _armStrip = 3; } virtual void synchronize(Serializer &s); virtual void doAction(int action); }; @@ -682,13 +682,13 @@ public: SceneObject _hotspot1, _hotspot2, _hotspot3; Hotspot4 _hotspot4; Hotspot5 _hotspot5; - bool _field68E; + bool _puzzleDone; virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void dispatch(); virtual void synchronize(Serializer &s) { Scene::synchronize(s); - s.syncAsSint16LE(_field68E); + s.syncAsSint16LE(_puzzleDone); } }; diff --git a/engines/tsage/ringworld/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp index f8fb8b01e7..9cb85a6930 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld/ringworld_scenes8.cpp @@ -1879,12 +1879,12 @@ void Scene7700::SceneHotspot8::doAction(int action) { scene->_soundHandler.play(259); scene->_object15.setFrame(scene->_object15.getFrameCount()); scene->_object15.animate(ANIM_MODE_6, scene); - if ((scene->_field977 == 2) && (scene->_field97B == 0)) { - scene->_field979++; + if ((scene->_seatCountLeft1 == 2) && (scene->_seatCountLeft2 == 0)) { + scene->_seatCountRight++; } else { - scene->_field97B = 0; - scene->_field979 = 0; - scene->_field977 = 0; + scene->_seatCountLeft2 = 0; + scene->_seatCountRight = 0; + scene->_seatCountLeft1 = 0; } break; default: @@ -1905,26 +1905,26 @@ void Scene7700::SceneHotspot9::doAction(int action) { scene->_soundHandler.play(259); scene->_object15.setFrame(1); scene->_object15.animate(ANIM_MODE_5, scene); - if (scene->_field977 > 2) { - scene->_field97B = 0; - scene->_field979 = 0; - scene->_field977 = 0; + if (scene->_seatCountLeft1 > 2) { + scene->_seatCountLeft2 = 0; + scene->_seatCountRight = 0; + scene->_seatCountLeft1 = 0; } - if (scene->_field979 != 0) { - if (scene->_field979 != 4) { - scene->_field97B = 0; - scene->_field979 = 0; - scene->_field977 = 0; + if (scene->_seatCountRight != 0) { + if (scene->_seatCountRight != 4) { + scene->_seatCountLeft2 = 0; + scene->_seatCountRight = 0; + scene->_seatCountLeft1 = 0; } else { - scene->_field97B++; - if (scene->_field97B == 3) { + scene->_seatCountLeft2++; + if (scene->_seatCountLeft2 == 3) { g_globals->_player.disableControl(); scene->setAction(&scene->_action3); } } } else { - scene->_field977++; + scene->_seatCountLeft1++; } break; default: @@ -2315,9 +2315,9 @@ void Scene7700::postInit(SceneObjectList *OwnerList) { Scene::postInit(); setZoomPercents(100, 80, 200, 100); g_globals->setFlag(53); - _field97B = 0; - _field979 = 0; - _field977 = 0; + _seatCountLeft2 = 0; + _seatCountRight = 0; + _seatCountLeft1 = 0; _stripManager.addSpeaker(&_speakerEText); _stripManager.addSpeaker(&_speakerQText); @@ -2538,9 +2538,9 @@ Scene7700::Scene7700() { void Scene7700::synchronize(Serializer &s) { Scene::synchronize(s); if (s.getVersion() >= 3) { - s.syncAsSint16LE(_field977); - s.syncAsSint16LE(_field979); - s.syncAsSint16LE(_field97B); + s.syncAsSint16LE(_seatCountLeft1); + s.syncAsSint16LE(_seatCountRight); + s.syncAsSint16LE(_seatCountLeft2); } } diff --git a/engines/tsage/ringworld/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h index 84178c36f9..b24f220f8c 100644 --- a/engines/tsage/ringworld/ringworld_scenes8.h +++ b/engines/tsage/ringworld/ringworld_scenes8.h @@ -480,7 +480,7 @@ public: SceneHotspot11 _sceneHotspot34; SceneHotspot11 _sceneHotspot35; SceneHotspot11 _sceneHotspot36; - int _field977, _field979, _field97B; + int _seatCountLeft1, _seatCountRight, _seatCountLeft2; Scene7700(); virtual void postInit(SceneObjectList *OwnerList = NULL); -- 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/module.mk | 1 + engines/tsage/ringworld2/ringworld2_speakers.cpp | 460 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_speakers.h | 122 ++++++ 3 files changed, 583 insertions(+) create mode 100644 engines/tsage/ringworld2/ringworld2_speakers.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_speakers.h (limited to 'engines/tsage') diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 0ea8916647..99aa12a249 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -38,6 +38,7 @@ MODULE_OBJS := \ ringworld2/ringworld2_dialogs.o \ ringworld2/ringworld2_logic.o \ ringworld2/ringworld2_scenes0.o \ + ringworld2/ringworld2_speakers.o \ saveload.o \ scenes.o \ sound.o \ 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/globals.cpp | 22 +- engines/tsage/globals.h | 3 + engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 769 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 85 +++ 5 files changed, 878 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 540c3b6225..999261a32d 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -380,8 +380,22 @@ void Ringworld2Globals::reset() { _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); + _speechSubtitles = 0; _insetUp = 0; + Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); + Common::fill(&_stripManager_lookupList[0], &_stripManager_lookupList[12], 0); + _stripManager_lookupList[0] = 1; + _stripManager_lookupList[1] = 1; + _stripManager_lookupList[2] = 1; + _stripManager_lookupList[3] = 1; + _stripManager_lookupList[4] = 1; + _stripManager_lookupList[5] = 1; + _stripManager_lookupList[8] = 1; + _stripManager_lookupList[9] = 1; + _stripManager_lookupList[10] = 1; + _stripManager_lookupList[11] = 1; + // Reset fields stored in the player class _player._characterIndex = 1; _player._characterScene[1] = 100; @@ -391,13 +405,19 @@ void Ringworld2Globals::reset() { void Ringworld2Globals::synchronize(Serializer &s) { TsAGE2Globals::synchronize(s); + int i; s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_v58CE2); - for (int i = 0; i < MAX_CHARACTERS; ++i) + s.syncAsSint16LE(_speechSubtitles); + + for (i = 0; i < MAX_CHARACTERS; ++i) s.syncAsSint16LE(_v565F1[i]); + for (i = 0; i < 12; ++i) + s.syncAsByte(_stripManager_lookupList[i]); + s.syncAsSint16LE(_insetUp); } diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index d644a02e7c..29d5125593 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -243,12 +243,15 @@ class Ringworld2Globals: public TsAGE2Globals { public: ASoundExt _sound1, _sound2, _sound3, _sound4; PlayStream _playStream; + StripProxy _stripProxy; int _insetUp; int _v565F5; int _v5657C; int _v57C2C; int _v58CE2; + int _speechSubtitles; int _v565F1[4]; + byte _stripManager_lookupList[12]; virtual void reset(); virtual void synchronize(Serializer &s); 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 4c3c8f8ce3403f67d683959b947b8eb560c55bae Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 17 Nov 2011 22:04:10 +1100 Subject: TSAGE: Added new properties and stubs needed for new R2RW functionality --- engines/tsage/converse.cpp | 27 ++++++++++++++++++++++++++- engines/tsage/converse.h | 7 +++++++ engines/tsage/core.cpp | 30 +++++++++++++++++++++++++----- engines/tsage/core.h | 3 +++ engines/tsage/sound.h | 2 +- engines/tsage/user_interface.cpp | 6 +----- engines/tsage/user_interface.h | 1 - 7 files changed, 63 insertions(+), 13 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 31a689b80c..b98f6f609d 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -551,6 +551,9 @@ void Obj44::synchronize(Serializer &s) { for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) _list[idx].synchronize(s); s.syncAsUint32LE(_speakerOffset); + + if (g_vm->getGameID() == GType_Ringworld2) + s.syncAsSint16LE(_mode); } /*--------------------------------------------------------------------------*/ @@ -581,6 +584,11 @@ void StripManager::start(int stripNum, EventHandler *owner, StripCallback *callb owner->setAction(this, owner); } +void StripManager::start3(int stripNum, EventHandler *owner, byte *lookupList) { + _lookupList = lookupList; + start(stripNum, owner, NULL); +} + void StripManager::reset() { _actionIndex = 0; _delayFrames = 0; @@ -703,7 +711,12 @@ void StripManager::signal() { return; } else if (_obj44Index == 10000) { // Reached end of strip + EventHandler *endHandler = _endHandler; remove(); + + if ((g_vm->getGameID() == GType_Ringworld2) && endHandler) + endHandler->signal(); + return; } @@ -714,7 +727,19 @@ void StripManager::signal() { load(); Obj44 &obj44 = _obj44List[_obj44Index]; - _field2E8 = obj44._id; + + if (g_vm->getGameID() != GType_Ringworld2) { + _field2E8 = obj44._id; + } else { + if (obj44._id) + _field2E8 = obj44._id; + + switch (obj44._mode) { + case 1: + break; + } + } + Common::StringArray choiceList; // Build up a list of script entries diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index f82c07a7dd..db05913e08 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -185,6 +185,9 @@ public: int _field2[OBJ44_LIST_SIZE]; Obj0A _list[OBJ44_LIST_SIZE]; uint _speakerOffset; + + // Return to Ringworld specific field + int _mode; public: void load(const byte *dataP); virtual void synchronize(Serializer &s); @@ -215,6 +218,9 @@ public: Common::Array _script; StripProc _onBegin; StripProc _onEnd; + + // Ringworld 2 specific fields + byte *_lookupList; public: StripManager(); virtual ~StripManager(); @@ -225,6 +231,7 @@ public: virtual void process(Event &event); void start(int stripNum, EventHandler *owner, StripCallback *callback = NULL); + void start3(int stripNum, EventHandler *owner, byte *lookupList); void setCallback(StripCallback *callback) { _callbackObject = callback; } void setColors(int stdColor, int highlightColor) { _choiceDialog.setColors(stdColor, highlightColor); } void setFontNumber(int fontNum) { _choiceDialog.setFontNumber(fontNum); } diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 5a43a3b6c0..679fb59ef9 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1061,6 +1061,8 @@ PaletteRotation::PaletteRotation() : PaletteModifierCached() { _percent = 0; _delayCtr = 0; _frameNumber = g_globals->_events.getFrameNumber(); + _idxChange = 1; + _countdown = 0; } void PaletteRotation::synchronize(Serializer &s) { @@ -1074,9 +1076,19 @@ void PaletteRotation::synchronize(Serializer &s) { s.syncAsSint32LE(_rotationMode); s.syncAsSint32LE(_duration); s.syncBytes(&_palette[0], 256 * 3); + + if (g_vm->getGameID() == GType_Ringworld2) { + s.syncAsSint16LE(_idxChange); + s.syncAsSint16LE(_countdown); + } } void PaletteRotation::signal() { + if (_countdown > 0) { + --_countdown; + return; + } + if (_delayCtr) { uint32 frameNumber = g_globals->_events.getFrameNumber(); @@ -1098,21 +1110,24 @@ void PaletteRotation::signal() { bool flag = true; switch (_rotationMode) { case -1: - if (--_currIndex < _start) { + _currIndex -= _idxChange; + if (_currIndex < _start) { flag = decDuration(); if (flag) _currIndex = _end - 1; } break; case 1: - if (++_currIndex >= _end) { + _currIndex += _idxChange; + if (_currIndex >= _end) { flag = decDuration(); if (flag) _currIndex = _start; } break; case 2: - if (++_currIndex >= _end) { + _currIndex += _idxChange; + if (_currIndex >= _end) { flag = decDuration(); if (flag) { _currIndex = _end - 2; @@ -1121,7 +1136,8 @@ void PaletteRotation::signal() { } break; case 3: - if (--_currIndex < _start) { + _currIndex -= _idxChange; + if (_currIndex < _start) { flag = decDuration(); if (flag) { _currIndex = _start + 1; @@ -1144,7 +1160,9 @@ void PaletteRotation::signal() { void PaletteRotation::remove() { Action *action = _action; - g_system->getPaletteManager()->setPalette((const byte *)&_palette[_start * 3], _start, _end - _start); + + if (_idxChange) + g_system->getPaletteManager()->setPalette((const byte *)&_palette[_start * 3], _start, _end - _start); _scenePalette->_listeners.remove(this); @@ -2961,6 +2979,7 @@ Player::Player(): SceneObject() { // Return to Ringworld specific fields _characterIndex = 0; _oldSceneNumber = 0; + _fieldBC = 0; for (int i = 0; i < MAX_CHARACTERS; ++i) { _characterScene[i] = 0; @@ -3064,6 +3083,7 @@ void Player::synchronize(Serializer &s) { if (g_vm->getGameID() == GType_Ringworld2) { s.syncAsSint16LE(_characterIndex); s.syncAsSint16LE(_oldSceneNumber); + s.syncAsSint16LE(_fieldBC); for (int i = 0; i < MAX_CHARACTERS; ++i) { s.syncAsSint16LE(_characterScene[i]); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 95ff1c145c..b2b491ce46 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -322,6 +322,8 @@ public: int _end; int _rotationMode; int _duration; + int _idxChange; + int _countdown; public: PaletteRotation(); @@ -630,6 +632,7 @@ public: // Return to Ringworld specific fields int _characterIndex; int _oldSceneNumber; + int _fieldBC; int _characterScene[MAX_CHARACTERS]; Common::Point _characterPos[MAX_CHARACTERS]; int _characterStrip[MAX_CHARACTERS]; diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index f4286565b0..c7b07e2cc3 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -419,7 +419,7 @@ public: Sound _sound; void setFile(const Common::String &filename) {} - void play(int soundNum, EventHandler *endAction) {} + bool play(int soundNum, EventHandler *endAction) { return false; } void stop() {} void proc1() {} bool isPlaying() const { return false; } diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index 807e788cb9..ef4eb29028 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -286,7 +286,6 @@ UIElements::UIElements(): UICollection() { else _cursorVisage.setVisage(1, 5); g_saver->addLoadNotifier(&UIElements::loadNotifierProc); - _characterIndex = 0; } void UIElements::synchronize(Serializer &s) { @@ -314,9 +313,6 @@ void UIElements::synchronize(Serializer &s) { s.syncAsSint16LE(itemId); } } - - if (g_vm->getGameID() == GType_Ringworld2) - s.syncAsSint16LE(_characterIndex); } void UIElements::process(Event &event) { @@ -427,7 +423,7 @@ void UIElements::setup(const Common::Point &pt) { break; case GType_Ringworld2: // Set up the character display - _character.setup(1, 5, _characterIndex, 285, 11, 255); + _character.setup(1, 5, R2_GLOBALS._player._characterIndex, 285, 11, 255); add(&_character); break; default: diff --git a/engines/tsage/user_interface.h b/engines/tsage/user_interface.h index 94a2444e39..0fbfc5a00f 100644 --- a/engines/tsage/user_interface.h +++ b/engines/tsage/user_interface.h @@ -129,7 +129,6 @@ public: Common::Array _itemList; Visage _cursorVisage; UIElement _character; - int _characterIndex; UIElements(); virtual Common::String getClassName() { return "UIElements"; } -- 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') 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/core.cpp | 4 ++++ engines/tsage/core.h | 2 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 19 +++++++++++++++++++ engines/tsage/user_interface.cpp | 11 ++++++++++- 4 files changed, 34 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 679fb59ef9..ff7b9e3228 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -94,6 +94,10 @@ void InvObject::setCursor() { } } +bool InvObject::inInventory() const { + return _sceneNumber == ((g_vm->getGameID() != GType_Ringworld2) ? 1 : g_globals->_player._characterIndex); +} + /*--------------------------------------------------------------------------*/ InvObjectList::InvObjectList() { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index b2b491ce46..e4c7016f49 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -64,7 +64,7 @@ public: InvObject(int visage, int strip, int frame); InvObject(int visage, int strip); - bool inInventory() const { return _sceneNumber == 1; } + bool inInventory() const; void setCursor(); virtual Common::String getClassName() { return "InvObject"; } 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) { diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index ef4eb29028..2d06e268e4 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -452,7 +452,16 @@ void UIElements::add(UIElement *obj) { * Handles updating the visual inventory in the user interface */ void UIElements::updateInventory() { - _score.updateScore(); + switch (g_vm->getGameID()) { + case GType_BlueForce: + // Update the score + _score.updateScore(); + break; + case GType_Ringworld2: + _character.setFrame(R2_GLOBALS._player._characterIndex); + break; + } + updateInvList(); // Enable scroll buttons if the player has more than four items -- cgit v1.2.3 From e8aa812608a602df27e7e2536d3ee397601a0482 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 21 Nov 2011 19:38:32 +1100 Subject: TSAGE: Added explicit freeing of thumbnail surface pixels --- engines/tsage/saveload.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index db52050b03..e56968acdf 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -290,6 +290,7 @@ void Saver::writeSavegameHeader(Common::OutSaveFile *out, tSageSavegameHeader &h ::createThumbnail(thumb, (const byte *)s.pixels, SCREEN_WIDTH, SCREEN_HEIGHT, thumbPalette); Graphics::saveThumbnail(*out, *thumb); g_globals->_screenSurface.unlockSurface(); + thumb->free(); delete thumb; // Write out the save date/time -- cgit v1.2.3 From f66828a46288f04645d867d60ad25811d076bb16 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 22 Nov 2011 08:12:59 +0100 Subject: TSAGE: Blue Force - Cleanup: Rename some more functions and variables --- engines/tsage/blue_force/blueforce_scenes1.cpp | 37 ++++--- engines/tsage/blue_force/blueforce_scenes1.h | 9 +- engines/tsage/blue_force/blueforce_scenes9.cpp | 130 ++++++++++++------------- engines/tsage/blue_force/blueforce_scenes9.h | 6 +- engines/tsage/globals.cpp | 4 +- engines/tsage/globals.h | 2 +- 6 files changed, 95 insertions(+), 93 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 402d776429..f17f2d7c83 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -1082,8 +1082,8 @@ bool Scene115::Tony::startAction(CursorType action, Event &event) { BF_GLOBALS.setFlag(fTalkedToTony); } else scene->_sceneMode = 1151; - } else if (_field15F8 == 0) { - _field15F8++; + } else if (_talkToTonyCtr2 == 0) { + _talkToTonyCtr2++; scene->_sceneMode = 1171; } else scene->_sceneMode = 1172; @@ -1140,8 +1140,8 @@ bool Scene115::Tony::startAction(CursorType action, Event &event) { scene->setAction(&scene->_action2); } } - } else if (_field15F8 == 0) { - _field15F8++; + } else if (_talkToTonyCtr2 == 0) { + _talkToTonyCtr2++; if (BF_GLOBALS.getFlag(onDuty)) { scene->_sceneMode = 1182; scene->setAction(&scene->_action9); @@ -1628,7 +1628,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) { _tony.fixPriority(95); _tony.animate(ANIM_MODE_2, NULL); _tony._numFrames = 5; - _tony._field15F8 = 0; + _tony._talkToTonyCtr2 = 0; _talkToTonyCtr = 0; //Neon sign @@ -2764,12 +2764,12 @@ bool Scene180::GarageExit::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ Scene180::Scene180(): SceneExt() { - _fieldC56 = 0; + _dispatchMode = 0; } void Scene180::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_fieldC56); + s.syncAsSint16LE(_dispatchMode); } void Scene180::postInit(SceneObjectList *OwnerList) { @@ -2784,7 +2784,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) { _garageExit.setDetails(Rect(243, 93, 275, 122), 180, -1, -1, -1, 1, NULL); _gameTextSpeaker._textPos.y = 180; _stripManager.addSpeaker(&_gameTextSpeaker); - _fieldC56 = 0; + _dispatchMode = 0; setZoomPercents(121, 60, 125, 70); if ((BF_GLOBALS._bookmark == bLyleStoppedBy) && (BF_GLOBALS._dayNumber == 1)) { @@ -2874,7 +2874,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) { _vechile._moveDiff = Common::Point(40, 5); _vechile.setPosition(Common::Point(-25, 171)); - _fieldC56 = 1; + _dispatchMode = 1; BF_GLOBALS._sound1.play(29); _sceneMode = 1; @@ -2896,14 +2896,14 @@ void Scene180::postInit(SceneObjectList *OwnerList) { _vechile._frame = 5; _vechile.changeZoom(75); - _fieldC56 = 1; + _dispatchMode = 1; _vechile._moveDiff.x = 45; } else { _vechile.setVisage(444); _vechile.setStrip(2); _vechile.changeZoom(85); - _fieldC56 = 3; + _dispatchMode = 3; _vechile._moveDiff.x = 30; } @@ -2935,7 +2935,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) { void Scene180::signal() { switch (_sceneMode) { case 1: - _fieldC56 = 0; + _dispatchMode = 0; switch (BF_GLOBALS._bookmark) { case bFlashBackThree: BF_GLOBALS._bookmark = bDroppedOffLyle; @@ -2953,12 +2953,12 @@ void Scene180::signal() { setAction(&_sequenceManager, this, 1802, &_vechile, &_object1, NULL); break; case 2: - _fieldC56 = 0; + _dispatchMode = 0; BF_GLOBALS._sound1.fadeOut2(NULL); BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._driveToScene); break; case 3: - _fieldC56 = 0; + _dispatchMode = 0; BF_GLOBALS._sound1.stop(); _stripManager.start(1800, this); _sceneMode = 4; @@ -3040,7 +3040,7 @@ void Scene180::signal() { } break; case 1800: - _fieldC56 = 2; + _dispatchMode = 2; _vechile._moveDiff.x = 10; _sceneMode = 2; ADD_MOVER(_vechile, -25, 171); @@ -3079,7 +3079,7 @@ void Scene180::process(Event &event) { } void Scene180::dispatch() { - switch (_fieldC56) { + switch (_dispatchMode) { case 1: if (_vechile._mover && (_vechile._percent > 50)) _vechile.changeZoom(_vechile._percent - 1); @@ -3402,6 +3402,11 @@ void Scene190::dispatch() { } } +void Scene190::synchronize(Serializer &s) { + SceneExt::synchronize(s); + s.syncAsSint16LE(_fieldB52); +} + } // End of namespace BlueForce } // End of namespace TsAGE diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index 3424521e5a..b304c2aeaa 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -177,7 +177,7 @@ class Scene115: public SceneExt { }; class Tony: public NamedObject { public: - int _field15F8; + int _talkToTonyCtr2; virtual bool startAction(CursorType action, Event &event); }; class Object3: public NamedObject { @@ -420,7 +420,7 @@ public: GarageExit _garageExit; ASoundExt _sound1; SceneMessage _sceneMessage; - int _fieldC56; + int _dispatchMode; Scene180(); virtual void synchronize(Serializer &s); @@ -476,10 +476,7 @@ public: virtual void signal(); virtual void process(Event &event); virtual void dispatch(); - virtual void synchronize(Serializer &s) { - SceneExt::synchronize(s); - s.syncAsSint16LE(_fieldB52); - } + virtual void synchronize(Serializer &s); }; } // End of namespace BlueForce diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 5e8bc12a18..23bb8da3d6 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -797,7 +797,7 @@ bool Scene910::Lyle::startAction(CursorType action, Event &event) { else return false; } else if (action == CURSOR_TALK) { - if ((BF_GLOBALS._v4CEE0 != 0) || (BF_GLOBALS._v4CEE2 != 0)) { + if ((BF_GLOBALS._hiddenDoorStatus != 0) || (BF_GLOBALS._v4CEE2 != 0)) { scene->_stripManager.start(9100 + _field90, &BF_GLOBALS._stripProxy); if (_field90 < 1) _field90++; @@ -1074,12 +1074,12 @@ bool Scene910::PowerCord::startAction(CursorType action, Event &event) { if ((action == CURSOR_LOOK) || (action == CURSOR_TALK) || (action < CURSOR_WALK)) { if (_field90 == 1) return false; - if ((_field92 != 1) || (BF_GLOBALS._v4CEE0 == 0 )) + if ((_field92 != 1) || (BF_GLOBALS._hiddenDoorStatus == 0 )) return NamedObject::startAction(action, event); return false; } else if (action == CURSOR_USE) { if (_field90 == 0) { - if ((BF_GLOBALS._v4CEE0 == 0) || (_field92 != 1)) { + if ((BF_GLOBALS._hiddenDoorStatus == 0) || (_field92 != 1)) { BF_GLOBALS._player.disableControl(); if (_field92 == 1) { scene->_sceneSubMode = 8; @@ -1239,7 +1239,7 @@ void Scene910::BreakerBoxInset::remove() { void Scene910::Object13::synchronize(Serializer &s) { NamedObject::synchronize(s); - s.syncAsSint16LE(_field90); + s.syncAsSint16LE(_state); s.syncAsSint16LE(_mode); } @@ -1283,11 +1283,11 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { } if (_mode != 1) - BF_GLOBALS._breakerBoxStatusArr[_field90 - 1] = (_field90 + 251) % 256; + BF_GLOBALS._breakerBoxStatusArr[_state - 1] = (_state + 251) % 256; else - BF_GLOBALS._breakerBoxStatusArr[_field90 - 1] = _field90; + BF_GLOBALS._breakerBoxStatusArr[_state - 1] = _state; - switch (_field90) { + switch (_state) { case 1: if (BF_GLOBALS._v4CEE2 < 1) { if (_frame == 2) { @@ -1374,9 +1374,9 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { case 15: if ((BF_GLOBALS._v4CECA == 2) && (BF_GLOBALS._breakerBoxStatusArr[17] == 1)) { if (_frame == 7) - scene->subE83E1(); + scene->closeHiddenDoor(); else - scene->subE82BD(); + scene->openHiddenDoor(); } return true; default: @@ -1399,7 +1399,7 @@ void Scene910::Object13::setupBreaker(int x, int y, int mode, int8 frameNumber) NamedObject::postInit(); _mode = mode; scene->_breakerButtonCtr++; - _field90 = scene->_breakerButtonCtr; + _state = scene->_breakerButtonCtr; setVisage(910); if (mode == 1) { @@ -1529,7 +1529,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_USE: - switch (_frame - _field90 - 2) { + switch (_frame - _state - 2) { case 0: SceneItem::display(910, 15, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, @@ -1544,11 +1544,11 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910); } else if (BF_GLOBALS._v4CECA == 2) { BF_GLOBALS._v4CECA = 1; - BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _field90); + BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _state); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1); scene->_blackCord.setPosition(Common::Point(540, 100)); } - setFrame(_field90 + 2); + setFrame(_state + 2); break; case 2: if (BF_GLOBALS._v4CECC == 1) { @@ -1557,14 +1557,14 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910); } else if (BF_GLOBALS._v4CECC == 2) { BF_GLOBALS._v4CECC = 1; - BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _field90); + BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _state); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); scene->_yellowCord.setPosition(Common::Point(540, 100)); } - setFrame(_field90 + 2); + setFrame(_state + 2); break; case 3: - if ((_position.x - 12) - (5 * _field90) < event.mousePos.x) { + if ((_position.x - 12) - (5 * _state) < event.mousePos.x) { if (BF_GLOBALS._v4CECA == 1) { BF_GLOBALS._v4CECA = 0; BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1); @@ -1572,11 +1572,11 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { scene->_blackCord.setPosition(Common::Point(540, 100)); } else if (BF_GLOBALS._v4CECA == 2) { BF_GLOBALS._v4CECA = 1; - BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _field90); + BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _state); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1); scene->_blackCord.setPosition(Common::Point(540, 100)); } - setFrame(_field90 + 4); + setFrame(_state + 4); } else { if (BF_GLOBALS._v4CECC == 1) { BF_GLOBALS._v4CECC = 0; @@ -1584,17 +1584,17 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910); } else if (BF_GLOBALS._v4CECC == 2) { BF_GLOBALS._v4CECC = 1; - BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _field90); + BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _state); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); scene->_yellowCord.setPosition(Common::Point(540, 100)); } - setFrame(_field90 + 3); + setFrame(_state + 3); } default: break; } - BF_GLOBALS._breakerBoxStatusArr[_field90 + 15] = _frame; - if (_field90 == 0) { + BF_GLOBALS._breakerBoxStatusArr[_state + 15] = _frame; + if (_state == 0) { if (_frame == 2) BF_GLOBALS._breakerBoxStatusArr[13] = 2; else @@ -1602,7 +1602,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { } return true; case INV_HALF_YELLOW_CORD: - if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == _field90 + 2) { + if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == _state + 2) { SceneItem::display(910, 85, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, @@ -1622,22 +1622,22 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { case INV_YELLOW_CORD: if (BF_GLOBALS._v4CECC == 0) { BF_GLOBALS._v4CECC = 1; - BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, _field90 + 2); + BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, _state + 2); BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1); } else if (BF_GLOBALS._v4CECC == 1) { BF_GLOBALS._v4CECC = 2; - BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, _field90 + 2); + BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, _state + 2); scene->_yellowCord.setStrip(4); scene->_yellowCord.setFrame(2); scene->_yellowCord.setPosition(Common::Point(135, 93)); scene->_yellowCord.fixPriority(50); } - if (_frame - _field90 == 2) - setFrame(_field90 + 4); - else if (_frame - _field90 == 3) - setFrame(_field90 + 5); - BF_GLOBALS._breakerBoxStatusArr[_field90 + 15] = _frame; - if (_field90 == 0) { + if (_frame - _state == 2) + setFrame(_state + 4); + else if (_frame - _state == 3) + setFrame(_state + 5); + BF_GLOBALS._breakerBoxStatusArr[_state + 15] = _frame; + if (_state == 0) { if (_frame == 2) BF_GLOBALS._breakerBoxStatusArr[13] = 2; else @@ -1645,7 +1645,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { } return true; case INV_HALF_BLACK_CORD: - if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == _field90 + 2) { + if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == _state + 2) { SceneItem::display(910, 85, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, @@ -1656,7 +1656,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { //No break on purpose case INV_BLACK_CORD: if (BF_GLOBALS._v4CECA == 0) { - if (_field90 == 1) { + if (_state == 1) { if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForBlackCord); @@ -1668,10 +1668,10 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { } } BF_GLOBALS._v4CECA = 1; - BF_INVENTORY.setObjectScene(INV_BLACK_CORD, _field90 + 2); + BF_INVENTORY.setObjectScene(INV_BLACK_CORD, _state + 2); BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1); } else if (BF_GLOBALS._v4CECA == 1) { - if (_field90 == 1) { + if (_state == 1) { if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForBlackCord); @@ -1683,7 +1683,7 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { } } BF_GLOBALS._v4CECA = 2; - BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, _field90 + 2); + BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, _state + 2); scene->_blackCord.setStrip(4); scene->_blackCord.setFrame(1); scene->_blackCord.setPosition(Common::Point(135, 93)); @@ -1692,17 +1692,17 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { scene->_blackCord._field90 = 1; if (BF_GLOBALS._breakerBoxStatusArr[17] == 1) { if (BF_GLOBALS._breakerBoxStatusArr[14] == 2) - scene->subE83E1(); + scene->closeHiddenDoor(); else - scene->subE82BD(); + scene->openHiddenDoor(); } } - if (_frame - _field90 == 2) - setFrame(_field90 + 3); - else if (_frame - _field90 == 4) - setFrame(_field90 + 5); - BF_GLOBALS._breakerBoxStatusArr[_field90 + 15] = _frame; - if (_field90 == 0) { + if (_frame - _state == 2) + setFrame(_state + 3); + else if (_frame - _state == 4) + setFrame(_state + 5); + BF_GLOBALS._breakerBoxStatusArr[_state + 15] = _frame; + if (_state == 0) { if (_frame == 2) BF_GLOBALS._breakerBoxStatusArr[13] = 2; else @@ -1716,10 +1716,10 @@ bool Scene910::BlackPlug::startAction(CursorType action, Event &event) { void Scene910::BlackPlug::init(int x, int y, int arg8, int8 argA) { NamedObject::postInit(); - _field90 = arg8; + _state = arg8; _mode = argA; setVisage(910); - if (_field90 == 0) + if (_state == 0) setStrip(7); else setStrip(3); @@ -1776,9 +1776,9 @@ bool Scene910::PowerButton::startAction(CursorType action, Event &event) { _object32.setFrame(7); if (BF_GLOBALS._v4CECA == 2) { if (BF_GLOBALS._breakerBoxStatusArr[14] == 2) - scene->subE83E1(); + scene->closeHiddenDoor(); else - scene->subE82BD(); + scene->openHiddenDoor(); } } else { scene->_sound1.release(); @@ -1878,7 +1878,7 @@ bool Scene910::Item3::startAction(CursorType action, Event &event) { } bool Scene910::Item9::startAction(CursorType action, Event &event) { - if (BF_GLOBALS._v4CEE0 == 0) + if (BF_GLOBALS._hiddenDoorStatus == 0) return NamedHotspot::startAction(action, event); else return false; @@ -1905,7 +1905,7 @@ bool Scene910::Item15::startAction(CursorType action, Event &event) { bool Scene910::Item16::startAction(CursorType action, Event &event) { Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene; - if ((BF_GLOBALS._v4CEE0 == 0) || (BF_GLOBALS._v4CEE2 != 0)) + if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._v4CEE2 != 0)) return false; if (BF_GLOBALS._player._visage == 1911) { @@ -2077,7 +2077,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._breakerBoxStatusArr[16] = 4; BF_GLOBALS._breakerBoxStatusArr[17] = 1; BF_GLOBALS._v4CECA = 2; - BF_GLOBALS._v4CEE0 = 1; + BF_GLOBALS._hiddenDoorStatus = 1; _yellowCord.setPosition(Common::Point(291, -30)); BF_GLOBALS._v4CECC = 0; } @@ -2195,7 +2195,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._v4CEC8 == 0) _object5.hide(); - if (BF_GLOBALS._v4CEE0 == 0) { + if (BF_GLOBALS._hiddenDoorStatus == 0) { _object5.setFrame(1); _fakeWall.setPosition(Common::Point(292, 107)); if (BF_GLOBALS._v4CECC != 2) @@ -2377,7 +2377,7 @@ void Scene910::signal() { BF_GLOBALS._player.enableControl(); break; case 9101: - if ((BF_GLOBALS._v4CEE0 == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._breakerBoxStatusArr[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910)) + if ((BF_GLOBALS._hiddenDoorStatus == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._breakerBoxStatusArr[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910)) BF_GLOBALS.clearFlag(fGotPointsForSearchingDA); else BF_GLOBALS.setFlag(fGotPointsForSearchingDA); @@ -2621,7 +2621,7 @@ void Scene910::signal() { case 9130: _lyle.setAction(&_sequenceManager2, NULL, 9133, &_lyle, NULL); BF_GLOBALS._breakerBoxStatusArr[14] = 3; - subE82BD(); + openHiddenDoor(); BF_GLOBALS._walkRegions.disableRegion(15); break; case 9132: @@ -2728,7 +2728,7 @@ void Scene910::process(Event &event) { if (_item17._bounds.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW); BF_GLOBALS._events.setCursor(surface); - } else if ((BF_GLOBALS._v4CEE0 == 0) || (BF_GLOBALS._v4CEE2 != 0)) { + } else if ((BF_GLOBALS._hiddenDoorStatus == 0) || (BF_GLOBALS._v4CEE2 != 0)) { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } else if (!_item16._bounds.contains(event.mousePos)) { @@ -2811,14 +2811,14 @@ void Scene910::dispatch() { setAction(&_sequenceManager1, this, 9101, &BF_GLOBALS._player, NULL); } else { _sceneMode = 9146; - if (BF_GLOBALS._v4CEE0 == 0) + if (BF_GLOBALS._hiddenDoorStatus == 0) setAction(&_sequenceManager1, this, 9146, &BF_GLOBALS._player, NULL); else setAction(&_sequenceManager1, this, 9145, &BF_GLOBALS._player, NULL); } } - if ((BF_GLOBALS._player._position.x > 265) && (BF_GLOBALS._player._position.y < 102) && (BF_GLOBALS._v4CEE0 != 0) && (_sceneMode != 9143)) { + if ((BF_GLOBALS._player._position.x > 265) && (BF_GLOBALS._player._position.y < 102) && (BF_GLOBALS._hiddenDoorStatus != 0) && (_sceneMode != 9143)) { BF_GLOBALS._player.disableControl(); if (BF_GLOBALS.getFlag(gunDrawn)) { _sceneSubMode = 3; @@ -2838,7 +2838,7 @@ void Scene910::dispatch() { } } - if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._v4CEE0 != 0) && (BF_GLOBALS._v4CEE2 == 0)) { + if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._hiddenDoorStatus != 0) && (BF_GLOBALS._v4CEE2 == 0)) { BF_GLOBALS._player.disableControl(); _shadow.remove(); _nico.remove(); @@ -2851,7 +2851,7 @@ void Scene910::dispatch() { } void Scene910::checkGun() { - if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0) && (BF_GLOBALS._v4CEE0 != 0)) + if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0) && (BF_GLOBALS._hiddenDoorStatus != 0)) SceneItem::display(910, 70, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, @@ -2861,15 +2861,15 @@ void Scene910::checkGun() { SceneExt::checkGun(); } -void Scene910::subE82BD() { - if (BF_GLOBALS._v4CEE0 != 0) +void Scene910::openHiddenDoor() { + if (BF_GLOBALS._hiddenDoorStatus != 0) return; if (! BF_GLOBALS.getFlag(fGotPointsForLightsOn)) { T2_GLOBALS._uiElements.addScore(50); BF_GLOBALS.setFlag(fGotPointsForLightsOn); } - BF_GLOBALS._v4CEE0 = 1; + BF_GLOBALS._hiddenDoorStatus = 1; BF_GLOBALS._player.disableControl(); BF_GLOBALS._walkRegions.enableRegion(10); _sceneMode = 9114; @@ -2880,14 +2880,14 @@ void Scene910::subE82BD() { setAction(&_sequenceManager1, this, 9114, &_fakeWall, &_object5, NULL); } -void Scene910::subE83E1() { - if (BF_GLOBALS._v4CEE0 != 0) { +void Scene910::closeHiddenDoor() { + if (BF_GLOBALS._hiddenDoorStatus != 0) { _fakeWall.show(); if ((BF_GLOBALS._bookmark == bEndDayThree) && (!BF_GLOBALS.getFlag(fGotPointsForOpeningDoor))) { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForOpeningDoor); } - BF_GLOBALS._v4CEE0 = 0; + BF_GLOBALS._hiddenDoorStatus = 0; BF_GLOBALS._walkRegions.disableRegion(10); BF_GLOBALS._player.disableControl(); _sceneMode = 9115; diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h index 358f0b42e0..54360721dc 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.h +++ b/engines/tsage/blue_force/blueforce_scenes9.h @@ -170,7 +170,7 @@ class Scene910: public PalettedScene { class Object13: public NamedObject { protected: - int _field90, _mode; + int _state, _mode; public: void setupBreaker(int x, int y, int mode, int8 frameNumber); virtual void synchronize(Serializer &s); @@ -295,8 +295,8 @@ public: virtual void process(Event &event); virtual void dispatch(); virtual void checkGun(); - void subE82BD(); - void subE83E1(); + void openHiddenDoor(); + void closeHiddenDoor(); }; class Scene920: public SceneExt { diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 999261a32d..3400c0fa68 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -246,7 +246,7 @@ void BlueForceGlobals::synchronize(Serializer &s) { s.syncAsSint16LE(_v4CECC); for (int i = 0; i < 18; i++) s.syncAsByte(_breakerBoxStatusArr[i]); - s.syncAsSint16LE(_v4CEE0); + s.syncAsSint16LE(_hiddenDoorStatus); s.syncAsSint16LE(_v4CEE2); s.syncAsSint16LE(_v4CEE4); s.syncAsSint16LE(_v4CEE6); @@ -319,7 +319,7 @@ void BlueForceGlobals::reset() { _breakerBoxStatusArr[15] = 2; _breakerBoxStatusArr[16] = 3; _breakerBoxStatusArr[17] = 0; - _v4CEE0 = 0; + _hiddenDoorStatus = 0; _v4CEE2 = 0; _v4CEE4 = 0; _v4CEE6 = 0; diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 29d5125593..93b1c53b12 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -199,7 +199,7 @@ public: int _v4CECA; int _v4CECC; int8 _breakerBoxStatusArr[18]; - int _v4CEE0; + int _hiddenDoorStatus; int _v4CEE2; int _v4CEE4; int _v4CEE6; -- cgit v1.2.3 From 4b931446ee5d03c9899d123da56b947272e1c7d6 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 22 Nov 2011 18:56:50 +0100 Subject: TSAGE: Blue Force - Clean up: Replace some magic numbers by enum --- engines/tsage/blue_force/blueforce_scenes9.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 23bb8da3d6..464665bafe 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -844,7 +844,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { scene->_stripManager.start(9103 + BF_GLOBALS._v4CEE6, &BF_GLOBALS._stripProxy); return true; break; - case 1: + case INV_COLT45: if (BF_GLOBALS._v4CEE2 > 1) { if (BF_GLOBALS._v4CEE2 != 4) { if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())) { @@ -876,8 +876,8 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { return NamedObject::startAction(action, event); } break; - case 39: - case 53: + case INV_BADGE: + case INV_ID: if (BF_GLOBALS._v4CEE2 >= 4) return NamedObject::startAction(action, event); @@ -892,7 +892,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { return true; break; - case 57: + case INV_YELLOW_CORD: if (BF_GLOBALS._v4CEE2 < 4) { BF_GLOBALS._player.disableControl(); scene->_yellowCord.fixPriority(121); @@ -914,7 +914,7 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { return true; } break; - case 58: + case INV_HALF_YELLOW_CORD: if (BF_GLOBALS._v4CECC == 1) SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, @@ -929,8 +929,8 @@ bool Scene910::Nico::startAction(CursorType action, Event &event) { SET_EXT_FGCOLOR, 13, LIST_END); return true; break; - case 59: - case 61: + case INV_BLACK_CORD: + case INV_HALF_BLACK_CORD: SceneItem::display(910, 83, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, @@ -965,7 +965,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { scene->_stripManager.start(9107 + BF_GLOBALS._v4CEE8, &BF_GLOBALS._stripProxy); return true; break; - case 1: + case INV_COLT45: if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(fGunLoaded)) && (BF_GLOBALS.getHasBullets())){ BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._v4CEE4 == 2) { @@ -983,7 +983,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { } else return NamedObject::startAction(action, event); break; - case 57: + case INV_YELLOW_CORD: if (BF_GLOBALS._v4CECC == 1) { SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, @@ -1012,7 +1012,7 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { } } break; - case 58: + case INV_HALF_YELLOW_CORD: if (BF_GLOBALS._v4CECC == 1) { SceneItem::display(910, 84, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, @@ -1031,8 +1031,8 @@ bool Scene910::Stuart::startAction(CursorType action, Event &event) { return true; } break; - case 59: - case 61: + case INV_BLACK_CORD: + case INV_HALF_BLACK_CORD: SceneItem::display(910, 83, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, -- cgit v1.2.3 From e01a188df4457d08c767b079e62caf6cedd41234 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 23 Nov 2011 00:13:34 +0100 Subject: TSAGE: Blue Force - Cleanup : rename unknown variables and functions in scene 930 --- engines/tsage/blue_force/blueforce_scenes9.cpp | 94 ++++++++++++++------------ engines/tsage/blue_force/blueforce_scenes9.h | 16 ++--- 2 files changed, 57 insertions(+), 53 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 464665bafe..6e007158c0 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -3115,6 +3115,7 @@ bool Scene930::Object1::startAction(CursorType action, Event &event) { } bool Scene930::Object2::startAction(CursorType action, Event &event) { +// Small box Inset Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) @@ -3136,13 +3137,13 @@ bool Scene930::Object3::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return NamedObject::startAction(action, event); - if (scene->_v141C == 0) + if (!scene->_bootInsetDisplayed) scene->setAction(&scene->_action1); return true; } bool Scene930::Object4::startAction(CursorType action, Event &event) { -// Boot window +// Boot inset Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (action) { @@ -3165,7 +3166,7 @@ bool Scene930::Object4::startAction(CursorType action, Event &event) { if (BF_GLOBALS._bookmark >= bFlashBackTwo) { _lookLineNum = 71; NamedObject::startAction(action, event); - scene->subF3D6F(); + scene->ShowSoleInset(); remove(); } else NamedObject::startAction(action, event); @@ -3177,9 +3178,10 @@ bool Scene930::Object4::startAction(CursorType action, Event &event) { } void Scene930::Object4::remove() { +// Boots inset Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; - if (scene->_v141C && !BF_GLOBALS._sceneObjects->contains(&scene->_object5)) { + if (scene->_bootInsetDisplayed && !BF_GLOBALS._sceneObjects->contains(&scene->_soleInset)) { scene->_boots.setAction(&scene->_action3); } @@ -3187,6 +3189,7 @@ void Scene930::Object4::remove() { } bool Scene930::Object5::startAction(CursorType action, Event &event) { +// Boots sole inset Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene; switch (action) { @@ -3195,9 +3198,9 @@ bool Scene930::Object5::startAction(CursorType action, Event &event) { case CURSOR_USE: if (BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) return NamedObject::startAction(action, event); - if (scene->_v141A == 0) { + if (!scene->_soleOpened) { animate(ANIM_MODE_4, getFrameCount() - 1, 1, NULL); - scene->_v141A = 1; + scene->_soleOpened = 1; _lookLineNum = 76; _useLineNum = 78; } else { @@ -3242,7 +3245,7 @@ void Scene930::Action1::signal() { case 0: setDelay(10); BF_GLOBALS._player.disableControl(); - scene->_v141C = 1; + scene->_bootInsetDisplayed = 1; break; case 1: { Common::Point pt(50, 142); @@ -3266,7 +3269,7 @@ void Scene930::Action1::signal() { BF_GLOBALS._player.animate(ANIM_MODE_5, this); break; case 5: - scene->showBootWindow(); + scene->showBootInset(); if (!BF_GLOBALS.getFlag(fGotPointsForCPU)) { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fGotPointsForCPU); @@ -3302,7 +3305,7 @@ void Scene930::Action2::signal() { SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); - scene->subF3C07(); + scene->ShowBoxInset(); BF_GLOBALS._player.enableControl(); remove(); break; @@ -3328,7 +3331,7 @@ void Scene930::Action3::signal() { BF_GLOBALS._player.setVisage(368); BF_GLOBALS._player.setStrip(6); BF_GLOBALS._player.setFrame(1); - scene->_v141C = 0; + scene->_bootInsetDisplayed = 0; remove(); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.enableControl(); @@ -3346,8 +3349,8 @@ void Scene930::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._dayNumber == 0) BF_GLOBALS._dayNumber = 1; setZoomPercents(83, 75, 140, 100); - _v141A = 0; - _v141C = 0; + _soleOpened = 0; + _bootInsetDisplayed = 0; if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) != 1) { _box.postInit(); _box.setVisage(930); @@ -3398,7 +3401,8 @@ void Scene930::postInit(SceneObjectList *OwnerList) { _sceneMode = 0; setAction(&_sequenceManager1, this, 9300, &BF_GLOBALS._player, NULL); } else { - _v141C = 1; + // After flashback + _bootInsetDisplayed = 1; BF_GLOBALS._player.animate(ANIM_MODE_NONE); BF_GLOBALS._player.setPosition(Common::Point(50, 142)); BF_GLOBALS._player.setVisage(931); @@ -3408,7 +3412,7 @@ void Scene930::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.enableControl(); BF_GLOBALS._player.changeZoom(110); _boots.setFrame(2); - showBootWindow(); + showBootInset(); } } @@ -3446,49 +3450,49 @@ void Scene930::dispatch() { SceneExt::dispatch(); } -void Scene930::showBootWindow() { - _bootsWindow.postInit(); - _bootsWindow.setVisage(930); - _bootsWindow.setStrip(3); - _bootsWindow.setFrame2(1); - _bootsWindow.fixPriority(260); - _bootsWindow.setPosition(Common::Point(147, 128)); - _bootsWindow.setDetails(930, 69, 70, 93); +void Scene930::showBootInset() { + _bootsInset.postInit(); + _bootsInset.setVisage(930); + _bootsInset.setStrip(3); + _bootsInset.setFrame2(1); + _bootsInset.fixPriority(260); + _bootsInset.setPosition(Common::Point(147, 128)); + _bootsInset.setDetails(930, 69, 70, 93); } -void Scene930::subF3C07() { - _object2.postInit(); - _object2.setVisage(930); - _object2.setStrip(1); - _object2.setFrame2(2); - _object2.fixPriority(260); - _object2.setPosition(Common::Point(147, 128)); - _object2.setDetails(930, 73, 74, 75); +void Scene930::ShowBoxInset() { + _boxInset.postInit(); + _boxInset.setVisage(930); + _boxInset.setStrip(1); + _boxInset.setFrame2(2); + _boxInset.fixPriority(260); + _boxInset.setPosition(Common::Point(147, 128)); + _boxInset.setDetails(930, 73, 74, 75); } -void Scene930::subF3D6F() { - _object5.postInit(); - _object5.setVisage(930); - _object5.setStrip(3); +void Scene930::ShowSoleInset() { + _soleInset.postInit(); + _soleInset.setVisage(930); + _soleInset.setStrip(3); if (BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) { - _object5.setFrame(_object5.getFrameCount()); - _object5.setDetails(930, 92, 77, -1); - } else if (_v141A == 0) { - _object5.setFrame(2); - _object5.setDetails(930, 93, 77, -1); + _soleInset.setFrame(_soleInset.getFrameCount()); + _soleInset.setDetails(930, 92, 77, -1); + } else if (!_soleOpened) { + _soleInset.setFrame(2); + _soleInset.setDetails(930, 93, 77, -1); } else { - _object5.setFrame(_object5.getFrameCount()); - _object5.setDetails(930, 76, 77, 78); + _soleInset.setFrame(_soleInset.getFrameCount()); + _soleInset.setDetails(930, 76, 77, 78); } - _object5.fixPriority(260); - _object5.setPosition(Common::Point(147, 128)); + _soleInset.fixPriority(260); + _soleInset.setPosition(Common::Point(147, 128)); } void Scene930::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_v141A); - s.syncAsSint16LE(_v141C); + s.syncAsSint16LE(_soleOpened); + s.syncAsSint16LE(_bootInsetDisplayed); } /*-------------------------------------------------------------------------- diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h index 54360721dc..22e8854163 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.h +++ b/engines/tsage/blue_force/blueforce_scenes9.h @@ -378,16 +378,16 @@ class Scene930: public PalettedScene { virtual void signal(); }; - void showBootWindow(); - void subF3C07(); - void subF3D6F(); + void showBootInset(); + void ShowBoxInset(); + void ShowSoleInset(); public: SequenceManager _sequenceManager1; Object1 _box; - Object2 _object2; + Object2 _boxInset; Object3 _boots; - Object4 _bootsWindow; - Object5 _object5; + Object4 _bootsInset; + Object5 _soleInset; Item1 _item1; NamedHotspot _item2; @@ -417,8 +417,8 @@ public: SpeakerGameText gameTextSpeaker; - int _v141A; - int _v141C; + bool _soleOpened; + int _bootInsetDisplayed; virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); -- 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') 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/events.h | 3 + engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_scenes0.cpp | 154 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 37 ++++++ 4 files changed, 197 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 2ffa862ca6..541da00147 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -92,6 +92,9 @@ enum CursorType { R2_43 = 43, R2_44 = 44, R2_45 = 45, R2_46 = 46, R2_47 = 47, R2_48 = 48, R2_49 = 49, R2_50 = 50, R2_51 = 51, R2_52 = 52, + // Ringworld 2 cursors + CURSOR_3 = 3, CURSOR_9 = 9, CURSOR_10 = 10, + // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, CURSOR_1000 = 0x1000, CURSOR_PRINTER = 0x4000, CURSOR_EXIT = 0x7004, CURSOR_9999 = 9999, 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 233b4541a9697dd1e8393d321340d209659cd8a5 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 23 Nov 2011 08:55:20 +0100 Subject: TSAGE: Blue Force - Rename another variable, add a comment about a useless (?) variable --- engines/tsage/blue_force/blueforce_scenes0.h | 1 + engines/tsage/blue_force/blueforce_scenes9.cpp | 12 +++++++----- engines/tsage/blue_force/blueforce_scenes9.h | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 29adec7e00..9b0bf556f4 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -170,6 +170,7 @@ public: int _sceneNumber; int _visage; CursorType _cursorId; + // TODO: Check if really useless in original bool _field1222; Scene60(); diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index 6e007158c0..ea54bf6b1d 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -180,6 +180,7 @@ bool Scene900::Lyle::startAction(CursorType action, Event &event) { if (action == CURSOR_TALK) { if (!_action) { if (scene->_dog._flag) { + // Dog is no longer there if (BF_GLOBALS._gateStatus == 0) scene->_stripManager.start(9004, &BF_GLOBALS._stripProxy); else { @@ -192,10 +193,11 @@ bool Scene900::Lyle::startAction(CursorType action, Event &event) { scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy); } } else { - if (scene->_field1974) + // Dog is there + if (scene->_lyleDialogCtr) scene->_stripManager.start(9003, &BF_GLOBALS._stripProxy); else { - ++scene->_field1974; + ++scene->_lyleDialogCtr; scene->_stripManager.start(9002, &BF_GLOBALS._stripProxy); } } @@ -416,7 +418,7 @@ void Scene900::Action4::signal() { /*--------------------------------------------------------------------------*/ Scene900::Scene900(): PalettedScene() { - _field1974 = _field1976 = 0; + _lyleDialogCtr = _field1976 = 0; } void Scene900::postInit(SceneObjectList *OwnerList) { @@ -425,7 +427,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._sceneManager._previousScene == 910) BF_GLOBALS._sound1.changeSound(91); - _field1974 = 0; + _lyleDialogCtr = 0; _field1976 = 0; T2_GLOBALS._uiElements._active = true; BF_GLOBALS.clearFlag(fCanDrawGun); @@ -718,7 +720,7 @@ void Scene900::dispatch() { void Scene900::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field1974); + s.syncAsSint16LE(_lyleDialogCtr); s.syncAsSint16LE(_field1976); } diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h index 22e8854163..9ae542c21d 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.h +++ b/engines/tsage/blue_force/blueforce_scenes9.h @@ -110,7 +110,7 @@ public: Action2 _action2; Action3 _action3; Action4 _action4; - int _field1974; + int _lyleDialogCtr; int _field1976; Scene900(); -- 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/core.cpp | 7 ++----- engines/tsage/core.h | 3 +-- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 14 +++++++------- 3 files changed, 10 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index ff7b9e3228..b991e4677b 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2982,13 +2982,12 @@ Player::Player(): SceneObject() { // Return to Ringworld specific fields _characterIndex = 0; - _oldSceneNumber = 0; - _fieldBC = 0; for (int i = 0; i < MAX_CHARACTERS; ++i) { _characterScene[i] = 0; _characterStrip[i] = 0; _characterFrame[i] = 0; + _oldCharacterScene[i] = 0; } } @@ -3086,11 +3085,9 @@ void Player::synchronize(Serializer &s) { if (g_vm->getGameID() == GType_Ringworld2) { s.syncAsSint16LE(_characterIndex); - s.syncAsSint16LE(_oldSceneNumber); - s.syncAsSint16LE(_fieldBC); - for (int i = 0; i < MAX_CHARACTERS; ++i) { s.syncAsSint16LE(_characterScene[i]); + s.syncAsSint16LE(_oldCharacterScene[i]); s.syncAsSint16LE(_characterPos[i].x); s.syncAsSint16LE(_characterPos[i].y); s.syncAsSint16LE(_characterStrip[i]); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index e4c7016f49..8a2e733549 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -631,9 +631,8 @@ public: // Return to Ringworld specific fields int _characterIndex; - int _oldSceneNumber; - int _fieldBC; int _characterScene[MAX_CHARACTERS]; + int _oldCharacterScene[MAX_CHARACTERS]; Common::Point _characterPos[MAX_CHARACTERS]; int _characterStrip[MAX_CHARACTERS]; int _characterFrame[MAX_CHARACTERS]; 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/events.h | 2 +- engines/tsage/globals.cpp | 6 + engines/tsage/globals.h | 1 + engines/tsage/module.mk | 1 + engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 686 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes2.h | 88 +++ 7 files changed, 785 insertions(+), 2 deletions(-) create mode 100644 engines/tsage/ringworld2/ringworld2_scenes2.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_scenes2.h (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 541da00147..f17923a4fa 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -93,7 +93,7 @@ enum CursorType { R2_50 = 50, R2_51 = 51, R2_52 = 52, // Ringworld 2 cursors - CURSOR_3 = 3, CURSOR_9 = 9, CURSOR_10 = 10, + CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 3400c0fa68..ad1ae04be2 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -377,6 +377,8 @@ void Ringworld2Globals::reset() { // Reset fields _v5657C = 0; _v565F5 = 0; + for (int i = 0; i < 14; i++) + _v56605[i] = 0; _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); @@ -415,6 +417,10 @@ void Ringworld2Globals::synchronize(Serializer &s) { for (i = 0; i < MAX_CHARACTERS; ++i) s.syncAsSint16LE(_v565F1[i]); + + for (i = 0; i < 14; ++i) + s.syncAsByte(_v56605[i]); + for (i = 0; i < 12; ++i) s.syncAsByte(_stripManager_lookupList[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 93b1c53b12..e3c6f5cbc7 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -247,6 +247,7 @@ public: int _insetUp; int _v565F5; int _v5657C; + byte _v56605[14]; int _v57C2C; int _v58CE2; int _speechSubtitles; diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 99aa12a249..44f808ba8e 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -38,6 +38,7 @@ MODULE_OBJS := \ ringworld2/ringworld2_dialogs.o \ ringworld2/ringworld2_logic.o \ ringworld2/ringworld2_scenes0.o \ + ringworld2/ringworld2_scenes2.o \ ringworld2/ringworld2_speakers.o \ saveload.o \ scenes.o \ 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/events.h | 3 +- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 241 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes2.h | 2 + 3 files changed, 241 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index f17923a4fa..8bd4a2befd 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -93,7 +93,8 @@ enum CursorType { R2_50 = 50, R2_51 = 51, R2_52 = 52, // Ringworld 2 cursors - CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, + CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, CURSOR_13 = 13, CURSOR_14 = 14, + CURSOR_15 = 15, CURSOR_16 = 16, // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, 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') 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') 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 a78b2d777d98e494b988843bfd9694c58c6c6018 Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Sat, 26 Nov 2011 13:33:42 +0100 Subject: JANITORIAL: Remove extra semicolons. --- engines/tsage/core.h | 2 +- engines/tsage/sound.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 8a2e733549..d55352319f 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -129,7 +129,7 @@ public: virtual void dispatch(); virtual void setAction(Action *action) { setAction(action, NULL); } virtual void setAction(Action *action, EventHandler *endHandler, ...); - virtual void destroy() {}; + virtual void destroy() {} }; class Action : public EventHandler { diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h index c7b07e2cc3..77d1f3d3ac 100644 --- a/engines/tsage/sound.h +++ b/engines/tsage/sound.h @@ -87,7 +87,7 @@ public: int _driverResID; public: SoundDriver(); - virtual ~SoundDriver() {}; + virtual ~SoundDriver() {} const Common::String &getShortDriverDescription() { return _shortDescription; } const Common::String &getLongDriverDescription() { return _longDescription; } -- cgit v1.2.3 From 5518721a17e751a2ac6deefe56ef0ce446f184ab Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sun, 27 Nov 2011 13:59:10 +0100 Subject: TSAGE: Work around some uninitialized use warnings They were false positives, but easy to work around. --- engines/tsage/blue_force/blueforce_scenes3.cpp | 2 +- engines/tsage/core.cpp | 2 +- engines/tsage/globals.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 1dea7f7687..a63f45d8df 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -4350,7 +4350,7 @@ void Scene360::Action1::signal() { void Scene360::synchronize(Serializer &s) { SceneExt::synchronize(s); if (s.getVersion() < 9) { - int tmpVar; + int tmpVar = 0; s.syncAsSint16LE(tmpVar); } } diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index b991e4677b..266d39a907 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -3710,7 +3710,7 @@ int WalkRegions::indexOf(const Common::Point &pt, const Common::List *index void WalkRegions::synchronize(Serializer &s) { // Synchronise the list of disabled regions as a list of values terminated with a '-1' - int regionId; + int regionId = 0; if (s.isLoading()) { _disabledRegions.clear(); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index ad1ae04be2..0b59fd4e36 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -230,7 +230,7 @@ void BlueForceGlobals::synchronize(Serializer &s) { s.syncAsSint16LE(_dayNumber); if (s.getVersion() < 9) { - int tmpVar; + int tmpVar = 0; s.syncAsSint16LE(tmpVar); } s.syncAsSint16LE(_tonyDialogCtr); -- 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') 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') 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') 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 29fb48b74b64752b712c2b0b2a15f6ff7dd33716 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 28 Nov 2011 21:35:07 +0100 Subject: TSAGE: Ringworld - Cleanup: Remove useless include --- engines/tsage/ringworld/ringworld_scenes10.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp index 668e86dafb..f9a8e7996a 100644 --- a/engines/tsage/ringworld/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld/ringworld_scenes10.cpp @@ -20,7 +20,6 @@ * */ -#include "graphics/cursorman.h" #include "tsage/ringworld/ringworld_scenes10.h" #include "tsage/scenes.h" #include "tsage/tsage.h" -- 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') 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 17d5b0d28d626dfcaf538feb7d400e30f7c93376 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 28 Nov 2011 23:07:06 +0100 Subject: TSAGE: R2R - Forget a file in previous commit --- engines/tsage/events.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 8bd4a2befd..37f8951cdd 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -93,8 +93,8 @@ enum CursorType { R2_50 = 50, R2_51 = 51, R2_52 = 52, // Ringworld 2 cursors - CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, CURSOR_13 = 13, CURSOR_14 = 14, - CURSOR_15 = 15, CURSOR_16 = 16, + CURSOR_2 = 2, CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, + CURSOR_13 = 13, CURSOR_14 = 14, CURSOR_15 = 15, CURSOR_16 = 16, // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, -- 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/events.cpp | 17 +++++++++++ engines/tsage/events.h | 6 ++-- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 +-- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 40 +++++++++++++------------ 4 files changed, 44 insertions(+), 23 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 2c4efe5640..7e2ab71f38 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -253,6 +253,23 @@ void EventsClass::setCursor(CursorType cursorType) { break; } break; + + // Ringworld 2 specific cursors + case EXITCURSOR_N: + case EXITCURSOR_S: + case EXITCURSOR_W: + case EXITCURSOR_E: + case EXITCURSOR_LEFT_HAND: + case CURSOR_INVALID: + case EXITCURSOR_NE: + case EXITCURSOR_SE: + case EXITCURSOR_SW: + case EXITCURSOR_NW: + case SHADECURSOR_UP: + case SHADECURSOR_DOWN: + case SHADECURSOR_HAND: + cursor = g_resourceManager->getSubResource(5, 1, cursorType - R2CURSORS_START, &size); + break; } // Decode the cursor diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 37f8951cdd..1942c98901 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -93,8 +93,10 @@ enum CursorType { R2_50 = 50, R2_51 = 51, R2_52 = 52, // Ringworld 2 cursors - CURSOR_2 = 2, CURSOR_3 = 3, CURSOR_7 = 7, CURSOR_8 = 8, CURSOR_9 = 9, CURSOR_10 = 10, - CURSOR_13 = 13, CURSOR_14 = 14, CURSOR_15 = 15, CURSOR_16 = 16, + R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009, + EXITCURSOR_E = 0x800A, EXITCURSOR_LEFT_HAND = 0x800B, CURSOR_INVALID = 0x800C, + EXITCURSOR_NE = 0x800D, EXITCURSOR_SE = 0x800E, EXITCURSOR_SW = 0x800F, EXITCURSOR_NW = 0x8010, + SHADECURSOR_UP = 0x8011, SHADECURSOR_DOWN = 0x8012, SHADECURSOR_HAND = 0x8013, // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, 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 33859682ba273ce23504237c6b571d820276d1ae Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 1 Dec 2011 21:54:36 +1100 Subject: TSAGE: Change the active cursor Id when R2R cursor is set --- engines/tsage/events.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 7e2ab71f38..ac08997563 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -268,6 +268,7 @@ void EventsClass::setCursor(CursorType cursorType) { case SHADECURSOR_UP: case SHADECURSOR_DOWN: case SHADECURSOR_HAND: + _currentCursor = cursorType; cursor = g_resourceManager->getSubResource(5, 1, cursorType - R2CURSORS_START, &size); break; } -- 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') 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') 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 8a72581bc830a124823e00f9e5a660d5f5d981f0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 3 Dec 2011 08:01:40 +1100 Subject: TSAGE: Fixed the R2R player initialisation. This fixes the problem where the player wouldn't face in the direction they were walking in. --- engines/tsage/core.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 266d39a907..0ad1c43e8c 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2998,8 +2998,25 @@ void Player::postInit(SceneObjectList *OwnerList) { _uiEnabled = true; _percent = 100; _field8C = 10; - _moveDiff.x = 4; - _moveDiff.y = 2; + + if (g_vm->getGameID() != GType_Ringworld2) + { + _moveDiff.x = 4; + _moveDiff.y = 2; + } + else + { + _moveDiff.x = 3; + _moveDiff.y = 2; + _effect = 1; + _shade = 0; + + setObjectWrapper(new SceneObjectWrapper()); + setPosition(_characterPos[_characterIndex]); + setStrip(_characterStrip[_characterIndex]); + setFrame(_characterFrame[_characterIndex]); + _characterScene[_characterIndex] = GLOBALS._sceneManager._sceneNumber; + } } void Player::disableControl() { -- cgit v1.2.3 From ed0a4191ac74322f3a19e3170dff0b21f26c1e19 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 3 Dec 2011 00:31:40 +0100 Subject: TSAGE: Remove useless include --- engines/tsage/resources.h | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h index 8f90b21908..0410fa3f42 100644 --- a/engines/tsage/resources.h +++ b/engines/tsage/resources.h @@ -29,7 +29,6 @@ #include "common/list.h" #include "common/str.h" #include "common/str-array.h" -#include "common/textconsole.h" #include "common/util.h" #include "graphics/surface.h" -- cgit v1.2.3 From 0e1be9e6a1adbd9383e596c6efe24c070a29c32d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 3 Dec 2011 00:33:14 +0100 Subject: TSAGE: Add BF and R2R specific debugger commands --- engines/tsage/debugger.cpp | 303 +++++++++++++++++++++++++++++++++++++-------- engines/tsage/debugger.h | 28 ++++- engines/tsage/tsage.cpp | 9 +- 3 files changed, 285 insertions(+), 55 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index a099f16da3..f7ba5c20f2 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -24,6 +24,8 @@ #include "tsage/globals.h" #include "tsage/graphics.h" #include "tsage/ringworld/ringworld_logic.h" +#include "tsage/blue_force/blueforce_logic.h" +#include "tsage/ringworld2/ringworld2_logic.h" namespace TsAGE { @@ -273,10 +275,88 @@ bool Debugger::Cmd_ClearFlag(int argc, const char **argv) { return true; } +/** + * Show any active hotspot areas in the scene + */ +bool Debugger::Cmd_Hotspots(int argc, const char **argv) { + int colIndex = 16; + const Rect &sceneBounds = g_globals->_sceneManager._scene->_sceneBounds; + + // Lock the background surface for access + Graphics::Surface destSurface = g_globals->_sceneManager._scene->_backSurface.lockSurface(); + + // Iterate through the scene items + SynchronizedList::iterator i; + for (i = g_globals->_sceneItems.reverse_begin(); i != g_globals->_sceneItems.end(); --i, ++colIndex) { + SceneItem *o = *i; + + // Draw the contents of the hotspot area + if (o->_sceneRegionId == 0) { + // Scene item doesn't use a region, so fill in the entire area + if ((o->_bounds.right > o->_bounds.left) && (o->_bounds.bottom > o->_bounds.top)) + destSurface.fillRect(Rect(o->_bounds.left - sceneBounds.left, o->_bounds.top - sceneBounds.top, + o->_bounds.right - sceneBounds.left - 1, o->_bounds.bottom - sceneBounds.top - 1), colIndex); + } else { + // Scene uses a region, so get it and use it to fill out only the correct parts + SceneRegions::iterator ri = g_globals->_sceneRegions.begin(); + while ((ri != g_globals->_sceneRegions.end()) && ((*ri)._regionId != o->_sceneRegionId)) + ++ri; + + if (ri != g_globals->_sceneRegions.end()) { + // Fill out the areas defined by the region + Region &r = *ri; + + for (int y = r._bounds.top; y < r._bounds.bottom; ++y) { + LineSliceSet set = r.getLineSlices(y); + + for (uint p = 0; p < set.items.size(); ++p) + destSurface.hLine(set.items[p].xs - sceneBounds.left, y - sceneBounds.top, + set.items[p].xe - sceneBounds.left - 1, colIndex); + } + } + } + } + + // Release the surface + g_globals->_sceneManager._scene->_backSurface.unlockSurface(); + + // Mark the scene as requiring a full redraw + g_globals->_paneRefreshFlag[0] = 2; + + return false; +} + +/** + * Play the specified sound + */ +bool Debugger::Cmd_Sound(int argc, const char **argv) { + if (argc != 2) { + DebugPrintf("Usage: %s \n", argv[0]); + return true; + } + + int soundNum = strToInt(argv[1]); + g_globals->_soundHandler.play(soundNum); + return false; +} + +/* + * This command lists the objects available, and their ID + */ +bool DemoDebugger::Cmd_ListObjects(int argc, const char **argv) { + DebugPrintf("Not available in Demo\n"); + return true; +} + +bool DemoDebugger::Cmd_MoveObject(int argc, const char **argv) { + DebugPrintf("Not available in Demo\n"); + return true; +} + /* * This command lists the objects available, and their ID */ -bool Debugger::Cmd_ListObjects(int argc, const char **argv) { +bool RingworldDebugger::Cmd_ListObjects(int argc, const char **argv) { if (argc != 1) { DebugPrintf("Usage: %s\n", argv[0]); return true; @@ -322,7 +402,7 @@ bool Debugger::Cmd_ListObjects(int argc, const char **argv) { /* * This command gets an item, or move it to a room */ -bool Debugger::Cmd_MoveObject(int argc, const char **argv) { +bool RingworldDebugger::Cmd_MoveObject(int argc, const char **argv) { // Check for a flag to clear if ((argc < 2) || (argc > 3)){ DebugPrintf("Usage: %s []\n", argv[0]); @@ -443,69 +523,188 @@ bool Debugger::Cmd_MoveObject(int argc, const char **argv) { return true; } -/** - * Show any active hotspot areas in the scene +/* + * This command lists the objects available, and their ID */ -bool Debugger::Cmd_Hotspots(int argc, const char **argv) { - int colIndex = 16; - const Rect &sceneBounds = g_globals->_sceneManager._scene->_sceneBounds; - - // Lock the background surface for access - Graphics::Surface destSurface = g_globals->_sceneManager._scene->_backSurface.lockSurface(); - - // Iterate through the scene items - SynchronizedList::iterator i; - for (i = g_globals->_sceneItems.reverse_begin(); i != g_globals->_sceneItems.end(); --i, ++colIndex) { - SceneItem *o = *i; - - // Draw the contents of the hotspot area - if (o->_sceneRegionId == 0) { - // Scene item doesn't use a region, so fill in the entire area - if ((o->_bounds.right > o->_bounds.left) && (o->_bounds.bottom > o->_bounds.top)) - destSurface.fillRect(Rect(o->_bounds.left - sceneBounds.left, o->_bounds.top - sceneBounds.top, - o->_bounds.right - sceneBounds.left - 1, o->_bounds.bottom - sceneBounds.top - 1), colIndex); - } else { - // Scene uses a region, so get it and use it to fill out only the correct parts - SceneRegions::iterator ri = g_globals->_sceneRegions.begin(); - while ((ri != g_globals->_sceneRegions.end()) && ((*ri)._regionId != o->_sceneRegionId)) - ++ri; +bool BlueForceDebugger::Cmd_ListObjects(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } - if (ri != g_globals->_sceneRegions.end()) { - // Fill out the areas defined by the region - Region &r = *ri; - - for (int y = r._bounds.top; y < r._bounds.bottom; ++y) { - LineSliceSet set = r.getLineSlices(y); + DebugPrintf("Available objects for this game are:\n"); + DebugPrintf("1 - INV_COLT45\n"); + DebugPrintf("2 - INV_AMMO_CLIP\n"); + DebugPrintf("3 - INV_SPARE_CLIP\n"); + DebugPrintf("4 - INV_HANDCUFFS\n"); + DebugPrintf("5 - INV_GREENS_GUN\n"); + DebugPrintf("6 - INV_TICKET_BOOK\n"); + DebugPrintf("7 - INV_MIRANDA_CARD\n"); + DebugPrintf("8 - INV_FOREST_RAP\n"); + DebugPrintf("9 - INV_GREEN_ID\n"); + DebugPrintf("10 - INV_BASEBALL_CARD\n"); + DebugPrintf("11 - INV_BOOKING_GREEN\n"); + DebugPrintf("12 - INV_FLARE\n"); + DebugPrintf("13 - INV_COBB_RAP\n"); + DebugPrintf("14 - INV_22_BULLET\n"); + DebugPrintf("15 - INV_AUTO_RIFLE\n"); + DebugPrintf("16 - INV_WIG\n"); + DebugPrintf("17 - INV_FRANKIE_ID\n"); + DebugPrintf("18 - INV_TYRONE_ID\n"); + DebugPrintf("19 - INV_22_SNUB\n"); + DebugPrintf("20 - INV_BOOKING_FRANKIE\n"); + DebugPrintf("21 - INV_BOOKING_GANG\n"); + DebugPrintf("22 - INV_FBI_TELETYPE\n"); + DebugPrintf("23 - INV_DA_NOTE\n"); + DebugPrintf("24 - INV_PRINT_OUT\n"); + DebugPrintf("25 - INV_WAREHOUSE_KEYS\n"); + DebugPrintf("26 - INV_CENTER_PUNCH\n"); + DebugPrintf("27 - INV_TRANQ_GUN\n"); + DebugPrintf("28 - INV_HOOK\n"); + DebugPrintf("29 - INV_RAGS\n"); + DebugPrintf("30 - INV_JAR\n"); + DebugPrintf("31 - INV_SCREWDRIVER\n"); + DebugPrintf("32 - INV_D_FLOPPY\n"); + DebugPrintf("33 - INV_BLANK_DISK\n"); + DebugPrintf("34 - INV_STICK\n"); + DebugPrintf("35 - INV_CRATE1\n"); + DebugPrintf("36 - INV_CRATE2\n"); + DebugPrintf("37 - INV_SHOEBOX\n"); + DebugPrintf("38 - INV_BADGE\n"); + DebugPrintf("39 - INV_RENTAL_COUPON\n"); + DebugPrintf("40 - INV_NICKEL\n"); + DebugPrintf("41 - INV_LYLE_CARD\n"); + DebugPrintf("42 - INV_CARTER_NOTE\n"); + DebugPrintf("43 - INV_MUG_SHOT\n"); + DebugPrintf("44 - INV_CLIPPING\n"); + DebugPrintf("45 - INV_MICROFILM \n"); + DebugPrintf("46 - INV_WAVE_KEYS\n"); + DebugPrintf("47 - INV_RENTAL_KEYS\n"); + DebugPrintf("48 - INV_NAPKIN\n"); + DebugPrintf("49 - INV_DMV_PRINTOUT\n"); + DebugPrintf("50 - INV_FISHING_NET\n"); + DebugPrintf("51 - INV_ID\n"); + DebugPrintf("52 - INV_9MM_BULLETS\n"); + DebugPrintf("53 - INV_SCHEDULE\n"); + DebugPrintf("54 - INV_GRENADES\n"); + DebugPrintf("55 - INV_YELLOW_CORD\n"); + DebugPrintf("56 - INV_HALF_YELLOW_CORD\n"); + DebugPrintf("57 - INV_BLACK_CORD\n"); + DebugPrintf("58 - INV_HALF_BLACK_CORD\n"); + DebugPrintf("59 - INV_WARRANT\n"); + DebugPrintf("60 - INV_JACKET\n"); + DebugPrintf("61 - INV_GREENS_KNIFE\n"); + DebugPrintf("62 - INV_DOG_WHISTLE\n"); + DebugPrintf("63 - INV_AMMO_BELT\n"); + DebugPrintf("64 - INV_CARAVAN_KEY\n"); + return true; +} - for (uint p = 0; p < set.items.size(); ++p) - destSurface.hLine(set.items[p].xs - sceneBounds.left, y - sceneBounds.top, - set.items[p].xe - sceneBounds.left - 1, colIndex); - } - } - } +bool BlueForceDebugger::Cmd_MoveObject(int argc, const char **argv) { + // Check for a flag to clear + if ((argc < 2) || (argc > 3)){ + DebugPrintf("Usage: %s []\n", argv[0]); + DebugPrintf("If no scene is specified, the object will be added to inventory\n"); + return true; } - // Release the surface - g_globals->_sceneManager._scene->_backSurface.unlockSurface(); + int objNum = strToInt(argv[1]); + int sceneNum = 1; + if (argc == 3) + sceneNum = strToInt(argv[2]); - // Mark the scene as requiring a full redraw - g_globals->_paneRefreshFlag[0] = 2; + if ((objNum > 0) && (objNum < 65)) + BF_INVENTORY.setObjectScene(objNum, sceneNum); + else + DebugPrintf("Invalid object Id %s\n", argv[1]); - return false; + return true; } -/** - * Play the specified sound +/* + * This command lists the objects available, and their ID */ -bool Debugger::Cmd_Sound(int argc, const char **argv) { - if (argc != 2) { - DebugPrintf("Usage: %s \n", argv[0]); +bool Ringworld2Debugger::Cmd_ListObjects(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); return true; } - int soundNum = strToInt(argv[1]); - g_globals->_soundHandler.play(soundNum); - return false; + DebugPrintf("Available objects for this game are:\n"); + DebugPrintf("1 - R2_OPTO_DISK\n"); + DebugPrintf("2 - R2_2\n"); + DebugPrintf("3 - R2_NEGATOR_GUN\n"); + DebugPrintf("4 - R2_STEPPING_DISKS\n"); + DebugPrintf("5 - R2_5\n"); + DebugPrintf("6 - R2_6\n"); + DebugPrintf("7 - R2_7\n"); + DebugPrintf("8 - R2_8\n"); + DebugPrintf("9 - R2_9\n"); + DebugPrintf("10 - R2_10\n"); + DebugPrintf("11 - R2_11\n"); + DebugPrintf("12 - R2_12\n"); + DebugPrintf("13 - R2_13\n"); + DebugPrintf("14 - R2_14\n"); + DebugPrintf("15 - R2_15\n"); + DebugPrintf("16 - R2_16\n"); + DebugPrintf("17 - R2_17\n"); + DebugPrintf("18 - R2_18\n"); + DebugPrintf("19 - R2_19\n"); + DebugPrintf("20 - R2_20\n"); + DebugPrintf("21 - R2_21\n"); + DebugPrintf("22 - R2_22\n"); + DebugPrintf("23 - R2_23\n"); + DebugPrintf("24 - R2_24\n"); + DebugPrintf("25 - R2_25\n"); + DebugPrintf("26 - R2_26\n"); + DebugPrintf("27 - R2_27\n"); + DebugPrintf("28 - R2_28\n"); + DebugPrintf("29 - R2_29\n"); + DebugPrintf("30 - R2_30\n"); + DebugPrintf("31 - R2_31\n"); + DebugPrintf("32 - R2_32\n"); + DebugPrintf("33 - R2_33\n"); + DebugPrintf("34 - R2_34\n"); + DebugPrintf("35 - R2_35\n"); + DebugPrintf("36 - R2_36\n"); + DebugPrintf("37 - R2_37\n"); + DebugPrintf("38 - R2_38\n"); + DebugPrintf("39 - R2_39\n"); + DebugPrintf("40 - R2_40\n"); + DebugPrintf("41 - R2_41\n"); + DebugPrintf("42 - R2_42\n"); + DebugPrintf("43 - R2_43\n"); + DebugPrintf("44 - R2_44\n"); + DebugPrintf("45 - R2_45\n"); + DebugPrintf("46 - R2_46\n"); + DebugPrintf("47 - R2_47\n"); + DebugPrintf("48 - R2_48\n"); + DebugPrintf("49 - R2_49\n"); + DebugPrintf("50 - R2_50\n"); + DebugPrintf("51 - R2_51\n"); + DebugPrintf("52 - R2_52\n"); + + return true; } +bool Ringworld2Debugger::Cmd_MoveObject(int argc, const char **argv) { + // Check for a flag to clear + if ((argc < 2) || (argc > 3)){ + DebugPrintf("Usage: %s []\n", argv[0]); + DebugPrintf("If no scene is specified, the object will be added to inventory\n"); + return true; + } + + int objNum = strToInt(argv[1]); + int sceneNum = 1; + if (argc == 3) + sceneNum = strToInt(argv[2]); + + if ((objNum > 0) && (objNum < 53)) + R2_INVENTORY.setObjectScene(objNum, sceneNum); + else + DebugPrintf("Invalid object Id %s\n", argv[1]); + + return true; +} } // End of namespace TsAGE diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h index fcdbc2d243..bf826a3f77 100644 --- a/engines/tsage/debugger.h +++ b/engines/tsage/debugger.h @@ -41,10 +41,34 @@ protected: bool Cmd_SetFlag(int argc, const char **argv); bool Cmd_GetFlag(int argc, const char **argv); bool Cmd_ClearFlag(int argc, const char **argv); - bool Cmd_ListObjects(int argc, const char **argv); - bool Cmd_MoveObject(int argc, const char **argv); bool Cmd_Hotspots(int argc, const char **argv); bool Cmd_Sound(int argc, const char **argv); + virtual bool Cmd_ListObjects(int argc, const char **argv) = 0; + virtual bool Cmd_MoveObject(int argc, const char **argv) = 0; +}; + +class DemoDebugger : public Debugger { +protected: + virtual bool Cmd_ListObjects(int argc, const char **argv); + virtual bool Cmd_MoveObject(int argc, const char **argv); +}; + +class RingworldDebugger : public Debugger { +protected: + virtual bool Cmd_ListObjects(int argc, const char **argv); + virtual bool Cmd_MoveObject(int argc, const char **argv); +}; + +class BlueForceDebugger : public Debugger { +protected: + virtual bool Cmd_ListObjects(int argc, const char **argv); + virtual bool Cmd_MoveObject(int argc, const char **argv); +}; + +class Ringworld2Debugger : public Debugger { +protected: + virtual bool Cmd_ListObjects(int argc, const char **argv); + virtual bool Cmd_MoveObject(int argc, const char **argv); }; } // End of namespace TsAGE diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index f2775e083d..40f4dfcfd2 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -38,7 +38,14 @@ TSageEngine::TSageEngine(OSystem *system, const tSageGameDescription *gameDesc) _gameDescription(gameDesc) { g_vm = this; DebugMan.addDebugChannel(kRingDebugScripts, "scripts", "Scripts debugging"); - _debugger = new Debugger(); + if (g_vm->getFeatures() & GF_DEMO) + _debugger = new DemoDebugger(); + else if (g_vm->getGameID() == GType_Ringworld) + _debugger = new RingworldDebugger(); + else if (g_vm->getGameID() == GType_BlueForce) + _debugger = new BlueForceDebugger(); + else if (g_vm->getGameID() == GType_Ringworld2) + _debugger = new Ringworld2Debugger(); } Common::Error TSageEngine::init() { -- 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') 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') 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 6161d7906efc1a99c05aeef91e60bcc44aeb8ac4 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 7 Dec 2011 20:49:11 +1100 Subject: TSAGE: Fix for displaying text correctly in Ringworld Spanish version. --- engines/tsage/graphics.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index f0a5973e6b..171167c2ea 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1254,7 +1254,11 @@ void GfxFont::setFontNumber(uint32 fontNumber) { if (!_fontData) _fontData = g_resourceManager->getResource(RES_FONT, _fontNumber, 0); - _numChars = READ_LE_UINT16(_fontData + 4); + // Since some TsAGE game versions don't have a valid character count at offset 4, use the offset of the + // first charactre data to calculate the number of characters in the offset table preceeding it + _numChars = (READ_LE_UINT32(_fontData + 12) - 12) / 4; + assert(_numChars <= 256); + _fontSize.y = READ_LE_UINT16(_fontData + 6); _fontSize.x = READ_LE_UINT16(_fontData + 8); _bpp = READ_LE_UINT16(_fontData + 10); -- 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') 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 481ebbf2d9636c3114d41b65f1e278acbcc1f399 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 8 Dec 2011 10:59:48 +1100 Subject: TSAGE: Bugfix to correctly horizontally center text in R2R --- engines/tsage/core.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 0ad1c43e8c..6a84b2521b 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1675,10 +1675,14 @@ void SceneItem::display(int resNum, int lineNum, ...) { if (resNum) { // Get required bounding size - g_globals->gfxManager().getStringBounds(msg.c_str(), textRect, maxWidth); - textRect.center(pos.x, pos.y); + GfxFont font; + font.setFontNumber(g_globals->_sceneText._fontNumber); + font.getStringBounds(msg.c_str(), textRect, maxWidth); + // Center the text at the specified position, and then constrain it to be- + textRect.center(pos.x, pos.y); textRect.contain(g_globals->gfxManager()._bounds); + if (centerText) { g_globals->_sceneText._color1 = g_globals->_sceneText._color2; g_globals->_sceneText._color2 = 0; -- 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') 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') 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') 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 86514cfe46830ea5861b42f5450cea6ce92123d3 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Thu, 8 Dec 2011 05:37:03 +0100 Subject: TSAGE: Remove unused variable. --- engines/tsage/core.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 6a84b2521b..79a34fa4e3 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1576,7 +1576,6 @@ void SceneItem::display(int resNum, int lineNum, ...) { g_globals->_sceneObjects->draw(); } - GfxFontBackup font; Common::Point pos(160, 100); Rect textRect; int maxWidth = 120; -- cgit v1.2.3 From 7d3c622f6aa36f5a2e2e57cfe6b607e1d9472d7f Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 8 Dec 2011 17:25:34 +1100 Subject: TSAGE: Bugfix for centering R2R on-screen text by default --- engines/tsage/core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 79a34fa4e3..eb7c734074 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1580,7 +1580,7 @@ void SceneItem::display(int resNum, int lineNum, ...) { Rect textRect; int maxWidth = 120; bool keepOnscreen = false; - bool centerText = g_vm->getGameID() == GType_Ringworld; + bool centerText = g_vm->getGameID() != GType_BlueForce; Common::List playList; if (resNum != 0) { -- 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') 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 a2da8e6b397a76e2efef41b4d07b1baef78a6abc Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 9 Dec 2011 10:13:06 +1100 Subject: TSAGE: Got rid of goto in TsAGE engine. --- engines/tsage/core.cpp | 75 +++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 35 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index eb7c734074..88121c4d16 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2661,43 +2661,48 @@ void SceneObjectList::draw() { } g_globals->_paneRegions[paneNum].setRect(0, 0, 0, 0); -redraw: - // Main draw loop - for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) { - SceneObject *obj = objList[objIndex]; - - if ((obj->_flags & flagMask) && !(obj->_flags & OBJFLAG_HIDE)) { - obj->_paneRects[paneNum] = obj->_bounds; - obj->draw(); + + // FIXME: Currently, removing objects causes screen flickers when the removed object intersects + // another drawn object, since the background is briefly redrawn over the object. For now, I'm + // using a forced jump back to redraw objects. In the long term, I should figure out how the + // original game does this properly + bool redrawFlag = true; + while (redrawFlag) { + redrawFlag = false; + + // Main draw loop + for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) { + SceneObject *obj = objList[objIndex]; + + if ((obj->_flags & flagMask) && !(obj->_flags & OBJFLAG_HIDE)) { + obj->_paneRects[paneNum] = obj->_bounds; + obj->draw(); + } } - } - // Update the palette - g_globals->_sceneManager.fadeInIfNecessary(); - g_globals->_sceneManager._loadMode = 0; - g_globals->_paneRefreshFlag[paneNum] = 0; - - // Loop through the object list, removing any objects and refreshing the screen as necessary - for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) { - SceneObject *obj = objList[objIndex]; - - if (obj->_flags & OBJFLAG_HIDE) - obj->_flags |= OBJFLAG_HIDING; - obj->_flags &= ~flagMask; - if (obj->_flags & OBJFLAG_REMOVE) { - obj->_flags |= OBJFLAG_PANES; - - checkIntersection(objList, objIndex, CURRENT_PANENUM); - - obj->updateScreen(); - obj->removeObject(); - - // FIXME: Currently, removing objects causes screen flickers when the removed object intersects - // another drawn object, since the background is briefly redrawn over the object. For now, I'm - // using a forced jump back to redraw objects. In the long term, I should figure out how the - // original game does this properly - objList.remove_at(objIndex); - goto redraw; + // Update the palette + g_globals->_sceneManager.fadeInIfNecessary(); + g_globals->_sceneManager._loadMode = 0; + g_globals->_paneRefreshFlag[paneNum] = 0; + + // Loop through the object list, removing any objects and refreshing the screen as necessary + for (uint objIndex = 0; objIndex < objList.size() && !redrawFlag; ++objIndex) { + SceneObject *obj = objList[objIndex]; + + if (obj->_flags & OBJFLAG_HIDE) + obj->_flags |= OBJFLAG_HIDING; + obj->_flags &= ~flagMask; + if (obj->_flags & OBJFLAG_REMOVE) { + obj->_flags |= OBJFLAG_PANES; + + checkIntersection(objList, objIndex, CURRENT_PANENUM); + + obj->updateScreen(); + obj->removeObject(); + + objList.remove_at(objIndex); + redrawFlag = true; + } } } } -- 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') 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') 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') 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/globals.cpp | 3 + engines/tsage/globals.h | 1 + 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 ++ 7 files changed, 445 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 0b59fd4e36..7f6f71ceae 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -377,6 +377,7 @@ void Ringworld2Globals::reset() { // Reset fields _v5657C = 0; _v565F5 = 0; + _v565AE = 0; for (int i = 0; i < 14; i++) _v56605[i] = 0; _v57C2C = 0; @@ -417,6 +418,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { for (i = 0; i < MAX_CHARACTERS; ++i) s.syncAsSint16LE(_v565F1[i]); + + s.syncAsByte(_v565AE); for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index e3c6f5cbc7..43e4af5cf9 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -247,6 +247,7 @@ public: int _insetUp; int _v565F5; int _v5657C; + byte _v565AE; byte _v56605[14]; int _v57C2C; int _v58CE2; 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 d315521c67df814e88c28cbb2914f1b075349fa0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 11 Dec 2011 17:41:44 +1100 Subject: TSAGE: Added loading of conversation data that will be needed for R2R --- engines/tsage/converse.cpp | 44 +++++++++++++++++++++++++++++++++----------- engines/tsage/converse.h | 4 +++- 2 files changed, 36 insertions(+), 12 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index b98f6f609d..0337774cd3 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -531,29 +531,51 @@ void ConversationChoiceDialog::draw() { /*--------------------------------------------------------------------------*/ void Obj44::load(const byte *dataP) { - _id = READ_LE_UINT16(dataP); + Common::MemoryReadStream s(dataP, (g_vm->getGameID() == GType_Ringworld2) ? 126 : 68); + + if (g_vm->getGameID() == GType_Ringworld2) { + _mode = s.readSint16LE(); + s.readSint16LE(); + _field4 = s.readSint16LE(); + _field6 = s.readSint16LE(); + _field8 = s.readSint16LE(); + } + + _id = s.readSint16LE(); for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) - _field2[idx] = READ_LE_UINT16(dataP + 2 + idx * 2); + _callbackId[idx] = s.readSint16LE(); + + if (g_vm->getGameID() == GType_Ringworld2) { + _field16 = s.readSint16LE(); + s.skip(20); + } else { + s.skip(4); + } - const byte *listP = dataP + 0x10; - for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx, listP += 10) { - _list[idx]._id = READ_LE_UINT16(listP); - _list[idx]._scriptOffset = READ_LE_UINT16(listP + 2); + for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) { + _list[idx]._id = s.readSint16LE(); + _list[idx]._scriptOffset = s.readSint16LE(); + s.skip(6); } - _speakerOffset = READ_LE_UINT16(dataP + 0x42); + _speakerOffset = s.readSint16LE(); } void Obj44::synchronize(Serializer &s) { s.syncAsSint32LE(_id); for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) - s.syncAsSint32LE(_field2[idx]); + s.syncAsSint32LE(_callbackId[idx]); for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) _list[idx].synchronize(s); s.syncAsUint32LE(_speakerOffset); - if (g_vm->getGameID() == GType_Ringworld2) + if (g_vm->getGameID() == GType_Ringworld2) { s.syncAsSint16LE(_mode); + s.syncAsSint16LE(_field4); + s.syncAsSint16LE(_field6); + s.syncAsSint16LE(_field8); + s.syncAsSint16LE(_field16); + } } /*--------------------------------------------------------------------------*/ @@ -779,10 +801,10 @@ void StripManager::signal() { if (_callbackObject) { for (idx = 0; idx < OBJ44_LIST_SIZE; ++idx) { - if (!obj44._field2[idx]) + if (!obj44._callbackId[idx]) break; - _callbackObject->stripCallback(obj44._field2[idx]); + _callbackObject->stripCallback(obj44._callbackId[idx]); } } diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index db05913e08..f645e2ce5b 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -182,12 +182,14 @@ public: class Obj44 : public Serialisable { public: int _id; - int _field2[OBJ44_LIST_SIZE]; + int _callbackId[OBJ44_LIST_SIZE]; Obj0A _list[OBJ44_LIST_SIZE]; uint _speakerOffset; // Return to Ringworld specific field int _mode; + int _field4, _field6, _field8; + int _field16; public: void load(const byte *dataP); virtual void synchronize(Serializer &s); -- 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/core.cpp | 2 +- engines/tsage/core.h | 3 ++- engines/tsage/globals.cpp | 2 +- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 6 +++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 6 ++++-- engines/tsage/ringworld2/ringworld2_scenes2.cpp | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 88121c4d16..9d7c8abf0a 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2989,7 +2989,7 @@ Player::Player(): SceneObject() { _field8C = 0; // Return to Ringworld specific fields - _characterIndex = 0; + _characterIndex = R2_NONE; for (int i = 0; i < MAX_CHARACTERS; ++i) { _characterScene[i] = 0; diff --git a/engines/tsage/core.h b/engines/tsage/core.h index d55352319f..cbd3d9f77c 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -621,6 +621,7 @@ public: }; #define MAX_CHARACTERS 4 +enum R2RCharacter { R2_NONE = 0, R2_QUINN = 1, R2_SEEKER = 2, R2_MIRANDA = 3 }; class Player : public SceneObject { public: @@ -630,7 +631,7 @@ public: bool _enabled; // Return to Ringworld specific fields - int _characterIndex; + R2RCharacter _characterIndex; int _characterScene[MAX_CHARACTERS]; int _oldCharacterScene[MAX_CHARACTERS]; Common::Point _characterPos[MAX_CHARACTERS]; diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 7f6f71ceae..9f137f4b92 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -400,7 +400,7 @@ void Ringworld2Globals::reset() { _stripManager_lookupList[11] = 1; // Reset fields stored in the player class - _player._characterIndex = 1; + _player._characterIndex = R2_QUINN; _player._characterScene[1] = 100; _player._characterScene[2] = 300; _player._characterScene[3] = 300; 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') 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') 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') 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') 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 81ba2f4733aa7250deae8ce8187a4a3c0a10214c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 12 Dec 2011 19:45:58 +1100 Subject: TSAGE: Implemented R2R changes to StripManager::signal --- engines/tsage/converse.cpp | 46 ++++++++++++++++++++++++++++++++++++---------- engines/tsage/converse.h | 4 ++-- 2 files changed, 38 insertions(+), 12 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 0337774cd3..2424064dda 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -535,8 +535,8 @@ void Obj44::load(const byte *dataP) { if (g_vm->getGameID() == GType_Ringworld2) { _mode = s.readSint16LE(); - s.readSint16LE(); - _field4 = s.readSint16LE(); + _lookupValue = s.readSint16LE(); + _lookupIndex = s.readSint16LE(); _field6 = s.readSint16LE(); _field8 = s.readSint16LE(); } @@ -571,7 +571,8 @@ void Obj44::synchronize(Serializer &s) { if (g_vm->getGameID() == GType_Ringworld2) { s.syncAsSint16LE(_mode); - s.syncAsSint16LE(_field4); + s.syncAsSint16LE(_lookupValue); + s.syncAsSint16LE(_lookupIndex); s.syncAsSint16LE(_field6); s.syncAsSint16LE(_field8); s.syncAsSint16LE(_field16); @@ -753,11 +754,21 @@ void StripManager::signal() { if (g_vm->getGameID() != GType_Ringworld2) { _field2E8 = obj44._id; } else { - if (obj44._id) - _field2E8 = obj44._id; + // Return to Ringworld specific handling + if (obj44._field6) + _field2E8 = obj44._field6; switch (obj44._mode) { case 1: + ++_lookupList[obj44._lookupIndex - 1]; + break; + case 2: + --_lookupList[obj44._lookupIndex - 1]; + break; + case 3: + _lookupList[obj44._lookupIndex - 1] = obj44._lookupValue; + break; + default: break; } } @@ -766,12 +777,27 @@ void StripManager::signal() { // Build up a list of script entries int idx; - for (idx = 0; idx < OBJ44_LIST_SIZE; ++idx) { - if (!obj44._list[idx]._id) - break; - // Get the next one - choiceList.push_back((const char *)&_script[0] + obj44._list[idx]._scriptOffset); + if (g_vm->getGameID() == GType_Ringworld2 && obj44._field16) { + // Special loading mode used in Return to Ringworld + for (idx = 0; idx < OBJ44_LIST_SIZE; ++idx) { + int objIndex = _lookupList[obj44._field16 - 1]; + + if (!obj44._list[objIndex]._id) + break; + + // Get the next one + choiceList.push_back((const char *)&_script[0] + obj44._list[objIndex]._scriptOffset); + } + } else { + // Standard choices loading + for (idx = 0; idx < OBJ44_LIST_SIZE; ++idx) { + if (!obj44._list[idx]._id) + break; + + // Get the next one + choiceList.push_back((const char *)&_script[0] + obj44._list[idx]._scriptOffset); + } } int strIndex = 0; diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index f645e2ce5b..2a08c78b21 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -188,8 +188,8 @@ public: // Return to Ringworld specific field int _mode; - int _field4, _field6, _field8; - int _field16; + int _lookupValue, _lookupIndex, _field6; + int _field8, _field16; public: void load(const byte *dataP); virtual void synchronize(Serializer &s); -- 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/converse.cpp | 10 ++++++---- engines/tsage/converse.h | 3 ++- engines/tsage/detection_tables.h | 2 +- engines/tsage/globals.cpp | 2 +- engines/tsage/globals.h | 3 +++ engines/tsage/ringworld2/ringworld2_scenes0.cpp | 4 ++-- engines/tsage/ringworld2/ringworld2_speakers.cpp | 12 ++++++------ 7 files changed, 21 insertions(+), 15 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 2424064dda..b802f71ff3 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -552,7 +552,7 @@ void Obj44::load(const byte *dataP) { s.skip(4); } - for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) { + for (int idx = 0; idx < OBJ0A_LIST_SIZE; ++idx) { _list[idx]._id = s.readSint16LE(); _list[idx]._scriptOffset = s.readSint16LE(); s.skip(6); @@ -565,7 +565,7 @@ void Obj44::synchronize(Serializer &s) { s.syncAsSint32LE(_id); for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) s.syncAsSint32LE(_callbackId[idx]); - for (int idx = 0; idx < OBJ44_LIST_SIZE; ++idx) + for (int idx = 0; idx < OBJ0A_LIST_SIZE; ++idx) _list[idx].synchronize(s); s.syncAsUint32LE(_speakerOffset); @@ -645,10 +645,12 @@ void StripManager::load() { // Get the object list byte *obj44List = g_resourceManager->getResource(RES_STRIP, _stripNum, 1); int dataSize = g_vm->_memoryManager.getSize(obj44List); - assert((dataSize % 0x44) == 0); + + int obj44Size = (g_vm->getGameID() == GType_Ringworld2) ? 126 : 68; + assert((dataSize % obj44Size) == 0); byte *dataP = obj44List; - for (int idx = 0; idx < (dataSize / 0x44); ++idx, dataP += 0x44) { + for (int idx = 0; idx < (dataSize / obj44Size); ++idx, dataP += obj44Size) { Obj44 obj; obj.load(dataP); _obj44List.push_back(obj); diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h index 2a08c78b21..0c4eb9539d 100644 --- a/engines/tsage/converse.h +++ b/engines/tsage/converse.h @@ -178,12 +178,13 @@ public: }; #define OBJ44_LIST_SIZE 5 +#define OBJ0A_LIST_SIZE ((g_vm->getGameID() == GType_Ringworld2) ? 8 : 5) class Obj44 : public Serialisable { public: int _id; int _callbackId[OBJ44_LIST_SIZE]; - Obj0A _list[OBJ44_LIST_SIZE]; + Obj0A _list[8]; uint _speakerOffset; // Return to Ringworld specific field diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 360dbac0ae..d6b1760b80 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -150,7 +150,7 @@ static const tSageGameDescription gameDescriptions[] = { Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, - GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) + GUIO0() }, GType_Ringworld2, GF_CD | GF_ALT_REGIONS diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 9f137f4b92..769ad4c054 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -383,7 +383,7 @@ void Ringworld2Globals::reset() { _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); - _speechSubtitles = 0; + _speechSubtitles = SPEECH_VOICE | SPEECH_TEXT; _insetUp = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 43e4af5cf9..9048899953 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -239,6 +239,9 @@ public: namespace Ringworld2 { +#define SPEECH_TEXT 1 +#define SPEECH_VOICE 2 + class Ringworld2Globals: public TsAGE2Globals { public: ASoundExt _sound1, _sound2, _sound3, _sound4; 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 1f96dc550c554e5481496b729434e0b36fa2eaa7 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 12 Dec 2011 16:17:15 +0100 Subject: TSAGE: Remove unused method --- engines/tsage/core.h | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index cbd3d9f77c..060ffee121 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -421,7 +421,6 @@ public: virtual void destroy() {} virtual bool startAction(CursorType action, Event &event); virtual void doAction(int action); - virtual bool performAction(CursorType action, Event &event) { return startAction(action, event); } bool contains(const Common::Point &pt); void setBounds(const Rect &newBounds) { _bounds = newBounds; } -- cgit v1.2.3 From 30909b1ae455a7cb615720d5a65616925c3172a3 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 12 Dec 2011 16:17:30 +0100 Subject: TSAGE: Fix warning about hidden remove() method from parent class --- engines/tsage/blue_force/blueforce_logic.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index d0d0e0ee40..f5a3938f2b 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -65,6 +65,9 @@ public: void add(EventHandler *obj); void remove(EventHandler *obj); + // The following line prevents compiler warnings about hiding the remove() + // method from the parent class. + virtual void remove() { EventHandler::remove(); } }; class Timer: public EventHandler { -- 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') 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') 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') 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') 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') 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') 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/events.h | 3 +- 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 +- 5 files changed, 296 insertions(+), 16 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 1942c98901..ecc710ed99 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -83,7 +83,8 @@ enum CursorType { INV_CARAVAN_KEY = 67, BF_LAST_INVENT = 68, // Ringworld 2 objects - R2_OPTO_DISK = 1, R2_2 = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, R2_5 = 5, R2_6 = 6, + R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, + R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, R2_7 = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_14 = 14, R2_15 = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21, R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, R2_26 = 26, R2_27 = 27, R2_28 = 28, 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') 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') 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') 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') 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') 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') 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') 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') 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') 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/events.h | 4 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 7 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 176 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes0.h | 39 ++++++ 4 files changed, 221 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index ecc710ed99..303c2201ea 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -85,8 +85,8 @@ enum CursorType { // Ringworld 2 objects R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, - R2_7 = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_14 = 14, - R2_15 = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21, + R2_7 = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_OPTICAL_FIBRE = 14, + R2_CLAMP = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21, R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, R2_26 = 26, R2_27 = 27, R2_28 = 28, R2_29 = 29, R2_30 = 30, R2_31 = 31, R2_32 = 32, R2_33 = 33, R2_34 = 34, R2_35 = 35, R2_36 = 36, R2_37 = 37, R2_38 = 38, R2_39 = 39, R2_40 = 40, R2_41 = 41, R2_42 = 42, 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') 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/blue_force/blueforce_logic.cpp | 6 ++++-- engines/tsage/ringworld/ringworld_logic.cpp | 7 +++++-- engines/tsage/ringworld2/ringworld2_logic.cpp | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 22299c1bf1..9888f4dd91 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -255,14 +255,16 @@ Scene *BlueForceGame::createScene(int sceneNumber) { * Returns true if it is currently okay to restore a game */ bool BlueForceGame::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 BlueForceGame::canSaveGameStateCurrently() { - return true; + // Don't allow a game to be saved if a dialog is active + return g_globals->_gfxManagers.size() == 1; } void BlueForceGame::rightClick() { diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index ad67b66f69..c87b95e0b8 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -196,14 +196,17 @@ Scene *RingworldGame::createScene(int sceneNumber) { * Returns true if it is currently okay to restore a game */ bool RingworldGame::canLoadGameStateCurrently() { - return !g_globals->getFlag(50); + // Don't allow a game to be loaded if a dialog is active + return !g_globals->getFlag(50) && (g_globals->_gfxManagers.size() == 1); + } /** * Returns true if it is currently okay to save the game */ bool RingworldGame::canSaveGameStateCurrently() { - return !g_globals->getFlag(50); + // Don't allow a game to be saved if a dialog is active + return !g_globals->getFlag(50) && (g_globals->_gfxManagers.size() == 1); } /*--------------------------------------------------------------------------*/ 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 3e6e5bc0ce1d384d96b464377319ecae0a36222e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 17 Dec 2011 13:28:12 +1100 Subject: TSAGE: Bugfix to allow loading savegames in Blue Force directly from the launcher --- engines/tsage/blue_force/blueforce_logic.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 9888f4dd91..91cba43e1d 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -20,6 +20,7 @@ * */ +#include "common/config-manager.h" #include "tsage/blue_force/blueforce_logic.h" #include "tsage/blue_force/blueforce_dialogs.h" #include "tsage/blue_force/blueforce_scenes0.h" @@ -42,8 +43,25 @@ namespace TsAGE { namespace BlueForce { void BlueForceGame::start() { - // Start the game - g_globals->_sceneManager.changeScene(20); + int slot = -1; + + // Check for a savegame to load straight from the launcher + if (ConfMan.hasKey("save_slot")) { + slot = ConfMan.getInt("save_slot"); + Common::String file = g_vm->generateSaveName(slot); + Common::InSaveFile *in = g_vm->_system->getSavefileManager()->openForLoading(file); + if (in) + delete in; + else + slot = -1; + } + + if (slot >= 0) + // Set the savegame slot to load in the main loop + g_globals->_sceneHandler->_loadGameSlot = slot; + else + // Switch to the title screen + g_globals->_sceneManager.setNewScene(20); } Scene *BlueForceGame::createScene(int sceneNumber) { -- cgit v1.2.3 From 8dec805d852cff58d3ff52c4d8051ac0a33f93be Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 17 Dec 2011 15:38:29 +1100 Subject: TSAGE: Bugfix for #3460485 - Animation running too slowly --- engines/tsage/events.cpp | 2 +- engines/tsage/events.h | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index ac08997563..152570b187 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -386,7 +386,7 @@ bool EventsClass::isCursorVisible() const { */ void EventsClass::delay(int numFrames) { while (_frameNumber < (_prevDelayFrame + numFrames)) { - uint32 delayAmount = CLIP(_priorFrameTime + GAME_FRAME_TIME - g_system->getMillis(), + uint32 delayAmount = CLIP(_priorFrameTime + GAME_SCRIPT_TIME - g_system->getMillis(), (uint32)0, (uint32)GAME_FRAME_TIME); if (delayAmount > 0) g_system->delayMillis(delayAmount); diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 303c2201ea..fe4d3ecde6 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -36,9 +36,12 @@ enum EventType {EVENT_NONE = 0, EVENT_BUTTON_DOWN = 1, EVENT_BUTTON_UP = 2, EVEN enum ButtonShiftFlags {BTNSHIFT_LEFT = 0, BTNSHIFT_RIGHT = 3, BTNSHIFT_MIDDLE = 4}; -// Intrinisc game delay between execution frames. This runs at 60Hz -#define GAME_FRAME_RATE 60 -#define GAME_FRAME_TIME (1000 / 60) +// Intrinisc game delay between execution frames +#define GAME_FRAME_RATE 50 +#define GAME_FRAME_TIME (1000 / GAME_FRAME_RATE) + +#define GAME_SCRIPT_RATE 80 +#define GAME_SCRIPT_TIME (1000 / GAME_SCRIPT_RATE) class GfxManager; -- 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') 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/blue_force/blueforce_dialogs.cpp | 4 +- engines/tsage/converse.cpp | 2 +- engines/tsage/core.cpp | 4 +- engines/tsage/events.cpp | 6 +- engines/tsage/globals.cpp | 8 +- engines/tsage/graphics.cpp | 144 ++++++++++++++++++++---- engines/tsage/graphics.h | 14 ++- engines/tsage/ringworld/ringworld_dialogs.cpp | 4 +- engines/tsage/ringworld/ringworld_logic.cpp | 2 +- engines/tsage/ringworld/ringworld_scenes3.cpp | 6 +- engines/tsage/ringworld/ringworld_scenes5.cpp | 4 +- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- engines/tsage/scenes.cpp | 2 +- 13 files changed, 156 insertions(+), 46 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index b9b3ad6c22..6f294d263a 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -163,7 +163,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } // Execute the specified action @@ -243,7 +243,7 @@ void AmmoBeltDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } _gfxManager.deactivate(); diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index b802f71ff3..00c0b3a1f1 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -451,7 +451,7 @@ int ConversationChoiceDialog::execute(const Common::StringArray &choiceList) { while (!g_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) && !g_vm->shouldQuit()) { g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } if (g_vm->shouldQuit()) break; diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 9d7c8abf0a..c243624608 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1415,7 +1415,7 @@ void ScenePalette::fade(const byte *adjustData, bool fullAdjust, int percent) { // Set the altered pale4tte g_system->getPaletteManager()->setPalette((const byte *)&tempPalette[0], 0, 256); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } PaletteRotation *ScenePalette::addRotation(int start, int end, int rotationMode, int duration, Action *action) { @@ -1708,7 +1708,7 @@ void SceneItem::display(int resNum, int lineNum, ...) { // Keep event on-screen until a mouse or keypress while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) { - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 152570b187..21dc86b8ec 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -49,8 +49,8 @@ bool EventsClass::pollEvent() { _priorFrameTime = milli; ++_frameNumber; - // Update screen - g_system->updateScreen(); + // Update the physical screen with any updates to the screen surface + GLOBALS._screenSurface.copyToScreen(); } if (!g_system->getEventManager()->pollEvent(_event)) return false; @@ -395,7 +395,7 @@ void EventsClass::delay(int numFrames) { _priorFrameTime = g_system->getMillis(); } - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); _prevDelayFrame = _frameNumber; _priorFrameTime = g_system->getMillis(); } diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 769ad4c054..1d0e37d071 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -108,9 +108,15 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _color2 = _gfxColors.foreground; _color3 = _gfxColors.foreground; } - _screenSurface.setScreenSurface(); + + // Set up a buffer for the screen surface + _screenSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT); + _screenSurface.trackDirtyRects(); + + // Add the global graphics manager to the graphic manager list _gfxManagers.push_back(&_gfxManagerInstance); + // Set up the global scene objects list _sceneObjects = &_sceneObjectsInstance; _sceneObjects_queue.push_front(_sceneObjects); diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 171167c2ea..bc4ce75c22 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -220,11 +220,10 @@ void Rect::synchronize(Serializer &s) { GfxSurface::GfxSurface() : _bounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) { _disableUpdates = false; - _screenSurface = false; _lockSurfaceCtr = 0; _customSurface = NULL; - _screenSurfaceP = NULL; _transColor = -1; + _trackDirtyRects = false; } GfxSurface::GfxSurface(const GfxSurface &s) { @@ -241,12 +240,41 @@ GfxSurface::~GfxSurface() { } /** - * Specifies that the surface will encapsulate the ScummVM screen surface + * Turns on dirty rectangle tracking for the surface */ -void GfxSurface::setScreenSurface() { - _screenSurface = true; - _customSurface = NULL; - _lockSurfaceCtr = 0; +void GfxSurface::trackDirtyRects() { + _trackDirtyRects = true; +} + +void GfxSurface::addDirtyRect(const Rect &r) { + if (_trackDirtyRects) + _dirtyRects.push_back(Rect(r.left, r.top, + MIN(r.right + 1, SCREEN_WIDTH), MIN(r.bottom + 1, SCREEN_HEIGHT))); +} + +/** + * Copies all areas specified by the dirty rect list to the screen + */ +void GfxSurface::copyToScreen() { + assert(_trackDirtyRects); + + // Merge any overlapping dirty rects + mergeDirtyRects(); + + // Loop through the dirty rect list to copy the affected areas to the sc + for (Common::List::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) { + Rect r = *i; + + const byte *srcP = (const byte *)_customSurface->getBasePtr(r.left, r.top); + g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top, + r.width(), r.height()); + } + + // Update the physical screen + g_system->updateScreen(); + + // Now that the dirty rects have been copied, clear the dirty rect list + _dirtyRects.clear(); } /** @@ -254,11 +282,13 @@ void GfxSurface::setScreenSurface() { */ void GfxSurface::create(int width, int height) { assert((width >= 0) && (height >= 0)); - _screenSurface = false; + + // Delete any prior internal surface that may have been previously created if (_customSurface) { _customSurface->free(); delete _customSurface; } + _customSurface = new Graphics::Surface(); _customSurface->create(width, height, Graphics::PixelFormat::createFormatCLUT8()); Common::fill((byte *)_customSurface->pixels, (byte *)_customSurface->pixels + (width * height), 0); @@ -271,13 +301,7 @@ void GfxSurface::create(int width, int height) { Graphics::Surface GfxSurface::lockSurface() { ++_lockSurfaceCtr; - Graphics::Surface *src; - if (_screenSurface) { - if (_lockSurfaceCtr == 1) - _screenSurfaceP = g_system->lockScreen(); - src = _screenSurfaceP; - } else - src = _customSurface; + Graphics::Surface *src = _customSurface; assert(src); // Setup the returned surface either as one pointing to the same pixels as the source, or @@ -298,15 +322,10 @@ Graphics::Surface GfxSurface::lockSurface() { void GfxSurface::unlockSurface() { assert(_lockSurfaceCtr > 0); --_lockSurfaceCtr; - - if ((_lockSurfaceCtr == 0) && _screenSurface) { - g_system->unlockScreen(); - } } void GfxSurface::synchronize(Serializer &s) { assert(!_lockSurfaceCtr); - assert(!_screenSurface); s.syncAsByte(_disableUpdates); _bounds.synchronize(s); @@ -351,6 +370,7 @@ void GfxSurface::fillRect(const Rect &bounds, int color) { Graphics::Surface surface = lockSurface(); surface.fillRect(bounds, color); unlockSurface(); + addDirtyRect(bounds); } GfxSurface &GfxSurface::operator=(const GfxSurface &s) { @@ -363,7 +383,6 @@ GfxSurface &GfxSurface::operator=(const GfxSurface &s) { } _customSurface = s._customSurface; - _screenSurface = s._screenSurface; _disableUpdates = s._disableUpdates; _bounds = s._bounds; _centroid = s._centroid; @@ -567,10 +586,17 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi if (destBounds.bottom > destSurface.h) destBounds.bottom = destSurface.h; - if (destBounds.isValidRect()) { + if (destBounds.isValidRect() && (destBounds.left < SCREEN_WIDTH) && (destBounds.right >= 0) && + (destBounds.top < SCREEN_HEIGHT) && (destBounds.bottom >= 0)) { + // Register the affected area as dirty + addDirtyRect(Rect(destBounds.left + _bounds.left, destBounds.top + _bounds.top, + destBounds.right + _bounds.left, destBounds.bottom + _bounds.top)); + + // Get pointers to the source and destination surface areas const byte *pSrc = (const byte *)srcSurface.getBasePtr(srcX, srcY); byte *pDest = (byte *)destSurface.getBasePtr(destBounds.left, destBounds.top); + // Loop through copying each row for (int y = 0; y < destBounds.height(); ++y, pSrc += srcSurface.pitch, pDest += destSurface.pitch) { if (!priorityRegion && (src._transColor == -1)) @@ -595,6 +621,7 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi } } + // Unlock the surfaces unlockSurface(); srcImage.unlockSurface(); } @@ -613,6 +640,68 @@ void GfxSurface::draw(const Common::Point &pt, Rect *rect) { } } +/** + * Merges any clipping rectangles that overlap to try and reduce + * the total number of clip rectangles. + */ +void GfxSurface::mergeDirtyRects() { + if (_dirtyRects.size() <= 1) + return; + + Common::List::iterator rOuter, rInner; + + for (rOuter = _dirtyRects.begin(); rOuter != _dirtyRects.end(); ++rOuter) { + rInner = rOuter; + while (++rInner != _dirtyRects.end()) { + + if (looseIntersectRectangle(*rOuter, *rInner)) { + // these two rectangles overlap or + // are next to each other - merge them + + unionRectangle(*rOuter, *rOuter, *rInner); + + // remove the inner rect from the list + _dirtyRects.erase(rInner); + + // move back to beginning of list + rInner = rOuter; + } + } + } +} + +/** + * Check if the two rectangles are next to each other. + * @param pSrc1 a source rectangle + * @param pSrc2 a source rectangle + */ +bool GfxSurface::looseIntersectRectangle(const Rect &src1, const Rect &src2) { + Rect destRect; + + destRect.left = MAX(src1.left, src2.left); + destRect.top = MAX(src1.top, src2.top); + destRect.right = MIN(src1.right, src2.right); + destRect.bottom = MIN(src1.bottom, src2.bottom); + + return destRect.isValidRect(); +} + +/** + * Creates the union of two rectangles. + * Returns True if there is a union. + * @param pDest destination rectangle that is to receive the new union + * @param pSrc1 a source rectangle + * @param pSrc2 a source rectangle + */ +bool GfxSurface::unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2) { + destRect.left = MIN(src1.left, src2.left); + destRect.top = MIN(src1.top, src2.top); + destRect.right = MAX(src1.right, src2.right); + destRect.bottom = MAX(src1.bottom, src2.bottom); + + return !destRect.isEmpty(); +} + /*--------------------------------------------------------------------------*/ GfxElement::GfxElement() { @@ -639,6 +728,9 @@ void GfxElement::highlight() { GfxManager &gfxManager = g_globals->gfxManager(); Graphics::Surface surface = gfxManager.lockSurface(); + // Mark the area is dirty + gfxManager.addDirtyRect(_bounds); + // Scan through the contents of the element, switching any occurances of the foreground // color with the background color and vice versa Rect tempRect(_bounds); @@ -734,6 +826,7 @@ void GfxElement::drawFrame() { gfxManager.fillRect2(tempRect.right, tempRect.top + 2, 1, tempRect.height() - 3, 0); gfxManager.unlockSurface(); + gfxManager.addDirtyRect(_bounds); } /** @@ -1090,7 +1183,7 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } _gfxManager.deactivate(); @@ -1174,6 +1267,11 @@ void GfxManager::fillArea(int xp, int yp, int color) { _surface.fillRect(tempRect, color); } +void GfxManager::addDirtyRect(const Rect &r) { + _surface.addDirtyRect(Rect(r.left + _bounds.left, r.top + _bounds.top, + r.right + _bounds.left, r.bottom + _bounds.top)); +} + void GfxManager::fillRect(const Rect &bounds, int color) { _surface.setBounds(_bounds); _surface.fillRect(bounds, color); diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index dba3401700..e32994505c 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -74,12 +74,16 @@ public: class GfxSurface { private: Graphics::Surface *_customSurface; - Graphics::Surface *_screenSurfaceP; int _lockSurfaceCtr; - bool _screenSurface; bool _disableUpdates; Rect _bounds; + bool _trackDirtyRects; + Common::List _dirtyRects; + + void mergeDirtyRects(); + bool looseIntersectRectangle(const Rect &src1, const Rect &src2); + bool unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2); public: Common::Point _centroid; int _transColor; @@ -88,7 +92,9 @@ public: GfxSurface(const GfxSurface &s); ~GfxSurface(); - void setScreenSurface(); + void trackDirtyRects(); + void addDirtyRect(const Rect &r); + void copyToScreen(); Graphics::Surface lockSurface(); void unlockSurface(); void synchronize(Serializer &s); @@ -274,6 +280,7 @@ public: return _surface.lockSurface(); } void unlockSurface() { _surface.unlockSurface(); } + void addDirtyRect(const Rect &r); void fillArea(int xp, int yp, int color); void fillRect(const Rect &bounds, int color); void fillRect2(int xs, int ys, int width, int height, int color); @@ -301,7 +308,6 @@ public: void copyFrom(GfxSurface &src, int destX, int destY) { _surface.setBounds(_bounds); _surface.copyFrom(src, destX, destY); - g_system->updateScreen(); } GfxSurface &getSurface() { _surface.setBounds(_bounds); diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp index 37101c9c58..d0d5ab7b4a 100644 --- a/engines/tsage/ringworld/ringworld_dialogs.cpp +++ b/engines/tsage/ringworld/ringworld_dialogs.cpp @@ -183,7 +183,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } // Execute the specified action @@ -394,7 +394,7 @@ void InventoryDialog::execute() { Event event; while (!g_globals->_events.getEvent(event) && !g_vm->shouldQuit()) { g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); } if (g_vm->shouldQuit()) break; diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index c87b95e0b8..2497327a01 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -315,7 +315,7 @@ void SceneArea::wait() { // Wait until a mouse or keypress Event event; while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp index 81190aea7b..6f3d1ed93a 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -532,7 +532,7 @@ void Scene2100::Action1::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); continue; } @@ -2263,7 +2263,7 @@ void Scene2150::Action1::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); continue; } @@ -5118,7 +5118,7 @@ void Scene2320::Action3::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); continue; } diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 49726eba2e..7c8da54fac 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -2810,7 +2810,7 @@ void Scene4150::Action1::signal() { case 4: { for (int idx = 100; idx >= 0; idx -= 5) { g_globals->_scenePalette.fade(adjustData, false, idx); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); } @@ -2838,7 +2838,7 @@ void Scene4150::Action1::signal() { case 7: for (int idx = 100; idx >= 0; idx -= 5) { g_globals->_scenePalette.fade(adjustData, false, idx); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); } 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 diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 6362c63bc3..03c7d8d0ae 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -133,7 +133,7 @@ void SceneManager::fadeInIfNecessary() { percent = 100; g_globals->_scenePalette.fade((const byte *)&adjustData, false, percent); - g_system->updateScreen(); + GLOBALS._screenSurface.copyToScreen(); g_system->delayMillis(10); } -- cgit v1.2.3 From 8385ee1c012af3f2d62cfa098aab7254c4e559b0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 18 Dec 2011 21:07:31 +1100 Subject: TSAGE: Bugfix for using save/load buttons in the Blue Force options dialog --- engines/tsage/blue_force/blueforce_dialogs.cpp | 49 +++++++++++++++++--------- 1 file changed, 33 insertions(+), 16 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index 6f294d263a..11c0358aca 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -166,6 +166,9 @@ void RightClickDialog::execute() { GLOBALS._screenSurface.copyToScreen(); } + // Deactivate the graphics manager used for the dialog + _gfxManager.deactivate(); + // Execute the specified action CursorType cursorNum = CURSOR_NONE; switch (_selectedAction) { @@ -193,8 +196,6 @@ void RightClickDialog::execute() { if (cursorNum != CURSOR_NONE) BF_GLOBALS._events.setCursor(cursorNum); - - _gfxManager.deactivate(); } /*--------------------------------------------------------------------------*/ @@ -435,29 +436,45 @@ void OptionsDialog::show() { OptionsDialog *dlg = new OptionsDialog(); dlg->draw(); + // Show the dialog GfxButton *btn = dlg->execute(); - if (btn == &dlg->_btnQuit) { + // Get which button was pressed + int btnIndex = -1; + if (btn == &dlg->_btnRestore) + btnIndex = 0; + else if (btn == &dlg->_btnSave) + btnIndex = 1; + else if (btn == &dlg->_btnRestart) + btnIndex = 2; + else if (btn == &dlg->_btnQuit) + btnIndex = 3; + else if (btn == &dlg->_btnSound) + btnIndex = 4; + + // Close the dialog + dlg->remove(); + delete dlg; + + // Execute the given selection + if (btnIndex == 0) { + // Restore button + g_globals->_game->restoreGame(); + } else if (btnIndex == 1) { + // Save button + g_globals->_game->saveGame(); + } else if (btnIndex == 2) { + // Restart game + g_globals->_game->restartGame(); + } else if (btnIndex == 3) { // Quit game if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) { g_vm->quitGame(); } - } else if (btn == &dlg->_btnRestart) { - // Restart game - g_globals->_game->restartGame(); - } else if (btn == &dlg->_btnSound) { + } else if (btnIndex == 4) { // Sound dialog SoundDialog::execute(); - } else if (btn == &dlg->_btnSave) { - // Save button - g_globals->_game->saveGame(); - } else if (btn == &dlg->_btnRestore) { - // Restore button - g_globals->_game->restoreGame(); } - - dlg->remove(); - delete dlg; } OptionsDialog::OptionsDialog() { -- cgit v1.2.3 From 96d15e83dbca886054550d3c1d676b955464a9fc Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 18 Dec 2011 21:18:33 +1100 Subject: TSAGE: Bugfix for Ringworld saving and restoring via options dialog --- engines/tsage/ringworld/ringworld_dialogs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp index d0d5ab7b4a..0561a27055 100644 --- a/engines/tsage/ringworld/ringworld_dialogs.cpp +++ b/engines/tsage/ringworld/ringworld_dialogs.cpp @@ -186,6 +186,8 @@ void RightClickDialog::execute() { GLOBALS._screenSurface.copyToScreen(); } + _gfxManager.deactivate(); + // Execute the specified action switch (_selectedAction) { case 1: @@ -213,8 +215,6 @@ void RightClickDialog::execute() { Ringworld::OptionsDialog::show(); break; } - - _gfxManager.deactivate(); } /*--------------------------------------------------------------------------*/ -- 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/module.mk | 1 + 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 + 6 files changed, 302 insertions(+) create mode 100644 engines/tsage/ringworld2/ringworld2_scenes3.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_scenes3.h (limited to 'engines/tsage') diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 44f808ba8e..95a1a583dd 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -39,6 +39,7 @@ MODULE_OBJS := \ ringworld2/ringworld2_logic.o \ ringworld2/ringworld2_scenes0.o \ ringworld2/ringworld2_scenes2.o \ + ringworld2/ringworld2_scenes3.o \ ringworld2/ringworld2_speakers.o \ saveload.o \ scenes.o \ 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') 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 96face8ba870c09b7f7ce6847165bd2aed0d3e77 Mon Sep 17 00:00:00 2001 From: Tarek Soliman Date: Mon, 19 Dec 2011 10:51:01 -0600 Subject: TSAGE: Blue Force is now ready for testing --- engines/tsage/detection_tables.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index d6b1760b80..0f6d8c9d7d 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -105,7 +105,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("blue.rlb", "17c3993415e8a2cf93040eef7e88ec93", 1156508), Common::EN_ANY, Common::kPlatformPC, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) }, GType_BlueForce, @@ -120,7 +120,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("blue.rlb", "17eabb456cb1546c66baf1aff387ba6a", 10032614), Common::EN_ANY, Common::kPlatformPC, - ADGF_UNSTABLE, + ADGF_TESTING, GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) }, GType_BlueForce, @@ -134,7 +134,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("blue.rlb", "99983f48cb218f1f3760cf2f9a7ef11d", 63863322), Common::EN_ANY, Common::kPlatformPC, - ADGF_CD | ADGF_UNSTABLE, + ADGF_CD | ADGF_TESTING, GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) }, GType_BlueForce, -- 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') 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/globals.cpp | 3 +- engines/tsage/globals.h | 1 + engines/tsage/ringworld2/ringworld2_logic.cpp | 2 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 422 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes3.h | 54 +++ 5 files changed, 481 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 1d0e37d071..da40485617 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -386,6 +386,7 @@ void Ringworld2Globals::reset() { _v565AE = 0; for (int i = 0; i < 14; i++) _v56605[i] = 0; + _v56AA0 = 0; _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); @@ -426,7 +427,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v565F1[i]); s.syncAsByte(_v565AE); - + s.syncAsByte(_v56AA0); for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 9048899953..7e40276fcf 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -252,6 +252,7 @@ public: int _v5657C; byte _v565AE; byte _v56605[14]; + byte _v56AA0; int _v57C2C; int _v58CE2; int _speechSubtitles; 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') 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') 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 c40df9a6edc320ad2f3c8187e4b0c2d1eb9c6aa8 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 00:33:18 +0100 Subject: TSAGE: Work around a data issue in R2R. The character name doesn't seem case sensitive in R2R --- engines/tsage/converse.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 00c0b3a1f1..1542b0a8e3 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -888,6 +888,17 @@ Speaker *StripManager::getSpeaker(const char *speakerName) { return _speakerList[idx]; } + // TODO: Check if it necessary to make a strcmp first. + // + // If nothing is found, recheck and ignore the case as + // in R2R, some character names aren't in uppercase. + if (g_vm->getGameID() == GType_Ringworld2) { + for (uint idx = 0; idx < _speakerList.size(); ++idx) { + if (!scumm_stricmp(_speakerList[idx]->_speakerName.c_str(), speakerName)) + return _speakerList[idx]; + } + } + return NULL; } -- 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') 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 b5e53281846e455ebd3f4a7bf40d1fffc6afeafe Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 22 Dec 2011 21:12:08 +1100 Subject: TSAGE: Implement R2R 2 parameter versions of Player disableControl and enableControl --- engines/tsage/core.cpp | 17 +++++++++++++++-- engines/tsage/core.h | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index c243624608..6c015ab45f 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -3073,9 +3073,22 @@ void Player::enableControl() { } } -void Player::enableControl(CursorType cursor) { +void Player::disableControl(CursorType cursorId, CursorType objectId) { + if (cursorId != -1) + R2_GLOBALS._events.setCursor(cursorId); + else if (objectId != CURSOR_NONE) + R2_GLOBALS._events.setCursor(objectId); + + disableControl(); +} + +void Player::enableControl(CursorType cursorId, CursorType objectId) { enableControl(); - R2_GLOBALS._events.setCursor(cursor); + + if (cursorId != -1) + R2_GLOBALS._events.setCursor(cursorId); + else if (objectId != CURSOR_NONE) + R2_GLOBALS._events.setCursor(objectId); } void Player::process(Event &event) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 060ffee121..e887be050b 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -646,7 +646,8 @@ public: void disableControl(); void enableControl(); - void enableControl(CursorType cursor); + void disableControl(CursorType cursorId, CursorType objectId); + void enableControl(CursorType cursorId, CursorType objectId = CURSOR_NONE); }; /*--------------------------------------------------------------------------*/ -- 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/blue_force/blueforce_logic.h | 2 - engines/tsage/core.cpp | 102 +++++++++++++++++++----- engines/tsage/core.h | 6 ++ engines/tsage/events.h | 1 + engines/tsage/ringworld/ringworld_logic.h | 1 - engines/tsage/ringworld2/ringworld2_logic.cpp | 99 ++++++++--------------- engines/tsage/ringworld2/ringworld2_logic.h | 7 +- engines/tsage/ringworld2/ringworld2_scenes3.cpp | 9 +-- 8 files changed, 130 insertions(+), 97 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index f5a3938f2b..65cea8efae 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -338,10 +338,8 @@ 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); diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 6c015ab45f..a32f445194 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -34,6 +34,7 @@ #include "tsage/globals.h" #include "tsage/sound.h" #include "tsage/blue_force/blueforce_logic.h" +#include "tsage/ringworld2/ringworld2_logic.h" namespace TsAGE { @@ -1511,6 +1512,14 @@ void SceneItem::synchronize(Serializer &s) { s.syncAsSint16LE(_position.x); s.syncAsSint32LE(_position.y); s.syncAsSint16LE(_yDiff); s.syncAsSint32LE(_sceneRegionId); + + if (g_vm->getGameID() == GType_Ringworld2) { + // In R2R, the following fields were moved into the SceneItem class + s.syncAsSint16LE(_resNum); + s.syncAsSint16LE(_lookLineNum); + s.syncAsSint16LE(_useLineNum); + s.syncAsSint16LE(_talkLineNum); + } } void SceneItem::remove() { @@ -1533,25 +1542,30 @@ bool SceneItem::startAction(CursorType action, Event &event) { void SceneItem::doAction(int action) { const char *msg = NULL; - switch ((int)action) { - case CURSOR_LOOK: - msg = LOOK_SCENE_HOTSPOT; - break; - case CURSOR_USE: - msg = USE_SCENE_HOTSPOT; - break; - case CURSOR_TALK: - msg = TALK_SCENE_HOTSPOT; - break; - case 0x1000: - msg = SPECIAL_SCENE_HOTSPOT; - break; - default: - msg = DEFAULT_SCENE_HOTSPOT; - break; - } + if (g_vm->getGameID() == GType_Ringworld2) { + Event dummyEvent; + ((Ringworld2::SceneExt *)GLOBALS._sceneManager._scene)->display((CursorType)action, dummyEvent); + } else { + switch ((int)action) { + case CURSOR_LOOK: + msg = LOOK_SCENE_HOTSPOT; + break; + case CURSOR_USE: + msg = USE_SCENE_HOTSPOT; + break; + case CURSOR_TALK: + msg = TALK_SCENE_HOTSPOT; + break; + case 0x1000: + msg = SPECIAL_SCENE_HOTSPOT; + break; + default: + msg = DEFAULT_SCENE_HOTSPOT; + break; + } - GUIErrorMessage(msg); + GUIErrorMessage(msg); + } } bool SceneItem::contains(const Common::Point &pt) { @@ -1760,6 +1774,58 @@ void SceneItem::display(const Common::String &msg) { SET_EXT_FGCOLOR, 13, LIST_END); } +void SceneItem::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 SceneItem::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 SceneItem::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; + } +} + /*--------------------------------------------------------------------------*/ bool SceneHotspot::startAction(CursorType action, Event &event) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index e887be050b..98efaf9881 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -412,6 +412,8 @@ public: Common::Point _position; int _yDiff; int _sceneRegionId; + + int _resNum, _lookLineNum, _useLineNum, _talkLineNum; public: SceneItem() : EventHandler() { _msg = "Feature"; _action = NULL; _sceneRegionId = 0; } @@ -428,6 +430,10 @@ public: static void display(int resNum, int lineNum, ...); static void display2(int resNum, int lineNum); static void display(const Common::String &msg); + + 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 SceneItemExt : public SceneItem { diff --git a/engines/tsage/events.h b/engines/tsage/events.h index fe4d3ecde6..dcff1b45b8 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -95,6 +95,7 @@ enum CursorType { R2_36 = 36, R2_37 = 37, R2_38 = 38, R2_39 = 39, R2_40 = 40, R2_41 = 41, R2_42 = 42, R2_43 = 43, R2_44 = 44, R2_45 = 45, R2_46 = 46, R2_47 = 47, R2_48 = 48, R2_49 = 49, R2_50 = 50, R2_51 = 51, R2_52 = 52, + R2_LAST_INVENT = 53, // Ringworld 2 cursors R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009, diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h index 6f6a66cc26..b3f103f293 100644 --- a/engines/tsage/ringworld/ringworld_logic.h +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -161,7 +161,6 @@ public: class NamedHotspot : public SceneHotspot { public: - int _resNum, _lookLineNum, _useLineNum, _talkLineNum; NamedHotspot(); virtual void doAction(int action); 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 5f89ef2094e3092d4c5ffa74a77ca8931e675578 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 22 Dec 2011 22:26:08 +1100 Subject: TSAGE: R2R look/use/talk fields are more appropriate in the SceneHotspot class --- engines/tsage/core.cpp | 144 ++++++++++++++++++++++++++++++------------------- engines/tsage/core.h | 15 +++--- 2 files changed, 97 insertions(+), 62 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index a32f445194..f894d2d33a 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1512,14 +1512,6 @@ void SceneItem::synchronize(Serializer &s) { s.syncAsSint16LE(_position.x); s.syncAsSint32LE(_position.y); s.syncAsSint16LE(_yDiff); s.syncAsSint32LE(_sceneRegionId); - - if (g_vm->getGameID() == GType_Ringworld2) { - // In R2R, the following fields were moved into the SceneItem class - s.syncAsSint16LE(_resNum); - s.syncAsSint16LE(_lookLineNum); - s.syncAsSint16LE(_useLineNum); - s.syncAsSint16LE(_talkLineNum); - } } void SceneItem::remove() { @@ -1774,60 +1766,24 @@ void SceneItem::display(const Common::String &msg) { SET_EXT_FGCOLOR, 13, LIST_END); } -void SceneItem::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 SceneItem::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; - } +SceneHotspot::SceneHotspot(): SceneItem() { + _lookLineNum = _useLineNum = _talkLineNum = 0; } -void SceneItem::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) { - _sceneRegionId = sceneRegionId; - _resNum = resNum; - _lookLineNum = lookLineNum; - _talkLineNum = talkLineNum; - _useLineNum = useLineNum; +void SceneHotspot::synchronize(Serializer &s) { + SceneItem::synchronize(s); - // 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; + if (g_vm->getGameID() == GType_Ringworld2) { + // In R2R, the following fields were moved into the SceneItem class + s.syncAsSint16LE(_resNum); + s.syncAsSint16LE(_lookLineNum); + s.syncAsSint16LE(_useLineNum); + s.syncAsSint16LE(_talkLineNum); } } -/*--------------------------------------------------------------------------*/ - bool SceneHotspot::startAction(CursorType action, Event &event) { switch (g_vm->getGameID()) { case GType_BlueForce: { @@ -1835,6 +1791,32 @@ bool SceneHotspot::startAction(CursorType action, Event &event) { assert(scene); return scene->display(action); } + case GType_Ringworld2: { + switch (action) { + case CURSOR_LOOK: + if (_lookLineNum != -1) { + SceneItem::display2(_resNum, _lookLineNum); + return true; + } + break; + case CURSOR_USE: + if (_useLineNum != -1) { + SceneItem::display2(_resNum, _useLineNum); + return true; + } + break; + case CURSOR_TALK: + if (_talkLineNum != -1) { + SceneItem::display2(_resNum, _talkLineNum); + return true; + } + break; + default: + break; + } + + return ((Ringworld2::SceneExt *)GLOBALS._sceneManager._scene)->display(action, event); + } default: return SceneItem::startAction(action, event); } @@ -1871,6 +1853,58 @@ void SceneHotspot::doAction(int action) { } } +void SceneHotspot::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 SceneHotspot::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 SceneHotspot::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 SceneObjectWrapper::setSceneObject(SceneObject *so) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 98efaf9881..ca691ec618 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -412,8 +412,6 @@ public: Common::Point _position; int _yDiff; int _sceneRegionId; - - int _resNum, _lookLineNum, _useLineNum, _talkLineNum; public: SceneItem() : EventHandler() { _msg = "Feature"; _action = NULL; _sceneRegionId = 0; } @@ -430,10 +428,6 @@ public: static void display(int resNum, int lineNum, ...); static void display2(int resNum, int lineNum); static void display(const Common::String &msg); - - 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 SceneItemExt : public SceneItem { @@ -449,10 +443,17 @@ public: class SceneHotspot : public SceneItem { public: - SceneHotspot() : SceneItem() {} + int _resNum, _lookLineNum, _useLineNum, _talkLineNum; +public: + SceneHotspot(); + virtual void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); virtual Common::String getClassName() { return "SceneHotspot"; } virtual void doAction(int action); + + 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); }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, -- 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') 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') 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') 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/globals.cpp | 2 + engines/tsage/globals.h | 1 + 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 ++++ 7 files changed, 163 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index da40485617..c9518fa688 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -387,6 +387,7 @@ void Ringworld2Globals::reset() { for (int i = 0; i < 14; i++) _v56605[i] = 0; _v56AA0 = 0; + _v56AA1 = 0; _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); @@ -428,6 +429,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_v565AE); s.syncAsByte(_v56AA0); + s.syncAsByte(_v56AA1); for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 7e40276fcf..89ad418baa 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -253,6 +253,7 @@ public: byte _v565AE; byte _v56605[14]; byte _v56AA0; + byte _v56AA1; int _v57C2C; int _v58CE2; int _speechSubtitles; 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') 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') 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 2811d83670f63cbda6ff058d343be692f9c3ddbe Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 22 Dec 2011 20:21:23 +0100 Subject: TSAGE: Give a default value to the second parameter of disableControl(), as for enableControl() --- engines/tsage/core.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index ca691ec618..bd27a942a4 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -653,7 +653,7 @@ public: void disableControl(); void enableControl(); - void disableControl(CursorType cursorId, CursorType objectId); + void disableControl(CursorType cursorId, CursorType objectId = CURSOR_NONE); void enableControl(CursorType cursorId, CursorType objectId = CURSOR_NONE); }; -- 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/globals.cpp | 3 ++ engines/tsage/globals.h | 1 + engines/tsage/ringworld2/ringworld2_scenes2.cpp | 42 ++++++------------------- 3 files changed, 14 insertions(+), 32 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index c9518fa688..740d9b91fd 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -388,6 +388,7 @@ void Ringworld2Globals::reset() { _v56605[i] = 0; _v56AA0 = 0; _v56AA1 = 0; + _v56AAB = 0; _v57C2C = 0; _v58CE2 = 0; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); @@ -420,6 +421,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); + s.syncAsSint16LE(_v56AAB); s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_v58CE2); s.syncAsSint16LE(_speechSubtitles); @@ -430,6 +432,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_v565AE); s.syncAsByte(_v56AA0); s.syncAsByte(_v56AA1); + for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 89ad418baa..fb892c6cf7 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -254,6 +254,7 @@ public: byte _v56605[14]; byte _v56AA0; byte _v56AA1; + int _v56AAB; int _v57C2C; int _v58CE2; int _speechSubtitles; 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 +++ engines/tsage/staticres.cpp | 20 ++ engines/tsage/staticres.h | 14 + 5 files changed, 430 insertions(+), 1 deletion(-) (limited to 'engines/tsage') 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 { diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 238e7b3049..3be719887f 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -192,6 +192,26 @@ const char *CONSOLE_MESSAGES[] = { "Mozart", "Bach", "Rossini" }; +// Scene 825 Autodoc messages +const char *MAIN_MENU = "main menu"; +const char *DIAGNOSIS = "diagnosis"; +const char *ADVANCED_PROCEDURES = "advanced procedures"; +const char *VITAL_SIGNS = "vital signs"; +const char *OPEN_DOOR = "open door"; +const char *TREATMENTS = "treatments"; +const char *NO_MALADY_DETECTED = "no malady detected"; +const char *NO_TREATMENT_REQUIRED = "no treatment required"; +const char *ACCESS_CODE_REQUIRED = "access code required"; +const char *INVALID_ACCESS_CODE = "invalid access code"; +const char *FOREIGN_OBJECT_EXTRACTED = "foreign object extracted"; + +const char *AUTODOC_ITEMS[11] = { + MAIN_MENU, DIAGNOSIS, ADVANCED_PROCEDURES, VITAL_SIGNS, OPEN_DOOR, TREATMENTS, + NO_MALADY_DETECTED, NO_TREATMENT_REQUIRED, ACCESS_CODE_REQUIRED, INVALID_ACCESS_CODE, + FOREIGN_OBJECT_EXTRACTED +}; + + const char *HELP_MSG = "\x1\rRETURN TO\r RINGWORLD\x14"; const char *CHAR_TITLE = "\x01Select Character:"; const char *CHAR_QUINN_MSG = " Quinn "; diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index faff3f4103..e2afb65b34 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -149,6 +149,20 @@ namespace Ringworld2 { // Scene 125 - Console messages extern const char *CONSOLE_MESSAGES[]; +// Scene 825 - Autodoc Messages +extern const char *MAIN_MENU; +extern const char *DIAGNOSIS; +extern const char *ADVANCED_PROCEDURES; +extern const char *VITAL_SIGNS; +extern const char *OPEN_DOOR; +extern const char *TREATMENTS; +extern const char *NO_MALADY_DETECTED; +extern const char *NO_TREATMENT_REQUIRED; +extern const char *ACCESS_CODE_REQUIRED; +extern const char *INVALID_ACCESS_CODE; +extern const char *FOREIGN_OBJECT_EXTRACTED; +extern const char *AUTODOC_ITEMS[11]; + // Dialog messages extern const char *HELP_MSG; extern const char *CHAR_TITLE; -- 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') 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') 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') 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') 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') 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/globals.cpp | 3 + engines/tsage/globals.h | 1 + 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 +++ 7 files changed, 630 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 740d9b91fd..d30d585c09 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -381,6 +381,7 @@ void Ringworld2Globals::reset() { T2_GLOBALS._uiElements._active = false; // Reset fields + _v558B6.set(0, 0, 0, 0); _v5657C = 0; _v565F5 = 0; _v565AE = 0; @@ -419,6 +420,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { TsAGE2Globals::synchronize(s); int i; + _v558B6.synchronize(s); + s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v56AAB); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index fb892c6cf7..498659d3ae 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -248,6 +248,7 @@ public: PlayStream _playStream; StripProxy _stripProxy; int _insetUp; + Rect _v558B6; int _v565F5; int _v5657C; byte _v565AE; 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') 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/blue_force/blueforce_logic.cpp | 81 --------------------------- engines/tsage/blue_force/blueforce_logic.h | 6 -- engines/tsage/core.cpp | 29 ++++++++++ engines/tsage/core.h | 2 + engines/tsage/ringworld/ringworld_logic.cpp | 52 ----------------- engines/tsage/ringworld/ringworld_logic.h | 3 - engines/tsage/ringworld2/ringworld2_logic.cpp | 29 ---------- engines/tsage/ringworld2/ringworld2_logic.h | 3 - 8 files changed, 31 insertions(+), 174 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 91cba43e1d..eef48ad58e 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -553,35 +553,6 @@ bool NamedObject::startAction(CursorType action, Event &event) { return handled; } -void NamedObject::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 NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { - _resNum = resNum; - _lookLineNum = lookLineNum; - _talkLineNum = talkLineNum; - _useLineNum = useLineNum; -} - /*--------------------------------------------------------------------------*/ CountdownObject::CountdownObject(): NamedObject() { @@ -1397,58 +1368,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); diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 65cea8efae..04c6e9bdc2 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -126,9 +126,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 NamedObjectExt: public NamedObject { @@ -343,9 +340,6 @@ public: 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); }; class NamedHotspotExt : public NamedHotspot { diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index f894d2d33a..33badf389b 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1905,6 +1905,35 @@ void SceneHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, in } } +void SceneHotspot::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 SceneHotspot::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { + _resNum = resNum; + _lookLineNum = lookLineNum; + _talkLineNum = talkLineNum; + _useLineNum = useLineNum; +} + /*--------------------------------------------------------------------------*/ void SceneObjectWrapper::setSceneObject(SceneObject *so) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index bd27a942a4..c04045e83a 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -454,6 +454,8 @@ public: 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); + virtual void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); + virtual void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index 2497327a01..2ee4f99267 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -626,58 +626,6 @@ void NamedHotspot::doAction(int action) { SceneHotspot::doAction(action); } -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); diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h index b3f103f293..e902ac127f 100644 --- a/engines/tsage/ringworld/ringworld_logic.h +++ b/engines/tsage/ringworld/ringworld_logic.h @@ -166,9 +166,6 @@ public: virtual void doAction(int action); 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); }; class NamedHotspotExt : public NamedHotspot { 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') 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 364bc93918c2e21c9b45c6229e2dbae1487f4a18 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 20:24:53 +1100 Subject: TSAGE: Change R2R AUTODOC_ITEMS to truly be a constant array. Hopefully this will stop it being a globally constructed object. --- engines/tsage/staticres.cpp | 2 +- engines/tsage/staticres.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 3be719887f..c7ec1c579a 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -205,7 +205,7 @@ const char *ACCESS_CODE_REQUIRED = "access code required"; const char *INVALID_ACCESS_CODE = "invalid access code"; const char *FOREIGN_OBJECT_EXTRACTED = "foreign object extracted"; -const char *AUTODOC_ITEMS[11] = { +const char *const AUTODOC_ITEMS[11] = { MAIN_MENU, DIAGNOSIS, ADVANCED_PROCEDURES, VITAL_SIGNS, OPEN_DOOR, TREATMENTS, NO_MALADY_DETECTED, NO_TREATMENT_REQUIRED, ACCESS_CODE_REQUIRED, INVALID_ACCESS_CODE, FOREIGN_OBJECT_EXTRACTED diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index e2afb65b34..eee6a29a99 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -161,7 +161,7 @@ extern const char *NO_TREATMENT_REQUIRED; extern const char *ACCESS_CODE_REQUIRED; extern const char *INVALID_ACCESS_CODE; extern const char *FOREIGN_OBJECT_EXTRACTED; -extern const char *AUTODOC_ITEMS[11]; +extern const char *const AUTODOC_ITEMS[11]; // Dialog messages extern const char *HELP_MSG; -- 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 + engines/tsage/staticres.cpp | 7 ------- engines/tsage/staticres.h | 1 - 4 files changed, 17 insertions(+), 9 deletions(-) (limited to 'engines/tsage') 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); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index c7ec1c579a..1f963f13fb 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -205,13 +205,6 @@ const char *ACCESS_CODE_REQUIRED = "access code required"; const char *INVALID_ACCESS_CODE = "invalid access code"; const char *FOREIGN_OBJECT_EXTRACTED = "foreign object extracted"; -const char *const AUTODOC_ITEMS[11] = { - MAIN_MENU, DIAGNOSIS, ADVANCED_PROCEDURES, VITAL_SIGNS, OPEN_DOOR, TREATMENTS, - NO_MALADY_DETECTED, NO_TREATMENT_REQUIRED, ACCESS_CODE_REQUIRED, INVALID_ACCESS_CODE, - FOREIGN_OBJECT_EXTRACTED -}; - - const char *HELP_MSG = "\x1\rRETURN TO\r RINGWORLD\x14"; const char *CHAR_TITLE = "\x01Select Character:"; const char *CHAR_QUINN_MSG = " Quinn "; diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index eee6a29a99..90f5d3687f 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -161,7 +161,6 @@ extern const char *NO_TREATMENT_REQUIRED; extern const char *ACCESS_CODE_REQUIRED; extern const char *INVALID_ACCESS_CODE; extern const char *FOREIGN_OBJECT_EXTRACTED; -extern const char *const AUTODOC_ITEMS[11]; // Dialog messages extern const char *HELP_MSG; -- cgit v1.2.3 From 539a42d2efc46c629ecc9849e8029d9cf0796598 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 20:44:56 +1100 Subject: TSAGE: Add explicit prefixes to NULL's used in various setDetails calls --- engines/tsage/blue_force/blueforce_scenes1.cpp | 14 ++++++------ engines/tsage/blue_force/blueforce_scenes2.cpp | 30 +++++++++++++------------- 2 files changed, 22 insertions(+), 22 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index f17f2d7c83..c067cd87ea 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -921,7 +921,7 @@ void Scene114::postInit(SceneObjectList *OwnerList) { _lyle._moveDiff.x = 2; _lyle._moveDiff.y = 1; _lyle.hide(); - _lyle.setDetails(114, 2, -1, -1, 1, NULL); + _lyle.setDetails(114, 2, -1, -1, 1, (SceneItem *)NULL); _vechile.postInit(); if (BF_GLOBALS.getFlag(fWithLyle)) { @@ -962,7 +962,7 @@ void Scene114::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.enableControl(); } - _item1.setDetails(Rect(0, 0, 320, 200), 114, 3, -1, -1, 1, NULL); + _item1.setDetails(Rect(0, 0, 320, 200), 114, 3, -1, -1, 1, (SceneItem *)NULL); } void Scene114::signal() { @@ -2830,7 +2830,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) { _vechile.setStrip(2); _vechile.setPosition(Common::Point(262, 131)); _vechile.setZoom(65); - _vechile.setDetails(180, 33, 34, 35, 1, NULL); + _vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL); _object1.postInit(); _object1.setVisage(182); @@ -2845,7 +2845,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.disableControl(); _vechile.postInit(); - _vechile.setDetails(180, 33, 34, 35, 1, NULL); + _vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL); _object1.postInit(); @@ -2997,7 +2997,7 @@ void Scene180::signal() { BF_GLOBALS._player.disableControl(); _vechile.postInit(); - _vechile.setDetails(180, 33, 34, 35, 1, NULL); + _vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL); _object1.postInit(); _sceneMode = 1801; @@ -3249,7 +3249,7 @@ void Scene190::postInit(SceneObjectList *OwnerList) { _flag.fixPriority(200); _flag.setPosition(Common::Point(170, 31)); _flag.animate(ANIM_MODE_7, 0, NULL); - _flag.setDetails(190, 8, 26, 19, 1, NULL); + _flag.setDetails(190, 8, 26, 19, 1, (SceneItem *)NULL); _fieldB52 = true; @@ -3263,7 +3263,7 @@ void Scene190::postInit(SceneObjectList *OwnerList) { _lyleCar.setVisage(444); _lyleCar.setFrame(2); _lyleCar.setPosition(Common::Point(54, 114)); - _lyleCar.setDetails(190, -1, -1, -1, 1, NULL); + _lyleCar.setDetails(190, -1, -1, -1, 1, (SceneItem *)NULL); switch (BF_GLOBALS._sceneManager._previousScene) { case 300: { diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 5a181af927..340baae6a9 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -983,17 +983,17 @@ void Scene270::postInit(SceneObjectList *OwnerList) { _fireplace.animate(ANIM_MODE_2, NULL); _fridge.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL); - _object3.setDetails(270, 12, 13, 14, 1, NULL); - _laura.setDetails(270, 15, -1, -1, 1, NULL); - _skip.setDetails(270, 14, -1, -1, 1, NULL); - _lyle.setDetails(270, 34, 35, 36, 1, NULL); - _tv.setDetails(270, 3, 4, 5, 1, NULL); - _fireplace.setDetails(270, 6, 7, 8, 1, NULL); + _object3.setDetails(270, 12, 13, 14, 1, (SceneItem *)NULL); + _laura.setDetails(270, 15, -1, -1, 1, (SceneItem *)NULL); + _skip.setDetails(270, 14, -1, -1, 1, (SceneItem *)NULL); + _lyle.setDetails(270, 34, 35, 36, 1, (SceneItem *)NULL); + _tv.setDetails(270, 3, 4, 5, 1, (SceneItem *)NULL); + _fireplace.setDetails(270, 6, 7, 8, 1, (SceneItem *)NULL); if ((BF_GLOBALS._sceneManager._previousScene == 710) && (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard)) { - _grandma.setDetails(270, 15, 16, 17, 1, NULL); + _grandma.setDetails(270, 15, 16, 17, 1, (SceneItem *)NULL); } else { - _grandma.setDetails(270, 40, 16, 17, 1, NULL); + _grandma.setDetails(270, 40, 16, 17, 1, (SceneItem *)NULL); } _afgan.setDetails(4, 270, 27, 28, 29, 1); @@ -1420,13 +1420,13 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _object5.hide(); _item5.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL); - _object6.setDetails(270, 12, 13, 14, 1, NULL); - _object7.setDetails(270, 15, -1, -1, 1, NULL); - _object8.setDetails(270, 14, -1, -1, 1, NULL); - _object11.setDetails(270, -1, -1, -1, 1, NULL); - _tv.setDetails(270, 3, 4, 5, 1, NULL); - _object10.setDetails(270, 6, 7, 8, 1, NULL); - _object12.setDetails(270, 15, 16, 17, 1, NULL); + _object6.setDetails(270, 12, 13, 14, 1, (SceneItem *)NULL); + _object7.setDetails(270, 15, -1, -1, 1, (SceneItem *)NULL); + _object8.setDetails(270, 14, -1, -1, 1, (SceneItem *)NULL); + _object11.setDetails(270, -1, -1, -1, 1, (SceneItem *)NULL); + _tv.setDetails(270, 3, 4, 5, 1, (SceneItem *)NULL); + _object10.setDetails(270, 6, 7, 8, 1, (SceneItem *)NULL); + _object12.setDetails(270, 15, 16, 17, 1, (SceneItem *)NULL); _item3.setDetails(4, 270, 27, 28, 29, 1); _item1.setDetails(1, 270, 18, 19, 20, 1); _item6.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL); -- cgit v1.2.3 From 5d195fe3294e782259922425ffac445cf15ab87c Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 27 Dec 2011 20:57:50 +1100 Subject: TSAGE: Added explicit prefixes to more NULL's used in setDetails calls --- engines/tsage/blue_force/blueforce_scenes3.cpp | 46 +++++++++++++------------- engines/tsage/blue_force/blueforce_scenes4.cpp | 24 +++++++------- engines/tsage/blue_force/blueforce_scenes5.cpp | 38 ++++++++++----------- engines/tsage/blue_force/blueforce_scenes6.cpp | 12 +++---- engines/tsage/blue_force/blueforce_scenes7.cpp | 8 ++--- engines/tsage/blue_force/blueforce_scenes8.cpp | 42 +++++++++++------------ engines/tsage/blue_force/blueforce_scenes9.cpp | 24 +++++++------- 7 files changed, 97 insertions(+), 97 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index a63f45d8df..8955199286 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -269,20 +269,20 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _object17.setVisage(301); _object17.setStrip(1); _object17.setPosition(Common::Point(87, 88)); - _object17.setDetails(300, 11, 13, 2, 1, NULL); + _object17.setDetails(300, 11, 13, 2, 1, (SceneItem *)NULL); _object18.postInit(); _object18.setVisage(301); _object18.setStrip(1); _object18.setPosition(Common::Point(137, 92)); - _object18.setDetails(300, 11, 13, 3, 1, NULL); + _object18.setDetails(300, 11, 13, 3, 1, (SceneItem *)NULL); } _object19.postInit(); _object19.setVisage(301); _object19.setStrip(1); _object19.setPosition(Common::Point(175, 99)); - _object19.setDetails(300, 11, 13, 34, 1, NULL); + _object19.setDetails(300, 11, 13, 34, 1, (SceneItem *)NULL); _object11.postInit(); _object11.setVisage(301); @@ -1015,7 +1015,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { _atfMemo.setStrip(4); _atfMemo.setFrame(4); _atfMemo.fixPriority(82); - _atfMemo.setDetails(315, -1, -1, -1, 1, NULL); + _atfMemo.setDetails(315, -1, -1, -1, 1, (SceneItem *)NULL); } if (BF_GLOBALS._dayNumber == 1) { @@ -1026,7 +1026,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { _bulletinMemo.setStrip(4); _bulletinMemo.setFrame(2); _bulletinMemo.fixPriority(82); - _bulletinMemo.setDetails(315, -1, -1, -1, 1, NULL); + _bulletinMemo.setDetails(315, -1, -1, -1, 1, (SceneItem *)NULL); } } else if ((BF_INVENTORY._daNote._sceneNumber != 1) && (BF_GLOBALS._dayNumber < 3)) { _object2.postInit(); @@ -1035,7 +1035,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) { _object2.setFrame(2); _object2.setPosition(Common::Point(304, 31)); _object2.fixPriority(70); - _object2.setDetails(315, 3, 4, -1, 1, NULL); + _object2.setDetails(315, 3, 4, -1, 1, (SceneItem *)NULL); } _sutterSlot.setDetails(12, 315, 35, -1, 36, 1); @@ -2686,7 +2686,7 @@ void Scene350::postInit(SceneObjectList *OwnerList) { _harrison.setObjectWrapper(new SceneObjectWrapper()); _harrison.animate(ANIM_MODE_1, NULL); _harrison.changeZoom(-1); - _harrison.setDetails(350, 12, 13, 14, 1, NULL); + _harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL); _harrison._moveDiff = Common::Point(2, 1); _stripManager.addSpeaker(&_harrisonSpeaker); @@ -3586,7 +3586,7 @@ void Scene355::postInit(SceneObjectList *OwnerList) { _lyle.setStrip(1); _lyle.setAction(&_action1); _lyle._flag = BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 1 : 0; - _lyle.setDetails(355, 40, 42, 41, 1, NULL); + _lyle.setDetails(355, 40, 42, 41, 1, (SceneItem *)NULL); } if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_JAR) == 0) && @@ -3671,7 +3671,7 @@ void Scene355::postInit(SceneObjectList *OwnerList) { } _item3._sceneRegionId = 18; - _harrison.setDetails(355, 18, 20, 19, 1, NULL); + _harrison.setDetails(355, 18, 20, 19, 1, (SceneItem *)NULL); _item6.setDetails(10, 355, 2, -1, 14, 1); _item7.setDetails(11, 355, 3, -1, 15, 1); _item8.setDetails(12, 355, 4, -1, 8, 1); @@ -4944,7 +4944,7 @@ void Scene370::signal() { case 3: break; case 3707: - _object5.setDetails(370, 6, -1, 7, 1, NULL); + _object5.setDetails(370, 6, -1, 7, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.push_back(&_object5); // Deliberate fall-through case 3700: @@ -5138,7 +5138,7 @@ void Scene380::postInit(SceneObjectList *OwnerList) { _door.setVisage(380); _door.setStrip(4); _door.setPosition(Common::Point(132, 66)); - _door.setDetails(380, 12, 13, -1, 1, NULL); + _door.setDetails(380, 12, 13, -1, 1, (SceneItem *)NULL); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); @@ -5153,7 +5153,7 @@ void Scene380::postInit(SceneObjectList *OwnerList) { // Show vechile as car _vechile.setStrip(3); _vechile.setPosition(Common::Point(273, 125)); - _vechile.setDetails(580, 2, 3, -1, 1, NULL); + _vechile.setDetails(580, 2, 3, -1, 1, (SceneItem *)NULL); BF_GLOBALS._player.setVisage(129); BF_GLOBALS._walkRegions.disableRegion(12); @@ -5166,14 +5166,14 @@ void Scene380::postInit(SceneObjectList *OwnerList) { } else if (BF_GLOBALS.getFlag(onDuty)) { // Show on duty motorcycle _vechile.setStrip(2); - _vechile.setDetails(300, 11, 13, -1, 1, NULL); + _vechile.setDetails(300, 11, 13, -1, 1, (SceneItem *)NULL); _vechile.setPosition(Common::Point(252, 115)); BF_GLOBALS._player.setVisage(1341); } else { // Show off duty motorcycle _vechile.setStrip(1); - _vechile.setDetails(580, 0, 1, -1, 1, NULL); + _vechile.setDetails(580, 0, 1, -1, 1, (SceneItem *)NULL); _vechile.setPosition(Common::Point(249, 110)); BF_GLOBALS._player.setVisage(129); @@ -5479,19 +5479,19 @@ void Scene385::postInit(SceneObjectList *OwnerList) { _jim.setVisage(385); _jim.setStrip(3); _jim.setPosition(Common::Point(304, 113)); - _jim.setDetails(385, 1, -1, 2, 1, NULL); + _jim.setDetails(385, 1, -1, 2, 1, (SceneItem *)NULL); _dezi.postInit(); _dezi.setVisage(385); _dezi.setStrip(2); _dezi.setPosition(Common::Point(235, 93)); _dezi.fixPriority(120); - _dezi.setDetails(385, 3, -1, 2, 1, NULL); + _dezi.setDetails(385, 3, -1, 2, 1, (SceneItem *)NULL); _door.postInit(); _door.setVisage(385); _door.setPosition(Common::Point(107, 27)); - _door.setDetails(385, 0, -1, -1, 1, NULL); + _door.setDetails(385, 0, -1, -1, 1, (SceneItem *)NULL); BF_GLOBALS._walkRegions.disableRegion(6); @@ -5875,13 +5875,13 @@ void Scene390::postInit(TsAGE::SceneObjectList *OwnerList) { _object2.setPosition(Common::Point(38, 84)); _object2.fixPriority(50); _object2._flag = 0; - _object2.setDetails(390, 10, 17, 10, 1, NULL); + _object2.setDetails(390, 10, 17, 10, 1, (SceneItem *)NULL); _door.postInit(); _door.setVisage(390); _door.setStrip(2); _door.setPosition(Common::Point(151, 18)); - _door.setDetails(390, 5, -1, -1, 1, NULL); + _door.setDetails(390, 5, -1, -1, 1, (SceneItem *)NULL); BF_GLOBALS._player.disableControl(); _sceneMode = 3901; @@ -5892,7 +5892,7 @@ void Scene390::postInit(TsAGE::SceneObjectList *OwnerList) { _green.setVisage(392); _green.setPosition(Common::Point(241, 164)); _green.fixPriority(153); - _green.setDetails(390, 12, -1, 13, 1, NULL); + _green.setDetails(390, 12, -1, 13, 1, (SceneItem *)NULL); _green._flag = 0; } @@ -5902,7 +5902,7 @@ void Scene390::postInit(TsAGE::SceneObjectList *OwnerList) { _gangMember1.setPosition(Common::Point(273, 169)); _gangMember1.fixPriority(152); _gangMember1._flag = 0; - _gangMember1.setDetails(390, 19, -1, 20, 1, NULL); + _gangMember1.setDetails(390, 19, -1, 20, 1, (SceneItem *)NULL); _gangMember2.postInit(); _gangMember2.setVisage(396); @@ -5910,7 +5910,7 @@ void Scene390::postInit(TsAGE::SceneObjectList *OwnerList) { _gangMember2.setPosition(Common::Point(241, 153)); _gangMember2.fixPriority(152); _gangMember2._flag = 0; - _gangMember2.setDetails(390, 19, -1, 20, 1, NULL); + _gangMember2.setDetails(390, 19, -1, 20, 1, (SceneItem *)NULL); } _item1.setDetails(Rect(22, 40, 77, 67), 390, 0, -1, 1, 1, NULL); @@ -5944,7 +5944,7 @@ void Scene390::signal() { _object3.setVisage(390); _object3.setPosition(Common::Point(250, 60)); _object3.fixPriority(255); - _object3.setDetails(390, 8, -1, 9, 2, NULL); + _object3.setDetails(390, 8, -1, 9, 2, (SceneItem *)NULL); BF_GLOBALS._player.enableControl(); break; diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index deff4f2518..e966daf34e 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -547,13 +547,13 @@ void Scene410::postInit(SceneObjectList *OwnerList) { _passenger.setVisage(415); _passenger.setStrip(1); _passenger.setPosition(Common::Point(278, 92)); - _passenger.setDetails(410, 4, -1, 5, 1, NULL); + _passenger.setDetails(410, 4, -1, 5, 1, (SceneItem *)NULL); _driver.postInit(); _driver.setVisage(416); _driver.setStrip(2); _driver.setPosition(Common::Point(244, 85)); - _driver.setDetails(410, 6, -1, 7, 1, NULL); + _driver.setDetails(410, 6, -1, 7, 1, (SceneItem *)NULL); _driver.changeZoom(-1); _object5.postInit(); @@ -583,13 +583,13 @@ void Scene410::postInit(SceneObjectList *OwnerList) { _harrison.setVisage(343); _harrison.setObjectWrapper(new SceneObjectWrapper()); _harrison.animate(ANIM_MODE_1, NULL); - _harrison.setDetails(350, 12, 13, 14, 1, NULL); + _harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL); _harrison.setPosition(Common::Point(97, 185)); _harrison.changeZoom(-1); _patrolCar.postInit(); _patrolCar.setVisage(410); - _patrolCar.setDetails(410, 8, 9, 10, 1, NULL); + _patrolCar.setDetails(410, 8, 9, 10, 1, (SceneItem *)NULL); _patrolCar.fixPriority(148); _patrolCar.setPosition(Common::Point(39, 168)); @@ -640,7 +640,7 @@ void Scene410::postInit(SceneObjectList *OwnerList) { _harrison.setVisage(343); _harrison.setObjectWrapper(new SceneObjectWrapper()); _harrison.animate(ANIM_MODE_1, NULL); - _harrison.setDetails(350, 12, 13, 14, 1, NULL); + _harrison.setDetails(350, 12, 13, 14, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.addBefore(&_driver, &_harrison); _harrison.setPosition(Common::Point(-10, 124)); @@ -648,7 +648,7 @@ void Scene410::postInit(SceneObjectList *OwnerList) { _patrolCar.postInit(); _patrolCar.setVisage(410); - _patrolCar.setDetails(410, 8, 9, 10, 1, NULL); + _patrolCar.setDetails(410, 8, 9, 10, 1, (SceneItem *)NULL); _patrolCar.fixPriority(148); if (_field1FC4) { @@ -1076,7 +1076,7 @@ void Scene415::postInit(SceneObjectList *OwnerList) { _dashDrawer.setVisage(411); _dashDrawer.setStrip(3); _dashDrawer.setPosition(Common::Point(151, 97)); - _dashDrawer.setDetails(415, 22, -1, -1, 1, NULL); + _dashDrawer.setDetails(415, 22, -1, -1, 1, (SceneItem *)NULL); _animatedSeat.postInit(); _animatedSeat.setVisage(419); @@ -1140,7 +1140,7 @@ void Scene415::showBullets() { _theBullets.setFrame(2); _theBullets.setPosition(Common::Point(184, 86)); _theBullets.fixPriority(105); - _theBullets.setDetails(415, 16, 17, 18, 1, NULL); + _theBullets.setDetails(415, 16, 17, 18, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.remove(&_theBullets); BF_GLOBALS._sceneItems.push_front(&_theBullets); } @@ -1158,7 +1158,7 @@ void Scene415::showGunAndWig() { _gunAndWig.setFrame(2); _gunAndWig.setPosition(Common::Point(159, 88)); _gunAndWig.fixPriority(105); - _gunAndWig.setDetails(415, 13, 14, 15, 1, NULL); + _gunAndWig.setDetails(415, 13, 14, 15, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.remove(&_gunAndWig); BF_GLOBALS._sceneItems.push_front(&_gunAndWig); @@ -1559,13 +1559,13 @@ void Scene450::postInit(SceneObjectList *OwnerList) { _door.setVisage(450); _door.setStrip(2); _door.setPosition(Common::Point(72, 80)); - _door.setDetails(450, 15, -1, 13, 1, NULL); + _door.setDetails(450, 15, -1, 13, 1, (SceneItem *)NULL); _counterDoor.postInit(); _counterDoor.setVisage(450); _counterDoor.setPosition(Common::Point(39, 104)); _counterDoor.fixPriority(100); - _counterDoor.setDetails(450, 12, -1, 13, 1, NULL); + _counterDoor.setDetails(450, 12, -1, 13, 1, (SceneItem *)NULL); if (BF_GLOBALS._dayNumber != 3) { _pinBoy.postInit(); @@ -1598,7 +1598,7 @@ void Scene450::postInit(SceneObjectList *OwnerList) { _object2.setPosition(Common::Point(-30, 126)); ADD_MOVER_NULL(_object2, 27, 126); _object2.changeZoom(-1); - _object2.setDetails(450, 2, 18, 3, 1, NULL); + _object2.setDetails(450, 2, 18, 3, 1, (SceneItem *)NULL); BF_GLOBALS._walkRegions.disableRegion(4); diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp index 7a250e2233..692e142f55 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.cpp +++ b/engines/tsage/blue_force/blueforce_scenes5.cpp @@ -201,7 +201,7 @@ void Scene550::postInit(SceneObjectList *OwnerList) { _lyle.postInit(); _lyle.setVisage(835); _lyle.setPosition(Common::Point(139, 83)); - _lyle.setDetails(550, 29, 30, 31, 1, NULL); + _lyle.setDetails(550, 29, 30, 31, 1, (SceneItem *)NULL); _lyle.setStrip(8); BF_GLOBALS._player.setVisage(303); @@ -702,14 +702,14 @@ void Scene551::postInit(SceneObjectList *OwnerList) { _object13.setStrip(2); _object13.setPosition(Common::Point(29, 92)); _object13.fixPriority(82); - _object13.setDetails(550, 8, -1, 9, 1, NULL); + _object13.setDetails(550, 8, -1, 9, 1, (SceneItem *)NULL); if (BF_GLOBALS.getFlag(didDrunk)) { _drunk._flag = 3; _drunk.setStrip(3); _object12.show(); - _object12.setDetails(550, 25, -1, 26, 1, NULL); + _object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.push_front(&_object12); _harrison.postInit(); @@ -733,7 +733,7 @@ void Scene551::postInit(SceneObjectList *OwnerList) { _object11.setFrame(2); _object11.setPosition(Common::Point(116, 84)); _object11.fixPriority(77); - _object11.setDetails(550, 32, -1, 10, 1, NULL); + _object11.setDetails(550, 32, -1, 10, 1, (SceneItem *)NULL); _drunkStanding.postInit(); _drunkStanding._flag = 0; @@ -764,7 +764,7 @@ void Scene551::postInit(SceneObjectList *OwnerList) { _patrolCarTrunk.setFrame(1); _patrolCarTrunk.setPosition(Common::Point(149, 69)); _patrolCarTrunk.fixPriority(79); - _patrolCarTrunk.setDetails(550, 18, -1, 9, 1, NULL); + _patrolCarTrunk.setDetails(550, 18, -1, 9, 1, (SceneItem *)NULL); _object11.postInit(); _object11.setVisage(550); @@ -772,7 +772,7 @@ void Scene551::postInit(SceneObjectList *OwnerList) { _object11.setFrame(2); _object11.setPosition(Common::Point(116, 84)); _object11.fixPriority(77); - _object11.setDetails(550, 32, -1, 10, 1, NULL); + _object11.setDetails(550, 32, -1, 10, 1, (SceneItem *)NULL); _drunkStanding.postInit(); _drunkStanding._flag = 0; @@ -842,7 +842,7 @@ void Scene551::signal() { ADD_PLAYER_MOVER_NULL(_harrison, 88, 91); _object12.show(); - _object12.setDetails(550, 25, -1, 26, 1, NULL); + _object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.push_front(&_object12); BF_GLOBALS._player.enableControl(); @@ -1064,7 +1064,7 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) { scene->_nickel.setFrame(3); scene->_nickel.fixPriority(252); scene->_nickel.setPosition(Common::Point(181, 140)); - scene->_nickel.setDetails(560, 47, 48, -1, 1, NULL); + scene->_nickel.setDetails(560, 47, 48, -1, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.remove(&scene->_nickel); BF_GLOBALS._sceneItems.push_front(&scene->_nickel); } @@ -1201,7 +1201,7 @@ void Scene560::SafeInset::signal() { scene->_nickel.setFrame(3); scene->_nickel.fixPriority(252); scene->_nickel.setPosition(Common::Point(181, 140)); - scene->_nickel.setDetails(560, 47, 48, -1, 1, NULL); + scene->_nickel.setDetails(560, 47, 48, -1, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.remove(&scene->_nickel); BF_GLOBALS._sceneItems.push_front(&scene->_nickel); } @@ -1405,7 +1405,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) { _box.setStrip(4); _box.setFrame(1); _box.setPosition(Common::Point(295, 37)); - _box.setDetails(560, 41, 42, -1, 1, NULL); + _box.setDetails(560, 41, 42, -1, 1, (SceneItem *)NULL); } _deskChair.postInit(); @@ -1454,7 +1454,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) { } _computer.setDetails(Rect(16, 77, 58, 107), 560, 2, -1, -1, 1, NULL); - _deskChair.setDetails(560, 3, -1, -1, 1, NULL); + _deskChair.setDetails(560, 3, -1, -1, 1, (SceneItem *)NULL); _chair.setDetails(Rect(163, 64, 196, 102), 560, 13, 25, 36, 1, NULL); _lamp.setDetails(Rect(197, 43, 214, 56), 560, 7, 19, 30, 1, NULL); _item4.setDetails(Rect(121, 18, 156, 54), 560, 8, 20, 31, 1, NULL); @@ -2039,7 +2039,7 @@ void Scene570::postInit(SceneObjectList *OwnerList) { _powerSwitch.setStrip(4); _powerSwitch.setFrame(1); _powerSwitch.setPosition(Common::Point(163, 131)); - _powerSwitch.setDetails(570, 1, 15, -1, 1, NULL); + _powerSwitch.setDetails(570, 1, 15, -1, 1, (SceneItem *)NULL); _floppyDrive.setDetails(Rect(258, 111, 303, 120), 570, 0, 15, -1, 1, NULL); _item11.setDetails(0, 570, 15, 15, 15, 1); @@ -2070,7 +2070,7 @@ void Scene570::signal() { _printerIcon.setFrame(3); _printerIcon.setPosition(Common::Point(172, 71)); _printerIcon.fixPriority(2); - _printerIcon.setDetails(570, 14, 15, -1, 2, NULL); + _printerIcon.setDetails(570, 14, 15, -1, 2, (SceneItem *)NULL); _iconManager.setup(2); _folder1.setDetails(1, 1, 0, 2, SCENE570_C_DRIVE); @@ -2201,7 +2201,7 @@ void Scene580::postInit(SceneObjectList *OwnerList) { _door.setStrip(4); _door.setPosition(Common::Point(168, 41)); _door.hide(); - _door.setDetails(580, 5, -1, -1, 1, NULL); + _door.setDetails(580, 5, -1, -1, 1, (SceneItem *)NULL); _vechile.postInit(); _vechile.setVisage(580); @@ -2219,7 +2219,7 @@ void Scene580::postInit(SceneObjectList *OwnerList) { _vechile.changeZoom(90); _vechile.setStrip(3); _vechile.setPosition(Common::Point(165, 76)); - _vechile.setDetails(580, 2, 3, -1, 1, NULL); + _vechile.setDetails(580, 2, 3, -1, 1, (SceneItem *)NULL); BF_GLOBALS._player.setVisage(303); @@ -2233,13 +2233,13 @@ void Scene580::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS.getFlag(onDuty)) { _vechile.setStrip(1); _vechile.setFrame(2); - _vechile.setDetails(300, 11, 13, -1, 1, NULL); + _vechile.setDetails(300, 11, 13, -1, 1, (SceneItem *)NULL); BF_GLOBALS._player.setVisage(304); } else { _vechile.setStrip(2); _vechile.setFrame(3); - _vechile.setDetails(580, 0, 1, -1, 1, NULL); + _vechile.setDetails(580, 0, 1, -1, 1, (SceneItem *)NULL); BF_GLOBALS._player.setVisage(303); } @@ -2468,12 +2468,12 @@ void Scene590::postInit(SceneObjectList *OwnerList) { _skip.postInit(); _skip.setVisage(693); _skip.setPosition(Common::Point(271, 117)); - _skip.setDetails(590, 26, -1, 27, 1, NULL); + _skip.setDetails(590, 26, -1, 27, 1, (SceneItem *)NULL); _laura.postInit(); _laura.setVisage(692); _laura.setPosition(Common::Point(248, 115)); - _laura.setDetails(590, 24, -1, 25, 1, NULL); + _laura.setDetails(590, 24, -1, 25, 1, (SceneItem *)NULL); } } diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp index 5fb1b562e0..e5e7c71bef 100644 --- a/engines/tsage/blue_force/blueforce_scenes6.cpp +++ b/engines/tsage/blue_force/blueforce_scenes6.cpp @@ -410,7 +410,7 @@ bool Scene690::Object2::startAction(CursorType action, Event &event) { scene->_object6.postInit(); scene->_object6.hide(); scene->_object6.fixPriority(1); - scene->_object6.setDetails(690, 21, 17, 23, 1, NULL); + scene->_object6.setDetails(690, 21, 17, 23, 1, (SceneItem *)NULL); BF_GLOBALS._player.disableControl(); scene->_sceneMode = 6902; @@ -447,30 +447,30 @@ void Scene690::postInit(SceneObjectList *OwnerList) { _object1.setStrip2(2); _object1.fixPriority(188); _object1.setPosition(Common::Point(50, 166)); - _object1.setDetails(690, 4, 17, 26, 1, NULL); + _object1.setDetails(690, 4, 17, 26, 1, (SceneItem *)NULL); _object3.postInit(); _object3.setVisage(690); _object3.fixPriority(100); _object3.setPosition(Common::Point(238, 125)); - _object3.setDetails(690, 7, 17, 28, 1, NULL); + _object3.setDetails(690, 7, 17, 28, 1, (SceneItem *)NULL); _object2.postInit(); _object2.setVisage(694); _object2.setStrip2(3); _object2.fixPriority(125); _object2.setPosition(Common::Point(100, 134)); - _object2.setDetails(690, 12, -1, 11, 1, NULL); + _object2.setDetails(690, 12, -1, 11, 1, (SceneItem *)NULL); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.disableControl(); BF_GLOBALS._player._moveDiff.x = 8; _object4.postInit(); - _object4.setDetails(690, 13, -1, -1, 1, NULL); + _object4.setDetails(690, 13, -1, -1, 1, (SceneItem *)NULL); _object5.postInit(); - _object5.setDetails(690, 14, -1, -1, 1, NULL); + _object5.setDetails(690, 14, -1, -1, 1, (SceneItem *)NULL); _sceneMode = 6903; setAction(&_sequenceManager, this, 6903, &BF_GLOBALS._player, &_object3, &_object4, &_object5, NULL); diff --git a/engines/tsage/blue_force/blueforce_scenes7.cpp b/engines/tsage/blue_force/blueforce_scenes7.cpp index 7b84e3ccdd..bb29ad1f34 100644 --- a/engines/tsage/blue_force/blueforce_scenes7.cpp +++ b/engines/tsage/blue_force/blueforce_scenes7.cpp @@ -172,10 +172,10 @@ void Scene710::postInit(SceneObjectList *OwnerList) { _stick.animate(ANIM_MODE_2, NULL); _stick.setPosition(Common::Point(650, 160)); _stick._moveDiff.x = 16; - _stick.setDetails(710, 4, -1, -1, 1, NULL); - _laura.setDetails(710, 2, -1, -1, 1, NULL); - _kid.setDetails(710, 6, -1, -1, 1, NULL); - _dog.setDetails(710, 0, -1, -1, 1, NULL); + _stick.setDetails(710, 4, -1, -1, 1, (SceneItem *)NULL); + _laura.setDetails(710, 2, -1, -1, 1, (SceneItem *)NULL); + _kid.setDetails(710, 6, -1, -1, 1, (SceneItem *)NULL); + _dog.setDetails(710, 0, -1, -1, 1, (SceneItem *)NULL); _item1.setDetails(Rect(555, 68, 583, 101), 710, 7, 23, -1, 1, NULL); _item2.setDetails(Rect(583, 46, 611, 78), 710, 7, 23, -1, 1, NULL); diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp index 32cd376891..ceee748374 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.cpp +++ b/engines/tsage/blue_force/blueforce_scenes8.cpp @@ -1672,12 +1672,12 @@ void Scene830::postInit(SceneObjectList *OwnerList) { _rentalBoat.setStrip(1); _rentalBoat.setPosition(Common::Point(271, 146)); _rentalBoat.fixPriority(90); - _rentalBoat.setDetails(830, 0, 1, 2, 1, NULL); + _rentalBoat.setDetails(830, 0, 1, 2, 1, (SceneItem *)NULL); } _door.postInit(); _door.setVisage(830); - _door.setDetails(830, 3, 4, -1, 1, NULL); + _door.setDetails(830, 3, 4, -1, 1, (SceneItem *)NULL); _door.setStrip((BF_GLOBALS._dayNumber == 2) ? 4 : 3); _door.setPosition(Common::Point(182, 97)); @@ -1702,7 +1702,7 @@ void Scene830::postInit(SceneObjectList *OwnerList) { _object5.setStrip(2); _object5.setFrame(2); _object5.setPosition(Common::Point(126, 133)); - _object5.setDetails(830, 7, 8, -1, 1, NULL); + _object5.setDetails(830, 7, 8, -1, 1, (SceneItem *)NULL); } break; case 5: @@ -1718,7 +1718,7 @@ void Scene830::postInit(SceneObjectList *OwnerList) { _lyle.setStrip(4); _lyle.setPosition(Common::Point(180, 154)); _lyle._moveDiff = Common::Point(2, 0); - _lyle.setDetails(830, 28, -1, 29, 1, NULL); + _lyle.setDetails(830, 28, -1, 29, 1, (SceneItem *)NULL); _field18AC = 1; } @@ -1950,7 +1950,7 @@ void Scene840::BoatKeysInset::postInit(SceneObjectList *OwnerList) { _rentalKeys.setFrame(3); _rentalKeys.setPosition(Common::Point(120, 132)); _rentalKeys.fixPriority(255); - _rentalKeys.setDetails(840, 52, 8, -1, 2, NULL); + _rentalKeys.setDetails(840, 52, 8, -1, 2, (SceneItem *)NULL); } if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) != 1) { @@ -1960,7 +1960,7 @@ void Scene840::BoatKeysInset::postInit(SceneObjectList *OwnerList) { _waveKeys.setFrame(2); _waveKeys.setPosition(Common::Point(201, 91)); _waveKeys.fixPriority(255); - _waveKeys.setDetails(840, 53, 8, -1, 2, NULL); + _waveKeys.setDetails(840, 53, 8, -1, 2, (SceneItem *)NULL); } _v1B4 = _v1B6 = 0; @@ -2035,7 +2035,7 @@ bool Scene840::BoatKeysInset::startAction(CursorType action, Event &event) { _rentalKeys.setFrame(3); _rentalKeys.setPosition(Common::Point(120, 132)); _rentalKeys.fixPriority(255); - _rentalKeys.setDetails(840, 52, 8, -1, 2, NULL); + _rentalKeys.setDetails(840, 52, 8, -1, 2, (SceneItem *)NULL); } if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1) { @@ -2046,7 +2046,7 @@ bool Scene840::BoatKeysInset::startAction(CursorType action, Event &event) { _waveKeys.setFrame(2); _waveKeys.setPosition(Common::Point(201, 91)); _waveKeys.fixPriority(255); - _waveKeys.setDetails(840, 53, 8, -1, 2, NULL); + _waveKeys.setDetails(840, 53, 8, -1, 2, (SceneItem *)NULL); } BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 0); @@ -2259,7 +2259,7 @@ void Scene840::postInit(SceneObjectList *OwnerList) { _doors.setVisage(840); _doors.setStrip(3); _doors.setPosition(Common::Point(157, 81)); - _doors.setDetails(840, 0, 1, 2, 1, NULL); + _doors.setDetails(840, 0, 1, 2, 1, (SceneItem *)NULL); _carter.postInit(); _carter.setVisage(843); @@ -2279,7 +2279,7 @@ void Scene840::postInit(SceneObjectList *OwnerList) { _item10.setDetails(Rect(199, 56, 236, 80), 840, 24, 14, 12, 1, NULL); _item11.setDetails(Rect(256, 94, 319, 118), 840, 25, 15, 13, 1, NULL); _item18.setDetails(6, 840, 38, 39, 40, 1); - _carter.setDetails(840, 3, 4, 5, 1, NULL); + _carter.setDetails(840, 3, 4, 5, 1, (SceneItem *)NULL); _item8.setDetails(Rect(259, 4, 319, 87), 840, 22, 15, 13, 1, NULL); _item15.setDetails(2, 840, 32, 33, 34, 1); _coins.setDetails(3, 840, -1, 6, 7, 1); @@ -2295,7 +2295,7 @@ void Scene840::postInit(SceneObjectList *OwnerList) { _boatKeys.setFrame(1); _boatKeys.setPosition(Common::Point(250, 83)); _boatKeys.fixPriority(120); - _boatKeys.setDetails(840, -1, 8, 9, 2, NULL); + _boatKeys.setDetails(840, -1, 8, 9, 2, (SceneItem *)NULL); _field1AC0 = 1; } @@ -2387,7 +2387,7 @@ void Scene840::signal() { case 4: _sceneMode = 8403; _boatKeys.postInit(); - _boatKeys.setDetails(840, -1, 8, 9, 2, NULL); + _boatKeys.setDetails(840, -1, 8, 9, 2, (SceneItem *)NULL); setAction(&_sequenceManager1, this, 8403, &_carter, &_boatKeys, NULL); break; case 5: @@ -2679,7 +2679,7 @@ void Scene860::postInit(SceneObjectList *OwnerList) { _object2.setVisage(880); _object2.setPosition(Common::Point(196, 81)); BF_GLOBALS._sceneItems.push_back(&_object2); - _object2.setDetails(860, 0, 1, -1, 1, NULL); + _object2.setDetails(860, 0, 1, -1, 1, (SceneItem *)NULL); _object2.fixPriority(20); _neRect = Rect(0, 0, 0, 0); @@ -2876,7 +2876,7 @@ void Scene870::CrateInset::initContents() { _jar.setPosition(Common::Point(scene->_crateInset._position.x + 5, scene->_crateInset._position.y - 26)); _jar.fixPriority(251); - _jar.setDetails(870, 39, 40, 41, 1, NULL); + _jar.setDetails(870, 39, 40, 41, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.remove(&_jar); BF_GLOBALS._sceneItems.push_front(&_jar); } @@ -2890,7 +2890,7 @@ void Scene870::CrateInset::initContents() { _rags.setPosition(Common::Point(scene->_crateInset._position.x - 18, scene->_crateInset._position.y - 18)); _rags.fixPriority(251); - _rags.setDetails(870, 42, 43, 44, 1, NULL); + _rags.setDetails(870, 42, 43, 44, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.remove(&_rags); BF_GLOBALS._sceneItems.push_front(&_rags); } @@ -3063,7 +3063,7 @@ void Scene870::postInit(SceneObjectList *OwnerList) { _lyle.setObjectWrapper(new SceneObjectWrapper()); _lyle.animate(ANIM_MODE_1, NULL); _lyle._moveDiff = Common::Point(2, 1); - _lyle.setDetails(870, 27, 28, 29, 1, NULL); + _lyle.setDetails(870, 27, 28, 29, 1, (SceneItem *)NULL); } _yacht.postInit(); @@ -3071,7 +3071,7 @@ void Scene870::postInit(SceneObjectList *OwnerList) { _yacht.setStrip(4); _yacht.setFrame(4); _yacht.setPosition(Common::Point(232, 19)); - _yacht.setDetails(870, 30, 31, 32, 1, NULL); + _yacht.setDetails(870, 30, 31, 32, 1, (SceneItem *)NULL); if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_FLARE) == 0) && (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355)) { @@ -3081,9 +3081,9 @@ void Scene870::postInit(SceneObjectList *OwnerList) { _green.setPosition(Common::Point(127, 109)); if (BF_GLOBALS._bookmark == bFinishedWGreen) { - _green.setDetails(870, 51, 54, 53, 1, NULL); + _green.setDetails(870, 51, 54, 53, 1, (SceneItem *)NULL); } else { - _green.setDetails(870, 51, 52, 53, 1, NULL); + _green.setDetails(870, 51, 52, 53, 1, (SceneItem *)NULL); } } } @@ -3358,11 +3358,11 @@ void Scene880::postInit(SceneObjectList *OwnerList) { _object2.postInit(); _object2.setVisage(880); _object2.setPosition(Common::Point(209, 76)); - _object2.setDetails(880, 4, 5, 6, 1, NULL); + _object2.setDetails(880, 4, 5, 6, 1, (SceneItem *)NULL); _object4.postInit(); _object4.setVisage(875); - _object4.setDetails(880, 7, -1, 9, 1, NULL); + _object4.setDetails(880, 7, -1, 9, 1, (SceneItem *)NULL); _object5.postInit(); _object5.setVisage(874); diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index ea54bf6b1d..f5705eb471 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -442,7 +442,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _body.fixPriority(120); _body.setVisage(901); _body.setPosition(Common::Point(159,128)); - _body.setDetails(900, 15, 16, 17, ANIM_MODE_1, NULL); + _body.setDetails(900, 15, 16, 17, ANIM_MODE_1, (SceneItem *)NULL); } if (BF_GLOBALS._sceneManager._previousScene == 910) { _sceneBounds.moveTo(639, 0); @@ -465,7 +465,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _dog.setVisage(902); _dog.setPosition(Common::Point(845, 135)); _dog.fixPriority(122); - _dog.setDetails(900, 8, -1, 9, 1, NULL); + _dog.setDetails(900, 8, -1, 9, 1, (SceneItem *)NULL); if (_dog._flag == 0) { _dog.animate(ANIM_MODE_1, NULL); @@ -524,7 +524,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _lyle.postInit(); _lyle._moveDiff.y = 7; _lyle._flags |= OBJFLAG_CHECK_REGION; - _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL); + _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL); _lyleHatSpeaker._xp = 210; _jakeJacketSpeaker._xp = 75; setAction(&_sequenceManager1, this, 9013, &BF_GLOBALS._player, &_lyle, NULL); @@ -537,7 +537,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _lyle.setPosition(Common::Point(780, 153)); _lyle._moveDiff.y = 7; _lyle._flags |= 0x1000; - _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL); + _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL); _lyle.animate(ANIM_MODE_1, NULL); _lyle.setObjectWrapper(new SceneObjectWrapper()); } @@ -553,7 +553,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS.getFlag(fWithLyle)) { _lyle.postInit(); _lyle._flags |= 0x1000; - _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL); + _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL); setAction(&_sequenceManager1, this, 9014, &BF_GLOBALS._player, &_door, &_lyle, NULL); } else setAction(&_sequenceManager1, this, 9002, &BF_GLOBALS._player, &_door, NULL); @@ -2019,10 +2019,10 @@ void Scene910::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS._v4CEE2 == 0) _item16.setDetails(Rect(265, 18, 319, 102), 910, -1, -1, -1, 1, NULL); - _breakerBox.setDetails(910, 6, -1, -1, 1, NULL); + _breakerBox.setDetails(910, 6, -1, -1, 1, (SceneItem *)NULL); _item15.setDetails(Rect(0, 0, 320, 170), 910, 0, 1, 2, 1, NULL); - _yellowCord.setDetails(910, 52, 53, -1, 1, NULL); - _blackCord.setDetails(910, 54, 55, -1, 1, NULL); + _yellowCord.setDetails(910, 52, 53, -1, 1, (SceneItem *)NULL); + _blackCord.setDetails(910, 54, 55, -1, 1, (SceneItem *)NULL); _item2.setDetails(3, 910, 22, -1, 24, 1); _item4.setDetails(1, 910, 16, 17, 18, 1); _item8.setDetails(4, 910, 25, 26, 27, 1); @@ -2032,7 +2032,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _item9.setDetails(Rect(266, 39, 274, 70), 910, 43, 44, 45, 1, NULL); _item10.setDetails(Rect(276, 27, 288, 83), 910, 46, 47, 48, 1, NULL); _item11.setDetails(Rect(295, 42, 312, 87), 910, 49, 50, 51, 1, NULL); - _fakeWall.setDetails(910, 28, -1, 30, 1, NULL); + _fakeWall.setDetails(910, 28, -1, 30, 1, (SceneItem *)NULL); _item3.setDetails(7, 910, 59, 60, 61, 1); _item5.setDetails(2, 910, 19, 20, 21, 1); _backWall.setDetails(6, 910, 28, 29, 30, 1); @@ -2600,7 +2600,7 @@ void Scene910::signal() { BF_GLOBALS.setFlag(fBackupAt340); BF_GLOBALS._v4CEE2 = 4; _stuart.postInit(); - _nico.setDetails(910, 72, 73, 74, 3, NULL); + _nico.setDetails(910, 72, 73, 74, 3, (SceneItem *)NULL); _stuart.setDetails(910, 66, 67, 68, 5, &_nico); BF_GLOBALS._v4CEE8 = 0; _sceneMode = 9121; @@ -3358,14 +3358,14 @@ void Scene930::postInit(SceneObjectList *OwnerList) { _box.setVisage(930); _box.setStrip(1); _box.setPosition(Common::Point(223, 21)); - _box.setDetails(930, 66, 67, 68, 1, NULL); + _box.setDetails(930, 66, 67, 68, 1, (SceneItem *)NULL); } _boots.postInit(); _boots.setVisage(930); _boots.setStrip(2); _boots.setPosition(Common::Point(9, 161)); _boots.fixPriority(120); - _boots.setDetails(930, 62, 63, 64, 1, NULL); + _boots.setDetails(930, 62, 63, 64, 1, (SceneItem *)NULL); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(368); -- 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') 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') 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 c261cbd02b0d4f19e2a8a384004bb0e1cbe56fde Mon Sep 17 00:00:00 2001 From: Christoph Mallon Date: Tue, 27 Dec 2011 12:05:06 +0100 Subject: TSAGE: Make lots of globals const. --- engines/tsage/staticres.cpp | 240 +++++++++++++++++++++---------------------- engines/tsage/staticres.h | 242 ++++++++++++++++++++++---------------------- 2 files changed, 241 insertions(+), 241 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 1f963f13fb..7d9247b4a3 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -64,126 +64,126 @@ const byte CURSOR_WALK_DATA[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09 }; -const char *LOOK_SCENE_HOTSPOT = "You see nothing special."; -const char *USE_SCENE_HOTSPOT = "That accomplishes nothing."; -const char *TALK_SCENE_HOTSPOT = "Yak, yak."; -const char *SPECIAL_SCENE_HOTSPOT = "That is a unique use for that."; -const char *DEFAULT_SCENE_HOTSPOT = "That accomplishes nothing."; -const char *SAVE_ERROR_MSG = "Error occurred saving game. Please do not try to restore this game!"; -const char *SAVING_NOT_ALLOWED_MSG = "Saving is not allowed at this time."; -const char *RESTORING_NOT_ALLOWED_MSG = "Restoring is not allowed at this time."; -const char *INV_EMPTY_MSG = "You have nothing in your possesion."; - -const char *QUIT_CONFIRM_MSG = "Do you want to quit playing this game?"; -const char *RESTART_MSG = "Do you want to restart this game?"; -const char *GAME_PAUSED_MSG = "Game is paused."; -const char *OK_BTN_STRING = " Ok "; -const char *CANCEL_BTN_STRING = "Cancel"; -const char *QUIT_BTN_STRING = " Quit "; -const char *RESTART_BTN_STRING = "Restart"; -const char *SAVE_BTN_STRING = "Save"; -const char *RESTORE_BTN_STRING = "Restore"; -const char *SOUND_BTN_STRING = "Sound"; -const char *RESUME_BTN_STRING = " Resume \rplay"; -const char *LOOK_BTN_STRING = "Look"; -const char *PICK_BTN_STRING = "Pick"; +char const *const LOOK_SCENE_HOTSPOT = "You see nothing special."; +char const *const USE_SCENE_HOTSPOT = "That accomplishes nothing."; +char const *const TALK_SCENE_HOTSPOT = "Yak, yak."; +char const *const SPECIAL_SCENE_HOTSPOT = "That is a unique use for that."; +char const *const DEFAULT_SCENE_HOTSPOT = "That accomplishes nothing."; +char const *const SAVE_ERROR_MSG = "Error occurred saving game. Please do not try to restore this game!"; +char const *const SAVING_NOT_ALLOWED_MSG = "Saving is not allowed at this time."; +char const *const RESTORING_NOT_ALLOWED_MSG = "Restoring is not allowed at this time."; +char const *const INV_EMPTY_MSG = "You have nothing in your possesion."; + +char const *const QUIT_CONFIRM_MSG = "Do you want to quit playing this game?"; +char const *const RESTART_MSG = "Do you want to restart this game?"; +char const *const GAME_PAUSED_MSG = "Game is paused."; +char const *const OK_BTN_STRING = " Ok "; +char const *const CANCEL_BTN_STRING = "Cancel"; +char const *const QUIT_BTN_STRING = " Quit "; +char const *const RESTART_BTN_STRING = "Restart"; +char const *const SAVE_BTN_STRING = "Save"; +char const *const RESTORE_BTN_STRING = "Restore"; +char const *const SOUND_BTN_STRING = "Sound"; +char const *const RESUME_BTN_STRING = " Resume \rplay"; +char const *const LOOK_BTN_STRING = "Look"; +char const *const PICK_BTN_STRING = "Pick"; namespace Ringworld { // Dialog resources -const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\ +char const *const HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\ \x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\ F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; -const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; -const char *START_PLAY_BTN_STRING = " Start Play "; -const char *INTRODUCTION_BTN_STRING = "Introduction"; -const char *OPTIONS_MSG = "\x01Options..."; +char const *const WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; +char const *const START_PLAY_BTN_STRING = " Start Play "; +char const *const INTRODUCTION_BTN_STRING = "Introduction"; +char const *const OPTIONS_MSG = "\x01Options..."; // Scene specific resources -const char *EXIT_MSG = " EXIT "; -const char *SCENE6100_CAREFUL = "Be careful! The probe cannot handle too much of that."; -const char *SCENE6100_TOUGHER = "Hey! This is tougher than it looks!"; -const char *SCENE6100_ONE_MORE_HIT = "You had better be more careful. One more hit like that \ +char const *const EXIT_MSG = " EXIT "; +char const *const SCENE6100_CAREFUL = "Be careful! The probe cannot handle too much of that."; +char const *const SCENE6100_TOUGHER = "Hey! This is tougher than it looks!"; +char const *const SCENE6100_ONE_MORE_HIT = "You had better be more careful. One more hit like that \ and the probe may be destroyed."; -const char *SCENE6100_DOING_BEST = "I'm doing the best I can. I just hope it holds together!"; -const char *SCENE6100_REPAIR = "\r\rQuinn and Seeker repair the probe...."; -const char *SCENE6100_ROCKY_AREA = "The rocky area should be directly ahead of you. Do you see it?"; -const char *SCENE6100_REPLY = "Yes. Now if I can just avoid those sunbeams."; -const char *SCENE6100_TAKE_CONTROLS = "You had better take the controls Seeker. My hands are sweating."; -const char *SCENE6100_SURPRISE = "You surprise me Quinn. I would have thought you of hardier stock."; -const char *SCENE6100_SWEAT = "Humans sweat, Kzin twitch their tail. What's the difference?"; -const char *SCENE6100_VERY_WELL = "Very well. I will retrieve the stasis box and return the probe. \ +char const *const SCENE6100_DOING_BEST = "I'm doing the best I can. I just hope it holds together!"; +char const *const SCENE6100_REPAIR = "\r\rQuinn and Seeker repair the probe...."; +char const *const SCENE6100_ROCKY_AREA = "The rocky area should be directly ahead of you. Do you see it?"; +char const *const SCENE6100_REPLY = "Yes. Now if I can just avoid those sunbeams."; +char const *const SCENE6100_TAKE_CONTROLS = "You had better take the controls Seeker. My hands are sweating."; +char const *const SCENE6100_SURPRISE = "You surprise me Quinn. I would have thought you of hardier stock."; +char const *const SCENE6100_SWEAT = "Humans sweat, Kzin twitch their tail. What's the difference?"; +char const *const SCENE6100_VERY_WELL = "Very well. I will retrieve the stasis box and return the probe. \ Wait for it's return in the lander bay."; -const char *DEMO_HELP_MSG = " Help...\rF2 - Sound Options\rF3 - Exit demo\r\rPress ENTER\rto continue"; -const char *DEMO_PAUSED_MSG = "Ringworld\x14 demo is paused"; -const char *DEMO_EXIT_MSG = "Press ENTER to resume the Ringworld\x14 demo. Press ESC to exit"; -const char *EXIT_BTN_STRING = "Exit"; -const char *DEMO_BTN_STRING = "Demo"; -const char *DEMO_RESUME_BTN_STRING = "Resume"; +char const *const DEMO_HELP_MSG = " Help...\rF2 - Sound Options\rF3 - Exit demo\r\rPress ENTER\rto continue"; +char const *const DEMO_PAUSED_MSG = "Ringworld\x14 demo is paused"; +char const *const DEMO_EXIT_MSG = "Press ENTER to resume the Ringworld\x14 demo. Press ESC to exit"; +char const *const EXIT_BTN_STRING = "Exit"; +char const *const DEMO_BTN_STRING = "Demo"; +char const *const DEMO_RESUME_BTN_STRING = "Resume"; } // End of namespace Ringworld namespace BlueForce { // Dialog resources -const char *HELP_MSG = "Blue Force\x14\rScummVM Version\r\r\ +char const *const HELP_MSG = "Blue Force\x14\rScummVM Version\r\r\ Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\ F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game"; -const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; -const char *START_PLAY_BTN_STRING = " Play "; -const char *INTRODUCTION_BTN_STRING = " Watch "; -const char *OPTIONS_MSG = "Options..."; +char const *const WATCH_INTRO_MSG = "Do you wish to watch the introduction?"; +char const *const START_PLAY_BTN_STRING = " Play "; +char const *const INTRODUCTION_BTN_STRING = " Watch "; +char const *const OPTIONS_MSG = "Options..."; // Blue Force general messages -const char *BF_NAME = "Blue Force"; -const char *BF_COPYRIGHT = " Copyright, 1993 Tsunami Media, Inc."; -const char *BF_ALL_RIGHTS_RESERVED = "All Rights Reserved"; -const char *BF_19840518 = "May 18, 1984"; -const char *BF_19840515 = "May 15, 1984"; -const char *BF_3_DAYS = "Three days later"; -const char *BF_11_YEARS = "Eleven years later."; -const char *BF_NEXT_DAY = "The Next Day"; -const char *BF_ACADEMY = "Here we are at the Academy"; +char const *const BF_NAME = "Blue Force"; +char const *const BF_COPYRIGHT = " Copyright, 1993 Tsunami Media, Inc."; +char const *const BF_ALL_RIGHTS_RESERVED = "All Rights Reserved"; +char const *const BF_19840518 = "May 18, 1984"; +char const *const BF_19840515 = "May 15, 1984"; +char const *const BF_3_DAYS = "Three days later"; +char const *const BF_11_YEARS = "Eleven years later."; +char const *const BF_NEXT_DAY = "The Next Day"; +char const *const BF_ACADEMY = "Here we are at the Academy"; // Scene 50 hotspots -const char *GRANDMA_FRANNIE = "Grandma Frannie"; -const char *MARINA = "Marina"; -const char *POLICE_DEPARTMENT = "Police Department"; -const char *TONYS_BAR = "Tony's Bar"; -const char *CHILD_PROTECTIVE_SERVICES = "Child Protective Services"; -const char *ALLEY_CAT = "Alley Cat"; -const char *CITY_HALL_JAIL = "City Hall & Jail"; -const char *JAMISON_RYAN = "Jamison & Ryan"; -const char *BIKINI_HUT = "Bikini Hut"; +char const *const GRANDMA_FRANNIE = "Grandma Frannie"; +char const *const MARINA = "Marina"; +char const *const POLICE_DEPARTMENT = "Police Department"; +char const *const TONYS_BAR = "Tony's Bar"; +char const *const CHILD_PROTECTIVE_SERVICES = "Child Protective Services"; +char const *const ALLEY_CAT = "Alley Cat"; +char const *const CITY_HALL_JAIL = "City Hall & Jail"; +char const *const JAMISON_RYAN = "Jamison & Ryan"; +char const *const BIKINI_HUT = "Bikini Hut"; // Scene 60 radio messages -const char *RADIO_BTN_LIST[8] = { "10-2 ", "10-4 ", "10-13", "10-15", "10-27", "10-35", "10-97", "10-98" }; +char const *const RADIO_BTN_LIST[8] = { "10-2 ", "10-4 ", "10-13", "10-15", "10-27", "10-35", "10-97", "10-98" }; // Scene 570 computer messageS -const char *SCENE570_PASSWORD = "PASSWORD -> "; -const char *SCENE570_C_DRIVE = "C:\\"; -const char *SCENE570_RING = "RING"; -const char *SCENE570_PROTO = "PROTO"; -const char *SCENE570_WACKY = "WACKY"; -const char *SCENE570_COBB = "COBB"; -const char *SCENE570_LETTER = "LETTER"; -const char *SCENE570_RINGEXE = "RINGEXE"; -const char *SCENE570_RINGDATA = "RINGDATA"; -const char *SCENE570_PROTOEXE = "PROTOEXE"; -const char *SCENE570_PROTODATA = "PROTODATA"; -const char *SCENE570_WACKYEXE = "WACKYEXE"; -const char *SCENE570_WACKYDATA = "WACKYDATA"; +char const *const SCENE570_PASSWORD = "PASSWORD -> "; +char const *const SCENE570_C_DRIVE = "C:\\"; +char const *const SCENE570_RING = "RING"; +char const *const SCENE570_PROTO = "PROTO"; +char const *const SCENE570_WACKY = "WACKY"; +char const *const SCENE570_COBB = "COBB"; +char const *const SCENE570_LETTER = "LETTER"; +char const *const SCENE570_RINGEXE = "RINGEXE"; +char const *const SCENE570_RINGDATA = "RINGDATA"; +char const *const SCENE570_PROTOEXE = "PROTOEXE"; +char const *const SCENE570_PROTODATA = "PROTODATA"; +char const *const SCENE570_WACKYEXE = "WACKYEXE"; +char const *const SCENE570_WACKYDATA = "WACKYDATA"; // Scene 180 messages -const char *THE_NEXT_DAY = "The Next Day"; +char const *const THE_NEXT_DAY = "The Next Day"; } // End of namespace BlueForce namespace Ringworld2 { -const char *CONSOLE_MESSAGES[] = { +char const *const CONSOLE_MESSAGES[] = { NULL, "Select Language", "Computer Services", "Food Services", "Entertainment Services", "Main Menu", "Exit Menu", "Previous Menu", "Interworld", "Hero's Tongue", "Personal Log", "Database", "Starchart", "Iso-Opto Disk Reader", "Eject Disk", "Meals", "Snacks", @@ -193,41 +193,41 @@ const char *CONSOLE_MESSAGES[] = { }; // Scene 825 Autodoc messages -const char *MAIN_MENU = "main menu"; -const char *DIAGNOSIS = "diagnosis"; -const char *ADVANCED_PROCEDURES = "advanced procedures"; -const char *VITAL_SIGNS = "vital signs"; -const char *OPEN_DOOR = "open door"; -const char *TREATMENTS = "treatments"; -const char *NO_MALADY_DETECTED = "no malady detected"; -const char *NO_TREATMENT_REQUIRED = "no treatment required"; -const char *ACCESS_CODE_REQUIRED = "access code required"; -const char *INVALID_ACCESS_CODE = "invalid access code"; -const char *FOREIGN_OBJECT_EXTRACTED = "foreign object extracted"; - -const char *HELP_MSG = "\x1\rRETURN TO\r RINGWORLD\x14"; -const char *CHAR_TITLE = "\x01Select Character:"; -const char *CHAR_QUINN_MSG = " Quinn "; -const char *CHAR_SEEKER_MSG = " Seeker "; -const char *CHAR_MIRANDA_MSG = "Miranda"; -const char *CHAR_CANCEL_MSG = " Cancel "; - -const char *GAME_VERSION = "ScummVM Version"; -const char *SOUND_OPTIONS = "Sound options"; -const char *QUIT_GAME = "Quit"; -const char *RESTART_GAME = "Restart"; -const char *SAVE_GAME = "Save game"; -const char *RESTORE_GAME = "Restore game"; -const char *SHOW_CREDITS = "Show credits"; -const char *PAUSE_GAME = "Pause game"; -const char *RESUME_PLAY = " Resume play "; -const char *F2 = "F2"; -const char *F3 = "F3"; -const char *F4 = "F4"; -const char *F5 = "F5"; -const char *F7 = "F7"; -const char *F8 = "F8"; -const char *F10 = "F10"; +char const *const MAIN_MENU = "main menu"; +char const *const DIAGNOSIS = "diagnosis"; +char const *const ADVANCED_PROCEDURES = "advanced procedures"; +char const *const VITAL_SIGNS = "vital signs"; +char const *const OPEN_DOOR = "open door"; +char const *const TREATMENTS = "treatments"; +char const *const NO_MALADY_DETECTED = "no malady detected"; +char const *const NO_TREATMENT_REQUIRED = "no treatment required"; +char const *const ACCESS_CODE_REQUIRED = "access code required"; +char const *const INVALID_ACCESS_CODE = "invalid access code"; +char const *const FOREIGN_OBJECT_EXTRACTED = "foreign object extracted"; + +char const *const HELP_MSG = "\x1\rRETURN TO\r RINGWORLD\x14"; +char const *const CHAR_TITLE = "\x01Select Character:"; +char const *const CHAR_QUINN_MSG = " Quinn "; +char const *const CHAR_SEEKER_MSG = " Seeker "; +char const *const CHAR_MIRANDA_MSG = "Miranda"; +char const *const CHAR_CANCEL_MSG = " Cancel "; + +char const *const GAME_VERSION = "ScummVM Version"; +char const *const SOUND_OPTIONS = "Sound options"; +char const *const QUIT_GAME = "Quit"; +char const *const RESTART_GAME = "Restart"; +char const *const SAVE_GAME = "Save game"; +char const *const RESTORE_GAME = "Restore game"; +char const *const SHOW_CREDITS = "Show credits"; +char const *const PAUSE_GAME = "Pause game"; +char const *const RESUME_PLAY = " Resume play "; +char const *const F2 = "F2"; +char const *const F3 = "F3"; +char const *const F4 = "F4"; +char const *const F5 = "F5"; +char const *const F7 = "F7"; +char const *const F8 = "F8"; +char const *const F10 = "F10"; } // End of namespace Ringworld2 diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 90f5d3687f..358ae9f8bb 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -31,161 +31,161 @@ extern const byte CURSOR_ARROW_DATA[]; extern const byte CURSOR_WALK_DATA[]; -extern const char *LOOK_SCENE_HOTSPOT; -extern const char *USE_SCENE_HOTSPOT; -extern const char *TALK_SCENE_HOTSPOT; -extern const char *SPECIAL_SCENE_HOTSPOT; -extern const char *DEFAULT_SCENE_HOTSPOT; -extern const char *SAVE_ERROR_MSG; -extern const char *SAVING_NOT_ALLOWED_MSG; -extern const char *RESTORING_NOT_ALLOWED_MSG; +extern char const *const LOOK_SCENE_HOTSPOT; +extern char const *const USE_SCENE_HOTSPOT; +extern char const *const TALK_SCENE_HOTSPOT; +extern char const *const SPECIAL_SCENE_HOTSPOT; +extern char const *const DEFAULT_SCENE_HOTSPOT; +extern char const *const SAVE_ERROR_MSG; +extern char const *const SAVING_NOT_ALLOWED_MSG; +extern char const *const RESTORING_NOT_ALLOWED_MSG; // Dialogs -extern const char *QUIT_CONFIRM_MSG; -extern const char *RESTART_MSG; -extern const char *GAME_PAUSED_MSG; -extern const char *OK_BTN_STRING; -extern const char *CANCEL_BTN_STRING; -extern const char *QUIT_BTN_STRING; -extern const char *RESTART_BTN_STRING; -extern const char *SAVE_BTN_STRING; -extern const char *RESTORE_BTN_STRING; -extern const char *SOUND_BTN_STRING; -extern const char *RESUME_BTN_STRING; -extern const char *LOOK_BTN_STRING; -extern const char *PICK_BTN_STRING; -extern const char *INV_EMPTY_MSG; +extern char const *const QUIT_CONFIRM_MSG; +extern char const *const RESTART_MSG; +extern char const *const GAME_PAUSED_MSG; +extern char const *const OK_BTN_STRING; +extern char const *const CANCEL_BTN_STRING; +extern char const *const QUIT_BTN_STRING; +extern char const *const RESTART_BTN_STRING; +extern char const *const SAVE_BTN_STRING; +extern char const *const RESTORE_BTN_STRING; +extern char const *const SOUND_BTN_STRING; +extern char const *const RESUME_BTN_STRING; +extern char const *const LOOK_BTN_STRING; +extern char const *const PICK_BTN_STRING; +extern char const *const INV_EMPTY_MSG; namespace Ringworld { // Dialog resources -extern const char *HELP_MSG; -extern const char *WATCH_INTRO_MSG; -extern const char *START_PLAY_BTN_STRING; -extern const char *INTRODUCTION_BTN_STRING; -extern const char *OPTIONS_MSG; +extern char const *const HELP_MSG; +extern char const *const WATCH_INTRO_MSG; +extern char const *const START_PLAY_BTN_STRING; +extern char const *const INTRODUCTION_BTN_STRING; +extern char const *const OPTIONS_MSG; // Scene specific resources -extern const char *EXIT_MSG; -extern const char *SCENE6100_CAREFUL; -extern const char *SCENE6100_TOUGHER; -extern const char *SCENE6100_ONE_MORE_HIT; -extern const char *SCENE6100_DOING_BEST; -extern const char *SCENE6100_REPAIR; -extern const char *SCENE6100_ROCKY_AREA; -extern const char *SCENE6100_REPLY; -extern const char *SCENE6100_TAKE_CONTROLS; -extern const char *SCENE6100_SURPRISE; -extern const char *SCENE6100_SWEAT; -extern const char *SCENE6100_VERY_WELL; +extern char const *const EXIT_MSG; +extern char const *const SCENE6100_CAREFUL; +extern char const *const SCENE6100_TOUGHER; +extern char const *const SCENE6100_ONE_MORE_HIT; +extern char const *const SCENE6100_DOING_BEST; +extern char const *const SCENE6100_REPAIR; +extern char const *const SCENE6100_ROCKY_AREA; +extern char const *const SCENE6100_REPLY; +extern char const *const SCENE6100_TAKE_CONTROLS; +extern char const *const SCENE6100_SURPRISE; +extern char const *const SCENE6100_SWEAT; +extern char const *const SCENE6100_VERY_WELL; // Demo messages -extern const char *DEMO_HELP_MSG; -extern const char *DEMO_PAUSED_MSG; -extern const char *DEMO_HELP_MSG; -extern const char *DEMO_PAUSED_MSG; -extern const char *DEMO_EXIT_MSG; -extern const char *EXIT_BTN_STRING; -extern const char *DEMO_BTN_STRING; -extern const char *DEMO_RESUME_BTN_STRING; +extern char const *const DEMO_HELP_MSG; +extern char const *const DEMO_PAUSED_MSG; +extern char const *const DEMO_HELP_MSG; +extern char const *const DEMO_PAUSED_MSG; +extern char const *const DEMO_EXIT_MSG; +extern char const *const EXIT_BTN_STRING; +extern char const *const DEMO_BTN_STRING; +extern char const *const DEMO_RESUME_BTN_STRING; } // End of namespace Ringworld namespace BlueForce { // Dialog resources -extern const char *HELP_MSG; -extern const char *WATCH_INTRO_MSG; -extern const char *START_PLAY_BTN_STRING; -extern const char *INTRODUCTION_BTN_STRING; -extern const char *OPTIONS_MSG; +extern char const *const HELP_MSG; +extern char const *const WATCH_INTRO_MSG; +extern char const *const START_PLAY_BTN_STRING; +extern char const *const INTRODUCTION_BTN_STRING; +extern char const *const OPTIONS_MSG; // Blue Force messages -extern const char *BF_NAME; -extern const char *BF_COPYRIGHT; -extern const char *BF_ALL_RIGHTS_RESERVED; -extern const char *BF_19840518; -extern const char *BF_19840515; -extern const char *BF_3_DAYS; -extern const char *BF_11_YEARS; -extern const char *BF_NEXT_DAY; -extern const char *BF_ACADEMY; +extern char const *const BF_NAME; +extern char const *const BF_COPYRIGHT; +extern char const *const BF_ALL_RIGHTS_RESERVED; +extern char const *const BF_19840518; +extern char const *const BF_19840515; +extern char const *const BF_3_DAYS; +extern char const *const BF_11_YEARS; +extern char const *const BF_NEXT_DAY; +extern char const *const BF_ACADEMY; // Scene 50 tooltips -extern const char *GRANDMA_FRANNIE; -extern const char *MARINA; -extern const char *POLICE_DEPARTMENT; -extern const char *TONYS_BAR; -extern const char *CHILD_PROTECTIVE_SERVICES; -extern const char *ALLEY_CAT; -extern const char *CITY_HALL_JAIL; -extern const char *JAMISON_RYAN; -extern const char *BIKINI_HUT; - -extern const char *SCENE570_PASSWORD; -extern const char *SCENE570_C_DRIVE; -extern const char *SCENE570_RING; -extern const char *SCENE570_PROTO; -extern const char *SCENE570_WACKY; -extern const char *SCENE570_COBB; -extern const char *SCENE570_LETTER; -extern const char *SCENE570_RINGEXE; -extern const char *SCENE570_RINGDATA; -extern const char *SCENE570_PROTOEXE; -extern const char *SCENE570_PROTODATA; -extern const char *SCENE570_WACKYEXE; -extern const char *SCENE570_WACKYDATA; +extern char const *const GRANDMA_FRANNIE; +extern char const *const MARINA; +extern char const *const POLICE_DEPARTMENT; +extern char const *const TONYS_BAR; +extern char const *const CHILD_PROTECTIVE_SERVICES; +extern char const *const ALLEY_CAT; +extern char const *const CITY_HALL_JAIL; +extern char const *const JAMISON_RYAN; +extern char const *const BIKINI_HUT; + +extern char const *const SCENE570_PASSWORD; +extern char const *const SCENE570_C_DRIVE; +extern char const *const SCENE570_RING; +extern char const *const SCENE570_PROTO; +extern char const *const SCENE570_WACKY; +extern char const *const SCENE570_COBB; +extern char const *const SCENE570_LETTER; +extern char const *const SCENE570_RINGEXE; +extern char const *const SCENE570_RINGDATA; +extern char const *const SCENE570_PROTOEXE; +extern char const *const SCENE570_PROTODATA; +extern char const *const SCENE570_WACKYEXE; +extern char const *const SCENE570_WACKYDATA; // Scene 60 radio dispatch buttons -extern const char *RADIO_BTN_LIST[8]; +extern char const *const RADIO_BTN_LIST[8]; // Scene 180 message -extern const char *THE_NEXT_DAY; +extern char const *const THE_NEXT_DAY; } // End of namespace BlueForce namespace Ringworld2 { // Scene 125 - Console messages -extern const char *CONSOLE_MESSAGES[]; +extern char const *const CONSOLE_MESSAGES[]; // Scene 825 - Autodoc Messages -extern const char *MAIN_MENU; -extern const char *DIAGNOSIS; -extern const char *ADVANCED_PROCEDURES; -extern const char *VITAL_SIGNS; -extern const char *OPEN_DOOR; -extern const char *TREATMENTS; -extern const char *NO_MALADY_DETECTED; -extern const char *NO_TREATMENT_REQUIRED; -extern const char *ACCESS_CODE_REQUIRED; -extern const char *INVALID_ACCESS_CODE; -extern const char *FOREIGN_OBJECT_EXTRACTED; +extern char const *const MAIN_MENU; +extern char const *const DIAGNOSIS; +extern char const *const ADVANCED_PROCEDURES; +extern char const *const VITAL_SIGNS; +extern char const *const OPEN_DOOR; +extern char const *const TREATMENTS; +extern char const *const NO_MALADY_DETECTED; +extern char const *const NO_TREATMENT_REQUIRED; +extern char const *const ACCESS_CODE_REQUIRED; +extern char const *const INVALID_ACCESS_CODE; +extern char const *const FOREIGN_OBJECT_EXTRACTED; // Dialog messages -extern const char *HELP_MSG; -extern const char *CHAR_TITLE; -extern const char *CHAR_QUINN_MSG; -extern const char *CHAR_SEEKER_MSG; -extern const char *CHAR_MIRANDA_MSG; -extern const char *CHAR_CANCEL_MSG; - -extern const char *GAME_VERSION; -extern const char *SOUND_OPTIONS; -extern const char *QUIT_GAME; -extern const char *RESTART_GAME; -extern const char *SAVE_GAME; -extern const char *RESTORE_GAME; -extern const char *SHOW_CREDITS; -extern const char *PAUSE_GAME; -extern const char *RESUME_PLAY; -extern const char *F2; -extern const char *F3; -extern const char *F4; -extern const char *F5; -extern const char *F7; -extern const char *F8; -extern const char *F10; +extern char const *const HELP_MSG; +extern char const *const CHAR_TITLE; +extern char const *const CHAR_QUINN_MSG; +extern char const *const CHAR_SEEKER_MSG; +extern char const *const CHAR_MIRANDA_MSG; +extern char const *const CHAR_CANCEL_MSG; + +extern char const *const GAME_VERSION; +extern char const *const SOUND_OPTIONS; +extern char const *const QUIT_GAME; +extern char const *const RESTART_GAME; +extern char const *const SAVE_GAME; +extern char const *const RESTORE_GAME; +extern char const *const SHOW_CREDITS; +extern char const *const PAUSE_GAME; +extern char const *const RESUME_PLAY; +extern char const *const F2; +extern char const *const F3; +extern char const *const F4; +extern char const *const F5; +extern char const *const F7; +extern char const *const F8; +extern char const *const F10; } // End of namespace Ringworld2 -- 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') 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') 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 096c020e7af1b03bf8394d40cb3c6da98f01ae49 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 28 Dec 2011 20:52:17 +1100 Subject: TSAGE: Removed virtual keyword from setDetails methods The methods are never overriden, so there's no point in the methods being virtual --- engines/tsage/core.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index c04045e83a..98606dc64d 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -451,11 +451,11 @@ public: virtual Common::String getClassName() { return "SceneHotspot"; } virtual void doAction(int action); - 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); - virtual void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); - virtual void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum); + void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum); + void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); + void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode = 0); + void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item); + void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3, -- 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/globals.cpp | 5 +- engines/tsage/globals.h | 2 + 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 ++ 7 files changed, 747 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index d30d585c09..2869b3b60e 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -387,6 +387,8 @@ void Ringworld2Globals::reset() { _v565AE = 0; for (int i = 0; i < 14; i++) _v56605[i] = 0; + _v56A99 = 0; + _v56A9E = 0; _v56AA0 = 0; _v56AA1 = 0; _v56AAB = 0; @@ -424,6 +426,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); + s.syncAsSint16LE(_v56A9E); s.syncAsSint16LE(_v56AAB); s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_v58CE2); @@ -438,7 +441,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); - + s.syncAsByte(_v56A99); for (i = 0; i < 12; ++i) s.syncAsByte(_stripManager_lookupList[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 498659d3ae..f50cb70773 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -253,6 +253,8 @@ public: int _v5657C; byte _v565AE; byte _v56605[14]; + byte _v56A99; + int _v56A9E; byte _v56AA0; byte _v56AA1; int _v56AAB; 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') 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') 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') 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') 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') 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') 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') 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') 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') 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 b704e40bae69dcdc54b85e934ec3862d60bfdb5b Mon Sep 17 00:00:00 2001 From: D G Turner Date: Sat, 31 Dec 2011 00:28:27 +0000 Subject: TSAGE: Close memory leak in savegame thumbnail. --- engines/tsage/saveload.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index e56968acdf..af2f3566ad 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -189,6 +189,8 @@ Common::Error Saver::restore(int slot) { // Read in the savegame header tSageSavegameHeader header; readSavegameHeader(saveFile, header); + if (header.thumbnail) + header.thumbnail->free(); delete header.thumbnail; serializer.setSaveVersion(header.version); -- cgit v1.2.3 From b59b703f721d4a52b1e73084294d44976419fead Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 31 Dec 2011 11:26:42 +0100 Subject: TSAGE: BF - Fix for bug #3467502, crash when loading in map scene --- engines/tsage/blue_force/blueforce_scenes0.cpp | 17 +++++++++++++++++ engines/tsage/blue_force/blueforce_scenes0.h | 4 ++++ engines/tsage/saveload.h | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 682e273716..95598babc6 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -209,6 +209,11 @@ void Scene50::Tooltip::synchronize(Serializer &s) { SavedObject::synchronize(s); _bounds.synchronize(s); s.syncString(_msg); + + if (s.getVersion() >= 10) { + s.syncAsSint16LE(_newSceneNumber); + s.syncAsSint16LE(_locationId); + } } void Scene50::Tooltip2::signal() { @@ -323,6 +328,18 @@ void Scene50::Tooltip::highlight(bool btnDown) { /*--------------------------------------------------------------------------*/ +Scene50::Scene50() { + _sceneNumber = 0; +} + + +void Scene50::synchronize(Serializer &s) { + if (s.getVersion() >= 10) { + SceneExt::synchronize(s); + s.syncAsSint16LE(_sceneNumber); + } +} + void Scene50::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h index 9b0bf556f4..dd502c5f30 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.h +++ b/engines/tsage/blue_force/blueforce_scenes0.h @@ -88,7 +88,11 @@ public: Tooltip _location6, _location7, _location8, _location9; Timer _timer; public: + Scene50(); + virtual Common::String getClassName() { return "Scene50"; } + virtual void synchronize(Serializer &s); + virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); virtual void signal(); diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index ff78abf52d..4126e31822 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -33,7 +33,7 @@ namespace TsAGE { typedef void (*SaveNotifierFn)(bool postFlag); -#define TSAGE_SAVEGAME_VERSION 9 +#define TSAGE_SAVEGAME_VERSION 10 class SavedObject; -- 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/blue_force/blueforce_dialogs.cpp | 4 +- engines/tsage/converse.cpp | 2 +- engines/tsage/core.cpp | 4 +- engines/tsage/events.cpp | 6 +- engines/tsage/globals.cpp | 8 +- engines/tsage/graphics.cpp | 144 ++++-------------------- engines/tsage/graphics.h | 14 +-- engines/tsage/ringworld/ringworld_dialogs.cpp | 4 +- engines/tsage/ringworld/ringworld_logic.cpp | 2 +- engines/tsage/ringworld/ringworld_scenes3.cpp | 6 +- engines/tsage/ringworld/ringworld_scenes5.cpp | 4 +- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- engines/tsage/scenes.cpp | 2 +- 13 files changed, 46 insertions(+), 156 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index 11c0358aca..0aaae2fc29 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -163,7 +163,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } // Deactivate the graphics manager used for the dialog @@ -244,7 +244,7 @@ void AmmoBeltDialog::execute() { } g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } _gfxManager.deactivate(); diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 1542b0a8e3..a660c4b580 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -451,7 +451,7 @@ int ConversationChoiceDialog::execute(const Common::StringArray &choiceList) { while (!g_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) && !g_vm->shouldQuit()) { g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } if (g_vm->shouldQuit()) break; diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 33badf389b..73e7901fde 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1416,7 +1416,7 @@ void ScenePalette::fade(const byte *adjustData, bool fullAdjust, int percent) { // Set the altered pale4tte g_system->getPaletteManager()->setPalette((const byte *)&tempPalette[0], 0, 256); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } PaletteRotation *ScenePalette::addRotation(int start, int end, int rotationMode, int duration, Action *action) { @@ -1714,7 +1714,7 @@ void SceneItem::display(int resNum, int lineNum, ...) { // Keep event on-screen until a mouse or keypress while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) { - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 21dc86b8ec..152570b187 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -49,8 +49,8 @@ bool EventsClass::pollEvent() { _priorFrameTime = milli; ++_frameNumber; - // Update the physical screen with any updates to the screen surface - GLOBALS._screenSurface.copyToScreen(); + // Update screen + g_system->updateScreen(); } if (!g_system->getEventManager()->pollEvent(_event)) return false; @@ -395,7 +395,7 @@ void EventsClass::delay(int numFrames) { _priorFrameTime = g_system->getMillis(); } - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); _prevDelayFrame = _frameNumber; _priorFrameTime = g_system->getMillis(); } diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 2869b3b60e..e18f3c12eb 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -108,15 +108,9 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface _color2 = _gfxColors.foreground; _color3 = _gfxColors.foreground; } - - // Set up a buffer for the screen surface - _screenSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT); - _screenSurface.trackDirtyRects(); - - // Add the global graphics manager to the graphic manager list + _screenSurface.setScreenSurface(); _gfxManagers.push_back(&_gfxManagerInstance); - // Set up the global scene objects list _sceneObjects = &_sceneObjectsInstance; _sceneObjects_queue.push_front(_sceneObjects); diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index bc4ce75c22..171167c2ea 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -220,10 +220,11 @@ void Rect::synchronize(Serializer &s) { GfxSurface::GfxSurface() : _bounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) { _disableUpdates = false; + _screenSurface = false; _lockSurfaceCtr = 0; _customSurface = NULL; + _screenSurfaceP = NULL; _transColor = -1; - _trackDirtyRects = false; } GfxSurface::GfxSurface(const GfxSurface &s) { @@ -240,41 +241,12 @@ GfxSurface::~GfxSurface() { } /** - * Turns on dirty rectangle tracking for the surface + * Specifies that the surface will encapsulate the ScummVM screen surface */ -void GfxSurface::trackDirtyRects() { - _trackDirtyRects = true; -} - -void GfxSurface::addDirtyRect(const Rect &r) { - if (_trackDirtyRects) - _dirtyRects.push_back(Rect(r.left, r.top, - MIN(r.right + 1, SCREEN_WIDTH), MIN(r.bottom + 1, SCREEN_HEIGHT))); -} - -/** - * Copies all areas specified by the dirty rect list to the screen - */ -void GfxSurface::copyToScreen() { - assert(_trackDirtyRects); - - // Merge any overlapping dirty rects - mergeDirtyRects(); - - // Loop through the dirty rect list to copy the affected areas to the sc - for (Common::List::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) { - Rect r = *i; - - const byte *srcP = (const byte *)_customSurface->getBasePtr(r.left, r.top); - g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top, - r.width(), r.height()); - } - - // Update the physical screen - g_system->updateScreen(); - - // Now that the dirty rects have been copied, clear the dirty rect list - _dirtyRects.clear(); +void GfxSurface::setScreenSurface() { + _screenSurface = true; + _customSurface = NULL; + _lockSurfaceCtr = 0; } /** @@ -282,13 +254,11 @@ void GfxSurface::copyToScreen() { */ void GfxSurface::create(int width, int height) { assert((width >= 0) && (height >= 0)); - - // Delete any prior internal surface that may have been previously created + _screenSurface = false; if (_customSurface) { _customSurface->free(); delete _customSurface; } - _customSurface = new Graphics::Surface(); _customSurface->create(width, height, Graphics::PixelFormat::createFormatCLUT8()); Common::fill((byte *)_customSurface->pixels, (byte *)_customSurface->pixels + (width * height), 0); @@ -301,7 +271,13 @@ void GfxSurface::create(int width, int height) { Graphics::Surface GfxSurface::lockSurface() { ++_lockSurfaceCtr; - Graphics::Surface *src = _customSurface; + Graphics::Surface *src; + if (_screenSurface) { + if (_lockSurfaceCtr == 1) + _screenSurfaceP = g_system->lockScreen(); + src = _screenSurfaceP; + } else + src = _customSurface; assert(src); // Setup the returned surface either as one pointing to the same pixels as the source, or @@ -322,10 +298,15 @@ Graphics::Surface GfxSurface::lockSurface() { void GfxSurface::unlockSurface() { assert(_lockSurfaceCtr > 0); --_lockSurfaceCtr; + + if ((_lockSurfaceCtr == 0) && _screenSurface) { + g_system->unlockScreen(); + } } void GfxSurface::synchronize(Serializer &s) { assert(!_lockSurfaceCtr); + assert(!_screenSurface); s.syncAsByte(_disableUpdates); _bounds.synchronize(s); @@ -370,7 +351,6 @@ void GfxSurface::fillRect(const Rect &bounds, int color) { Graphics::Surface surface = lockSurface(); surface.fillRect(bounds, color); unlockSurface(); - addDirtyRect(bounds); } GfxSurface &GfxSurface::operator=(const GfxSurface &s) { @@ -383,6 +363,7 @@ GfxSurface &GfxSurface::operator=(const GfxSurface &s) { } _customSurface = s._customSurface; + _screenSurface = s._screenSurface; _disableUpdates = s._disableUpdates; _bounds = s._bounds; _centroid = s._centroid; @@ -586,17 +567,10 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi if (destBounds.bottom > destSurface.h) destBounds.bottom = destSurface.h; - if (destBounds.isValidRect() && (destBounds.left < SCREEN_WIDTH) && (destBounds.right >= 0) && - (destBounds.top < SCREEN_HEIGHT) && (destBounds.bottom >= 0)) { - // Register the affected area as dirty - addDirtyRect(Rect(destBounds.left + _bounds.left, destBounds.top + _bounds.top, - destBounds.right + _bounds.left, destBounds.bottom + _bounds.top)); - - // Get pointers to the source and destination surface areas + if (destBounds.isValidRect()) { const byte *pSrc = (const byte *)srcSurface.getBasePtr(srcX, srcY); byte *pDest = (byte *)destSurface.getBasePtr(destBounds.left, destBounds.top); - // Loop through copying each row for (int y = 0; y < destBounds.height(); ++y, pSrc += srcSurface.pitch, pDest += destSurface.pitch) { if (!priorityRegion && (src._transColor == -1)) @@ -621,7 +595,6 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi } } - // Unlock the surfaces unlockSurface(); srcImage.unlockSurface(); } @@ -640,68 +613,6 @@ void GfxSurface::draw(const Common::Point &pt, Rect *rect) { } } -/** - * Merges any clipping rectangles that overlap to try and reduce - * the total number of clip rectangles. - */ -void GfxSurface::mergeDirtyRects() { - if (_dirtyRects.size() <= 1) - return; - - Common::List::iterator rOuter, rInner; - - for (rOuter = _dirtyRects.begin(); rOuter != _dirtyRects.end(); ++rOuter) { - rInner = rOuter; - while (++rInner != _dirtyRects.end()) { - - if (looseIntersectRectangle(*rOuter, *rInner)) { - // these two rectangles overlap or - // are next to each other - merge them - - unionRectangle(*rOuter, *rOuter, *rInner); - - // remove the inner rect from the list - _dirtyRects.erase(rInner); - - // move back to beginning of list - rInner = rOuter; - } - } - } -} - -/** - * Check if the two rectangles are next to each other. - * @param pSrc1 a source rectangle - * @param pSrc2 a source rectangle - */ -bool GfxSurface::looseIntersectRectangle(const Rect &src1, const Rect &src2) { - Rect destRect; - - destRect.left = MAX(src1.left, src2.left); - destRect.top = MAX(src1.top, src2.top); - destRect.right = MIN(src1.right, src2.right); - destRect.bottom = MIN(src1.bottom, src2.bottom); - - return destRect.isValidRect(); -} - -/** - * Creates the union of two rectangles. - * Returns True if there is a union. - * @param pDest destination rectangle that is to receive the new union - * @param pSrc1 a source rectangle - * @param pSrc2 a source rectangle - */ -bool GfxSurface::unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2) { - destRect.left = MIN(src1.left, src2.left); - destRect.top = MIN(src1.top, src2.top); - destRect.right = MAX(src1.right, src2.right); - destRect.bottom = MAX(src1.bottom, src2.bottom); - - return !destRect.isEmpty(); -} - /*--------------------------------------------------------------------------*/ GfxElement::GfxElement() { @@ -728,9 +639,6 @@ void GfxElement::highlight() { GfxManager &gfxManager = g_globals->gfxManager(); Graphics::Surface surface = gfxManager.lockSurface(); - // Mark the area is dirty - gfxManager.addDirtyRect(_bounds); - // Scan through the contents of the element, switching any occurances of the foreground // color with the background color and vice versa Rect tempRect(_bounds); @@ -826,7 +734,6 @@ void GfxElement::drawFrame() { gfxManager.fillRect2(tempRect.right, tempRect.top + 2, 1, tempRect.height() - 3, 0); gfxManager.unlockSurface(); - gfxManager.addDirtyRect(_bounds); } /** @@ -1183,7 +1090,7 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) { } g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } _gfxManager.deactivate(); @@ -1267,11 +1174,6 @@ void GfxManager::fillArea(int xp, int yp, int color) { _surface.fillRect(tempRect, color); } -void GfxManager::addDirtyRect(const Rect &r) { - _surface.addDirtyRect(Rect(r.left + _bounds.left, r.top + _bounds.top, - r.right + _bounds.left, r.bottom + _bounds.top)); -} - void GfxManager::fillRect(const Rect &bounds, int color) { _surface.setBounds(_bounds); _surface.fillRect(bounds, color); diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index e32994505c..dba3401700 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -74,16 +74,12 @@ public: class GfxSurface { private: Graphics::Surface *_customSurface; + Graphics::Surface *_screenSurfaceP; int _lockSurfaceCtr; + bool _screenSurface; bool _disableUpdates; Rect _bounds; - bool _trackDirtyRects; - Common::List _dirtyRects; - - void mergeDirtyRects(); - bool looseIntersectRectangle(const Rect &src1, const Rect &src2); - bool unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2); public: Common::Point _centroid; int _transColor; @@ -92,9 +88,7 @@ public: GfxSurface(const GfxSurface &s); ~GfxSurface(); - void trackDirtyRects(); - void addDirtyRect(const Rect &r); - void copyToScreen(); + void setScreenSurface(); Graphics::Surface lockSurface(); void unlockSurface(); void synchronize(Serializer &s); @@ -280,7 +274,6 @@ public: return _surface.lockSurface(); } void unlockSurface() { _surface.unlockSurface(); } - void addDirtyRect(const Rect &r); void fillArea(int xp, int yp, int color); void fillRect(const Rect &bounds, int color); void fillRect2(int xs, int ys, int width, int height, int color); @@ -308,6 +301,7 @@ public: void copyFrom(GfxSurface &src, int destX, int destY) { _surface.setBounds(_bounds); _surface.copyFrom(src, destX, destY); + g_system->updateScreen(); } GfxSurface &getSurface() { _surface.setBounds(_bounds); diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp index 0561a27055..233cbe5c4c 100644 --- a/engines/tsage/ringworld/ringworld_dialogs.cpp +++ b/engines/tsage/ringworld/ringworld_dialogs.cpp @@ -183,7 +183,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } _gfxManager.deactivate(); @@ -394,7 +394,7 @@ void InventoryDialog::execute() { Event event; while (!g_globals->_events.getEvent(event) && !g_vm->shouldQuit()) { g_system->delayMillis(10); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); } if (g_vm->shouldQuit()) break; diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index 2ee4f99267..e37eddf80c 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -315,7 +315,7 @@ void SceneArea::wait() { // Wait until a mouse or keypress Event event; while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event)) { - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp index 6f3d1ed93a..81190aea7b 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -532,7 +532,7 @@ void Scene2100::Action1::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); continue; } @@ -2263,7 +2263,7 @@ void Scene2150::Action1::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); continue; } @@ -5118,7 +5118,7 @@ void Scene2320::Action3::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); continue; } diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 7c8da54fac..49726eba2e 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -2810,7 +2810,7 @@ void Scene4150::Action1::signal() { case 4: { for (int idx = 100; idx >= 0; idx -= 5) { g_globals->_scenePalette.fade(adjustData, false, idx); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); } @@ -2838,7 +2838,7 @@ void Scene4150::Action1::signal() { case 7: for (int idx = 100; idx >= 0; idx -= 5) { g_globals->_scenePalette.fade(adjustData, false, idx); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); } 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 diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 03c7d8d0ae..6362c63bc3 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -133,7 +133,7 @@ void SceneManager::fadeInIfNecessary() { percent = 100; g_globals->_scenePalette.fade((const byte *)&adjustData, false, percent); - GLOBALS._screenSurface.copyToScreen(); + g_system->updateScreen(); g_system->delayMillis(10); } -- 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/blue_force/blueforce_dialogs.cpp | 4 +-- engines/tsage/converse.cpp | 2 +- engines/tsage/core.cpp | 4 +-- engines/tsage/events.cpp | 4 +-- engines/tsage/graphics.cpp | 34 ++++++++++--------------- engines/tsage/graphics.h | 5 ++-- engines/tsage/ringworld/ringworld_dialogs.cpp | 4 +-- engines/tsage/ringworld/ringworld_logic.cpp | 2 +- engines/tsage/ringworld/ringworld_scenes3.cpp | 6 ++--- engines/tsage/ringworld/ringworld_scenes5.cpp | 4 +-- engines/tsage/ringworld2/ringworld2_dialogs.cpp | 2 +- engines/tsage/scenes.cpp | 2 +- 12 files changed, 33 insertions(+), 40 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index 0aaae2fc29..a1ac19ecee 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -163,7 +163,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } // Deactivate the graphics manager used for the dialog @@ -244,7 +244,7 @@ void AmmoBeltDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } _gfxManager.deactivate(); diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index a660c4b580..c3b48a7693 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -451,7 +451,7 @@ int ConversationChoiceDialog::execute(const Common::StringArray &choiceList) { while (!g_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) && !g_vm->shouldQuit()) { g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } if (g_vm->shouldQuit()) break; diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 73e7901fde..7cbcb863c7 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1416,7 +1416,7 @@ void ScenePalette::fade(const byte *adjustData, bool fullAdjust, int percent) { // Set the altered pale4tte g_system->getPaletteManager()->setPalette((const byte *)&tempPalette[0], 0, 256); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } PaletteRotation *ScenePalette::addRotation(int start, int end, int rotationMode, int duration, Action *action) { @@ -1714,7 +1714,7 @@ void SceneItem::display(int resNum, int lineNum, ...) { // Keep event on-screen until a mouse or keypress while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) { - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 152570b187..8f07a8243b 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -50,7 +50,7 @@ bool EventsClass::pollEvent() { ++_frameNumber; // Update screen - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } if (!g_system->getEventManager()->pollEvent(_event)) return false; @@ -395,7 +395,7 @@ void EventsClass::delay(int numFrames) { _priorFrameTime = g_system->getMillis(); } - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); _prevDelayFrame = _frameNumber; _priorFrameTime = g_system->getMillis(); } diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 171167c2ea..a22e0a80d1 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -220,10 +220,8 @@ void Rect::synchronize(Serializer &s) { GfxSurface::GfxSurface() : _bounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) { _disableUpdates = false; - _screenSurface = false; _lockSurfaceCtr = 0; _customSurface = NULL; - _screenSurfaceP = NULL; _transColor = -1; } @@ -244,9 +242,17 @@ GfxSurface::~GfxSurface() { * Specifies that the surface will encapsulate the ScummVM screen surface */ void GfxSurface::setScreenSurface() { - _screenSurface = true; - _customSurface = NULL; - _lockSurfaceCtr = 0; + _trackDirtyRects = true; + create(SCREEN_WIDTH, SCREEN_HEIGHT); +} + +/** + * Updates the physical screen with the screen surface buffer + */ +void GfxSurface::updateScreen() { + g_system->copyRectToScreen((const byte *)this->_customSurface->pixels, + SCREEN_WIDTH, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); + g_system->updateScreen(); } /** @@ -254,7 +260,7 @@ void GfxSurface::setScreenSurface() { */ void GfxSurface::create(int width, int height) { assert((width >= 0) && (height >= 0)); - _screenSurface = false; + if (_customSurface) { _customSurface->free(); delete _customSurface; @@ -271,13 +277,7 @@ void GfxSurface::create(int width, int height) { Graphics::Surface GfxSurface::lockSurface() { ++_lockSurfaceCtr; - Graphics::Surface *src; - if (_screenSurface) { - if (_lockSurfaceCtr == 1) - _screenSurfaceP = g_system->lockScreen(); - src = _screenSurfaceP; - } else - src = _customSurface; + Graphics::Surface *src = _customSurface; assert(src); // Setup the returned surface either as one pointing to the same pixels as the source, or @@ -298,15 +298,10 @@ Graphics::Surface GfxSurface::lockSurface() { void GfxSurface::unlockSurface() { assert(_lockSurfaceCtr > 0); --_lockSurfaceCtr; - - if ((_lockSurfaceCtr == 0) && _screenSurface) { - g_system->unlockScreen(); - } } void GfxSurface::synchronize(Serializer &s) { assert(!_lockSurfaceCtr); - assert(!_screenSurface); s.syncAsByte(_disableUpdates); _bounds.synchronize(s); @@ -363,7 +358,6 @@ GfxSurface &GfxSurface::operator=(const GfxSurface &s) { } _customSurface = s._customSurface; - _screenSurface = s._screenSurface; _disableUpdates = s._disableUpdates; _bounds = s._bounds; _centroid = s._centroid; @@ -1090,7 +1084,7 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } _gfxManager.deactivate(); diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index dba3401700..afc9ba8c52 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -74,9 +74,8 @@ public: class GfxSurface { private: Graphics::Surface *_customSurface; - Graphics::Surface *_screenSurfaceP; int _lockSurfaceCtr; - bool _screenSurface; + bool _trackDirtyRects; bool _disableUpdates; Rect _bounds; @@ -89,6 +88,7 @@ public: ~GfxSurface(); void setScreenSurface(); + void updateScreen(); Graphics::Surface lockSurface(); void unlockSurface(); void synchronize(Serializer &s); @@ -301,7 +301,6 @@ public: void copyFrom(GfxSurface &src, int destX, int destY) { _surface.setBounds(_bounds); _surface.copyFrom(src, destX, destY); - g_system->updateScreen(); } GfxSurface &getSurface() { _surface.setBounds(_bounds); diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp index 233cbe5c4c..0e451b8429 100644 --- a/engines/tsage/ringworld/ringworld_dialogs.cpp +++ b/engines/tsage/ringworld/ringworld_dialogs.cpp @@ -183,7 +183,7 @@ void RightClickDialog::execute() { } g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } _gfxManager.deactivate(); @@ -394,7 +394,7 @@ void InventoryDialog::execute() { Event event; while (!g_globals->_events.getEvent(event) && !g_vm->shouldQuit()) { g_system->delayMillis(10); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); } if (g_vm->shouldQuit()) break; diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp index e37eddf80c..00c219f2ee 100644 --- a/engines/tsage/ringworld/ringworld_logic.cpp +++ b/engines/tsage/ringworld/ringworld_logic.cpp @@ -315,7 +315,7 @@ void SceneArea::wait() { // Wait until a mouse or keypress Event event; while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); } diff --git a/engines/tsage/ringworld/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp index 81190aea7b..0e4ccd1269 100644 --- a/engines/tsage/ringworld/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld/ringworld_scenes3.cpp @@ -532,7 +532,7 @@ void Scene2100::Action1::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); continue; } @@ -2263,7 +2263,7 @@ void Scene2150::Action1::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); continue; } @@ -5118,7 +5118,7 @@ void Scene2320::Action3::signal() { // Wait for an event Event event; if (!g_globals->_events.getEvent(event)) { - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); continue; } diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp index 49726eba2e..3b415bdb6a 100644 --- a/engines/tsage/ringworld/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld/ringworld_scenes5.cpp @@ -2810,7 +2810,7 @@ void Scene4150::Action1::signal() { case 4: { for (int idx = 100; idx >= 0; idx -= 5) { g_globals->_scenePalette.fade(adjustData, false, idx); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); } @@ -2838,7 +2838,7 @@ void Scene4150::Action1::signal() { case 7: for (int idx = 100; idx >= 0; idx -= 5) { g_globals->_scenePalette.fade(adjustData, false, idx); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); } 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 diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 6362c63bc3..9d75808dbf 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -133,7 +133,7 @@ void SceneManager::fadeInIfNecessary() { percent = 100; g_globals->_scenePalette.fade((const byte *)&adjustData, false, percent); - g_system->updateScreen(); + GLOBALS._screenSurface.updateScreen(); g_system->delayMillis(10); } -- cgit v1.2.3 From 54d0f8124e1a934e04cb71f48e189af535c63fa2 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 1 Jan 2012 16:35:10 +1100 Subject: TSAGE: Bugfix for #3467505 - crash viewing ammo belt when the clip is empty --- engines/tsage/blue_force/blueforce_dialogs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp index a1ac19ecee..a76d5839a9 100644 --- a/engines/tsage/blue_force/blueforce_dialogs.cpp +++ b/engines/tsage/blue_force/blueforce_dialogs.cpp @@ -344,7 +344,7 @@ void AmmoBeltDialog::draw() { // Draw the first clip if necessary if (clip1) { - GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip1Bullets); + GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip1Bullets + 1); _clip1Rect.resize(clipSurface, _clip1Rect.left, _clip1Rect.top, 100); g_globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip1Rect.left, bounds.top + _clip1Rect.top); @@ -352,7 +352,7 @@ void AmmoBeltDialog::draw() { // Draw the second clip if necessary if (clip2) { - GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip2Bullets); + GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip2Bullets + 1); _clip2Rect.resize(clipSurface, _clip2Rect.left, _clip2Rect.top, 100); g_globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip2Rect.left, bounds.top + _clip2Rect.top); -- cgit v1.2.3 From be706b1846bd2bff802d3da9fc24a0feed2078e8 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 1 Jan 2012 17:46:02 +1100 Subject: TSAGE: Implemented a cleaner version of dirty rect handling --- engines/tsage/graphics.cpp | 111 ++++++++++++++++++++++++++++++++++++++++++++- engines/tsage/graphics.h | 10 +++- 2 files changed, 118 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index a22e0a80d1..af3a2f9199 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -250,11 +250,44 @@ void GfxSurface::setScreenSurface() { * Updates the physical screen with the screen surface buffer */ void GfxSurface::updateScreen() { - g_system->copyRectToScreen((const byte *)this->_customSurface->pixels, - SCREEN_WIDTH, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); + assert(_trackDirtyRects); + + // Merge any overlapping dirty rects + mergeDirtyRects(); + + // Loop through the dirty rect list to copy the affected areas to the sc + for (Common::List::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) { + Rect r = *i; + + const byte *srcP = (const byte *)_customSurface->getBasePtr(r.left, r.top); + g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top, + r.width(), r.height()); + } + + // Update the physical screen g_system->updateScreen(); + + // Now that the dirty rects have been copied, clear the dirty rect list + _dirtyRects.clear(); } +/** + * Adds a rect to the dirty rect list + */ +void GfxSurface::addDirtyRect(const Rect &r) { + if (_trackDirtyRects) { + // Get the bounds and adjust to allow for sub-screen areas + Rect r2 = r; + r2.translate(_bounds.left, _bounds.top); + + // Add to the dirty rect list + _dirtyRects.push_back(Rect(r2.left, r2.top, + MIN(r2.right + 1, SCREEN_WIDTH), MIN(r2.bottom + 1, SCREEN_HEIGHT))); + } +} + + + /** * Specifies that the surface should maintain it's own internal surface */ @@ -346,6 +379,7 @@ void GfxSurface::fillRect(const Rect &bounds, int color) { Graphics::Surface surface = lockSurface(); surface.fillRect(bounds, color); unlockSurface(); + addDirtyRect(bounds); } GfxSurface &GfxSurface::operator=(const GfxSurface &s) { @@ -562,6 +596,9 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi destBounds.bottom = destSurface.h; if (destBounds.isValidRect()) { + // Register the affected area as dirty + addDirtyRect(destBounds); + const byte *pSrc = (const byte *)srcSurface.getBasePtr(srcX, srcY); byte *pDest = (byte *)destSurface.getBasePtr(destBounds.left, destBounds.top); @@ -607,6 +644,68 @@ void GfxSurface::draw(const Common::Point &pt, Rect *rect) { } } +/** + * Merges any clipping rectangles that overlap to try and reduce + * the total number of clip rectangles. + */ +void GfxSurface::mergeDirtyRects() { + if (_dirtyRects.size() <= 1) + return; + + Common::List::iterator rOuter, rInner; + + for (rOuter = _dirtyRects.begin(); rOuter != _dirtyRects.end(); ++rOuter) { + rInner = rOuter; + while (++rInner != _dirtyRects.end()) { + + if (looseIntersectRectangle(*rOuter, *rInner)) { + // these two rectangles overlap or + // are next to each other - merge them + + unionRectangle(*rOuter, *rOuter, *rInner); + + // remove the inner rect from the list + _dirtyRects.erase(rInner); + + // move back to beginning of list + rInner = rOuter; + } + } + } +} + +/** + * Check if the two rectangles are next to each other. + * @param pSrc1 a source rectangle + * @param pSrc2 a source rectangle + */ +bool GfxSurface::looseIntersectRectangle(const Rect &src1, const Rect &src2) { + Rect destRect; + + destRect.left = MAX(src1.left, src2.left); + destRect.top = MAX(src1.top, src2.top); + destRect.right = MIN(src1.right, src2.right); + destRect.bottom = MIN(src1.bottom, src2.bottom); + + return destRect.isValidRect(); +} + +/** + * Creates the union of two rectangles. + * Returns True if there is a union. + * @param pDest destination rectangle that is to receive the new union + * @param pSrc1 a source rectangle + * @param pSrc2 a source rectangle + */ +bool GfxSurface::unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2) { + destRect.left = MIN(src1.left, src2.left); + destRect.top = MIN(src1.top, src2.top); + destRect.right = MAX(src1.right, src2.right); + destRect.bottom = MAX(src1.bottom, src2.bottom); + + return !destRect.isEmpty(); +} + /*--------------------------------------------------------------------------*/ GfxElement::GfxElement() { @@ -646,6 +745,9 @@ void GfxElement::highlight() { } } + // Mark the affected area as dirty + gfxManager.getSurface().addDirtyRect(tempRect); + // Release the surface gfxManager.unlockSurface(); } @@ -1422,7 +1524,12 @@ int GfxFont::writeChar(const char ch) { } } + // Mark the affected area as dirty + _gfxManager->getSurface().addDirtyRect(charRect); + + // Move the text writing position _position.x += charWidth; + _gfxManager->unlockSurface(); return charWidth; } diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index afc9ba8c52..ba4090317b 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -75,10 +75,17 @@ class GfxSurface { private: Graphics::Surface *_customSurface; int _lockSurfaceCtr; - bool _trackDirtyRects; bool _disableUpdates; Rect _bounds; + + bool _trackDirtyRects; + Common::List _dirtyRects; + + void mergeDirtyRects(); + bool looseIntersectRectangle(const Rect &src1, const Rect &src2); + bool unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2); + public: Common::Point _centroid; int _transColor; @@ -89,6 +96,7 @@ public: void setScreenSurface(); void updateScreen(); + void addDirtyRect(const Rect &r); Graphics::Surface lockSurface(); void unlockSurface(); void synchronize(Serializer &s); -- cgit v1.2.3 From fe552696533e47b79d1299c831dfda98de884b01 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 1 Jan 2012 20:14:37 +1100 Subject: TSAGE: Bugfix for trying to draw off screen objects, which was causing invalid dirty rects --- engines/tsage/graphics.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index af3a2f9199..4db898662f 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -595,7 +595,8 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi if (destBounds.bottom > destSurface.h) destBounds.bottom = destSurface.h; - if (destBounds.isValidRect()) { + if (destBounds.isValidRect() && !((destBounds.right < 0) || (destBounds.bottom < 0) + || (destBounds.left >= SCREEN_WIDTH) || (destBounds.top >= SCREEN_HEIGHT))) { // Register the affected area as dirty addDirtyRect(destBounds); -- cgit v1.2.3 From 3f17a3ff252e802858912818f166539604d8fb86 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 2 Jan 2012 09:27:24 +1100 Subject: TSAGE: Simplified some of the dirty rect code to use existing Rect methods --- engines/tsage/graphics.cpp | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 4db898662f..4b9a4ad5ad 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -659,7 +659,7 @@ void GfxSurface::mergeDirtyRects() { rInner = rOuter; while (++rInner != _dirtyRects.end()) { - if (looseIntersectRectangle(*rOuter, *rInner)) { + if ((*rOuter).intersects(*rInner)) { // these two rectangles overlap or // are next to each other - merge them @@ -675,22 +675,6 @@ void GfxSurface::mergeDirtyRects() { } } -/** - * Check if the two rectangles are next to each other. - * @param pSrc1 a source rectangle - * @param pSrc2 a source rectangle - */ -bool GfxSurface::looseIntersectRectangle(const Rect &src1, const Rect &src2) { - Rect destRect; - - destRect.left = MAX(src1.left, src2.left); - destRect.top = MAX(src1.top, src2.top); - destRect.right = MIN(src1.right, src2.right); - destRect.bottom = MIN(src1.bottom, src2.bottom); - - return destRect.isValidRect(); -} - /** * Creates the union of two rectangles. * Returns True if there is a union. @@ -699,10 +683,8 @@ bool GfxSurface::looseIntersectRectangle(const Rect &src1, const Rect &src2) { * @param pSrc2 a source rectangle */ bool GfxSurface::unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2) { - destRect.left = MIN(src1.left, src2.left); - destRect.top = MIN(src1.top, src2.top); - destRect.right = MAX(src1.right, src2.right); - destRect.bottom = MAX(src1.bottom, src2.bottom); + destRect = src1; + destRect.extend(src2); return !destRect.isEmpty(); } -- cgit v1.2.3 From 300a04700a94a3899f76300cfe7eda3a5756caef Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 2 Jan 2012 10:17:44 +1100 Subject: TSAGE: Implemented changes for dirty rect handling needed for R2R --- engines/tsage/graphics.cpp | 19 +++++++++++++++++++ engines/tsage/graphics.h | 12 +++--------- 2 files changed, 22 insertions(+), 9 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 4b9a4ad5ad..8436afe2e8 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1301,6 +1301,25 @@ int GfxManager::getAngle(const Common::Point &p1, const Common::Point &p2) { return result; } } + + +void GfxManager::copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion) { + if (&_surface == &(GLOBALS._screenSurface)) + _surface.setBounds(Rect(0, 0, _bounds.width(), _bounds.height())); + else + _surface.setBounds(_bounds); + + _surface.copyFrom(src, destBounds, priorityRegion); +} +void GfxManager::copyFrom(GfxSurface &src, int destX, int destY) { + if (&_surface == &(GLOBALS._screenSurface)) + _surface.setBounds(Rect(0, 0, _bounds.width(), _bounds.height())); + else + _surface.setBounds(_bounds); + + _surface.copyFrom(src, destX, destY); +} + /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index ba4090317b..9c6f13e407 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -83,7 +83,6 @@ private: Common::List _dirtyRects; void mergeDirtyRects(); - bool looseIntersectRectangle(const Rect &src1, const Rect &src2); bool unionRectangle(Common::Rect &destRect, const Rect &src1, const Rect &src2); public: @@ -302,14 +301,9 @@ public: virtual void set(byte *dest, int size, byte val) { Common::fill(dest, dest + size, val); } - void copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion = NULL) { - _surface.setBounds(_bounds); - _surface.copyFrom(src, destBounds, priorityRegion); - } - void copyFrom(GfxSurface &src, int destX, int destY) { - _surface.setBounds(_bounds); - _surface.copyFrom(src, destX, destY); - } + void copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion = NULL); + void copyFrom(GfxSurface &src, int destX, int destY); + GfxSurface &getSurface() { _surface.setBounds(_bounds); return _surface; -- 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/globals.cpp | 2 + engines/tsage/globals.h | 1 + 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 + 7 files changed, 1001 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index e18f3c12eb..2988a87861 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -376,6 +376,7 @@ void Ringworld2Globals::reset() { // Reset fields _v558B6.set(0, 0, 0, 0); + _v558C2 = 0; _v5657C = 0; _v565F5 = 0; _v565AE = 0; @@ -418,6 +419,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { _v558B6.synchronize(s); + s.syncAsSint16LE(_v558C2); s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v56A9E); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index f50cb70773..8c84a4ecfd 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -249,6 +249,7 @@ public: StripProxy _stripProxy; int _insetUp; Rect _v558B6; + int _v558C2; int _v565F5; int _v5657C; byte _v565AE; 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') 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/core.cpp | 6 ++++++ engines/tsage/core.h | 1 + engines/tsage/ringworld2/ringworld2_scenes3.cpp | 12 ++++-------- 3 files changed, 11 insertions(+), 8 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 7cbcb863c7..331cac6c4b 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2022,6 +2022,8 @@ SceneObject::SceneObject() : SceneHotspot() { _frame = 0; _effect = 0; _shade = 0; + + _field8A = Common::Point(0, 0); } SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() { @@ -2396,6 +2398,10 @@ void SceneObject::synchronize(Serializer &s) { SYNC_POINTER(_mover); s.syncAsSint16LE(_moveDiff.x); s.syncAsSint16LE(_moveDiff.y); s.syncAsSint32LE(_moveRate); + if (g_vm->getGameID() == GType_Ringworld2) { + s.syncAsSint16LE(_field8A.x); + s.syncAsSint16LE(_field8A.y); + } SYNC_POINTER(_endAction); s.syncAsUint32LE(_regionBitList); diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 98606dc64d..755964c84a 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -540,6 +540,7 @@ public: EventHandler *_mover; Common::Point _moveDiff; int _moveRate; + Common::Point _field8A; Action *_endAction; uint32 _regionBitList; 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 3344cf424a90d22ab44c8b64b7ad598a53147e26 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 4 Jan 2012 21:16:32 +1100 Subject: TSAGE: Added needed speaker method call for R2R in StripManager::signal --- engines/tsage/converse.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index c3b48a7693..06fbffb751 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -25,6 +25,7 @@ #include "tsage/tsage.h" #include "tsage/globals.h" #include "tsage/staticres.h" +#include "ringworld2/ringworld2_speakers.h" namespace TsAGE { @@ -836,6 +837,9 @@ void StripManager::signal() { } } + if ((g_vm->getGameID() == GType_Ringworld2) && (_obj44List.size() > 0)) + static_cast(_activeSpeaker)->proc15(); + _textShown = true; _activeSpeaker->setText(choiceList[strIndex]); } -- 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/core.cpp | 22 +++++++++++++++++++++- engines/tsage/core.h | 3 ++- engines/tsage/ringworld2/ringworld2_logic.cpp | 10 ++-------- engines/tsage/ringworld2/ringworld2_logic.h | 4 ---- 4 files changed, 25 insertions(+), 14 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 331cac6c4b..8f4efafa01 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2021,7 +2021,8 @@ SceneObject::SceneObject() : SceneHotspot() { _strip = 0; _frame = 0; _effect = 0; - _shade = 0; + _shade = _shade2 = 0; + _linkedActor = NULL; _field8A = Common::Point(0, 0); } @@ -2408,6 +2409,8 @@ void SceneObject::synchronize(Serializer &s) { if (g_vm->getGameID() == GType_Ringworld2) { s.syncAsSint16LE(_effect); s.syncAsSint16LE(_shade); + s.syncAsSint16LE(_shade2); + SYNC_POINTER(_linkedActor); } } @@ -2451,6 +2454,12 @@ void SceneObject::remove() { } void SceneObject::dispatch() { + if (g_vm->getGameID() == GType_Ringworld2) { + if (_shade != _shade2) + _flags |= OBJFLAG_PANES; + _shade2 = _shade; + } + uint32 currTime = g_globals->_events.getFrameNumber(); if (_action) _action->dispatch(); @@ -2558,6 +2567,17 @@ void SceneObject::dispatch() { if (!(_flags & OBJFLAG_FIXED_PRIORITY)) { setPriority(_position.y); } + + if (g_vm->getGameID() == GType_Ringworld2) { + if (_linkedActor) { + _linkedActor->setPosition(_position); + _linkedActor->setStrip(_strip); + _linkedActor->setFrame(_frame); + } + + if ((_effect == 1) && (getRegionIndex() < 11)) + _shade = 0; + } } void SceneObject::calcAngle(const Common::Point &pt) { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 755964c84a..36071732cf 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -545,8 +545,9 @@ public: uint32 _regionBitList; // Ringworld 2 specific fields - int _shade; + int _shade, _shade2; int _effect; + SceneObject *_linkedActor; public: SceneObject(); SceneObject(const SceneObject &so); 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/core.h | 1 + engines/tsage/globals.cpp | 14 + engines/tsage/globals.h | 6 + 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 +++ 7 files changed, 494 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 36071732cf..846dd3532c 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -545,6 +545,7 @@ public: uint32 _regionBitList; // Ringworld 2 specific fields + byte *_field9C; int _shade, _shade2; int _effect; SceneObject *_linkedActor; diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 2988a87861..bae933a2c5 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -382,6 +382,13 @@ void Ringworld2Globals::reset() { _v565AE = 0; for (int i = 0; i < 14; i++) _v56605[i] = 0; + _v566A6 = 3800; + _v566A8 = 0; + _v566A9 = 0; + _v566AA = 0; + for (int i = 0; i < 1000; i++) + _v566AB[i] = 0; + _v56A93 = 0; _v56A99 = 0; _v56A9E = 0; _v56AA0 = 0; @@ -422,6 +429,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v558C2); s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); + s.syncAsSint16LE(_v566A6); + s.syncAsSint16LE(_v56A93); s.syncAsSint16LE(_v56A9E); s.syncAsSint16LE(_v56AAB); s.syncAsSint16LE(_v57C2C); @@ -432,11 +441,16 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v565F1[i]); s.syncAsByte(_v565AE); + s.syncAsByte(_v566A8); + s.syncAsByte(_v566A9); + s.syncAsByte(_v566AA); s.syncAsByte(_v56AA0); s.syncAsByte(_v56AA1); for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); + for (i = 0; i < 1000; ++i) + s.syncAsByte(_v566AB[i]); s.syncAsByte(_v56A99); for (i = 0; i < 12; ++i) s.syncAsByte(_stripManager_lookupList[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 8c84a4ecfd..23bb79b50f 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -254,6 +254,12 @@ public: int _v5657C; byte _v565AE; byte _v56605[14]; + int _v566A6; + byte _v566A8; + byte _v566A9; + byte _v566AA; + byte _v566AB[1000]; + int _v56A93; byte _v56A99; int _v56A9E; byte _v56AA0; 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 159fb89cfde1eaa764dfcf136fc06d0fd4780401 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Wed, 4 Jan 2012 15:46:58 +0100 Subject: TSAGE: Explain function of sub_F8E5_calculatePoint --- engines/tsage/core.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 8f4efafa01..fdd9feac03 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -941,6 +941,8 @@ int PlayerMover::findDistance(const Common::Point &pt1, const Common::Point &pt2 return (int)sqrt(xx + yy); } +// Calculate intersection of the line segments pt1-pt2 and pt3-pt4. +// Return true if they intersect, and return the intersection in ptOut. bool PlayerMover::sub_F8E5_calculatePoint(const Common::Point &pt1, const Common::Point &pt2, const Common::Point &pt3, const Common::Point &pt4, Common::Point *ptOut) { double diffX1 = pt2.x - pt1.x; -- 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') 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/module.mk | 1 + engines/tsage/ringworld2/ringworld2_logic.cpp | 3 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 92 +++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 53 ++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 engines/tsage/ringworld2/ringworld2_scenes1.cpp create mode 100644 engines/tsage/ringworld2/ringworld2_scenes1.h (limited to 'engines/tsage') diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk index 95a1a583dd..53c03e2e57 100644 --- a/engines/tsage/module.mk +++ b/engines/tsage/module.mk @@ -38,6 +38,7 @@ MODULE_OBJS := \ ringworld2/ringworld2_dialogs.o \ ringworld2/ringworld2_logic.o \ ringworld2/ringworld2_scenes0.o \ + ringworld2/ringworld2_scenes1.o \ ringworld2/ringworld2_scenes2.o \ ringworld2/ringworld2_scenes3.o \ ringworld2/ringworld2_speakers.o \ 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') 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 ++ engines/tsage/staticres.cpp | 10 +- engines/tsage/staticres.h | 5 +- 5 files changed, 919 insertions(+), 6 deletions(-) (limited to 'engines/tsage') 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 { diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 7d9247b4a3..cc93c4f35f 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -183,7 +183,7 @@ char const *const THE_NEXT_DAY = "The Next Day"; namespace Ringworld2 { -char const *const CONSOLE_MESSAGES[] = { +char const *const CONSOLE125_MESSAGES[] = { NULL, "Select Language", "Computer Services", "Food Services", "Entertainment Services", "Main Menu", "Exit Menu", "Previous Menu", "Interworld", "Hero's Tongue", "Personal Log", "Database", "Starchart", "Iso-Opto Disk Reader", "Eject Disk", "Meals", "Snacks", @@ -192,6 +192,14 @@ char const *const CONSOLE_MESSAGES[] = { "Mozart", "Bach", "Rossini" }; +char const *const CONSOLE325_MESSAGES[] = { + NULL, "Select Language", "Database", "Star Chart", "Scan Ops", "Deep Scan", + "Short Scan", "Main Menu", "Previous Menu", "Exit Menu", "Interworld", "Hero's Tongue", + "Done", " ", " ", "Passive Enabled", "Active Enabled", "Technological", "Biological", + "Geographical", "Astronomical", "Dipole Anomaly Sweep", "Structural Analysis", + "A-G", "N-O", "P-S", "T-Z", "Tchaikovsky", "Mozart", "Bach", "Rossini" +}; + // Scene 825 Autodoc messages char const *const MAIN_MENU = "main menu"; char const *const DIAGNOSIS = "diagnosis"; diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 358ae9f8bb..5b6f4393c4 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -147,7 +147,10 @@ extern char const *const THE_NEXT_DAY; namespace Ringworld2 { // Scene 125 - Console messages -extern char const *const CONSOLE_MESSAGES[]; +extern char const *const CONSOLE125_MESSAGES[]; + +// Scene 325 - Console messages +extern char const *const CONSOLE325_MESSAGES[]; // Scene 825 - Autodoc Messages extern char const *const MAIN_MENU; -- 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/core.cpp | 14 + engines/tsage/core.h | 2 + engines/tsage/globals.cpp | 2 + engines/tsage/globals.h | 1 + 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 + 9 files changed, 913 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index fdd9feac03..3e49b6b204 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2702,6 +2702,20 @@ void BackgroundSceneObject::draw() { g_globals->_sceneManager._scene->_backSurface.copyFrom(frame, destRect, priorityRegion); } +void BackgroundSceneObject::setup2(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority, int32 arg10) { + warning("TODO: Implement properly BackgroundSceneObject::setup2()"); + postInit(); + setVisage(visage); + setStrip(stripFrameNum); + setFrame(frameNum); + setPosition(Common::Point(posX, posY), 0); + fixPriority(priority); +} + +void BackgroundSceneObject::proc27() { + warning("STUB: BackgroundSceneObject::proc27()"); +} + /*--------------------------------------------------------------------------*/ void SceneObjectList::draw() { diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 846dd3532c..542e1d9744 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -608,6 +608,8 @@ public: virtual Common::String getClassName() { return "BackgroundSceneObject"; } virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void draw(); + void setup2(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority, int32 arg10); + void proc27(); }; class SceneText : public SceneObject { diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index bae933a2c5..ad7d0d1e0c 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -375,6 +375,7 @@ void Ringworld2Globals::reset() { T2_GLOBALS._uiElements._active = false; // Reset fields + _v5589E.set(0, 0, 0, 0); _v558B6.set(0, 0, 0, 0); _v558C2 = 0; _v5657C = 0; @@ -424,6 +425,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { TsAGE2Globals::synchronize(s); int i; + _v5589E.synchronize(s); _v558B6.synchronize(s); s.syncAsSint16LE(_v558C2); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 23bb79b50f..227058f1d6 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -248,6 +248,7 @@ public: PlayStream _playStream; StripProxy _stripProxy; int _insetUp; + Rect _v5589E; Rect _v558B6; int _v558C2; int _v565F5; 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') 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') 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 2bc89ea4dcab39607002427862a6e0afacaad113 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 8 Jan 2012 19:00:33 +0200 Subject: TSAGE: Fix incorrect popup menu positions (regression) --- engines/tsage/graphics.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 8436afe2e8..b211f910c1 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1302,19 +1302,31 @@ int GfxManager::getAngle(const Common::Point &p1, const Common::Point &p2) { } } +// FIXME: The two checks for screenSurface inside these two copyFrom() methods +// are meant for Ringworld 2, but the corresponding setBounds case causes a lot +// of issues with the popup menus when right clicking in all games (i.e. the +// popup menu is always shown on the top left of the screen). For now, these checks +// are limited for R2R only (as was the original intent), but they should be +// investigated, as they cause the same glitches with the popup menu there as with +// the other games. void GfxManager::copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion) { +#if 0 if (&_surface == &(GLOBALS._screenSurface)) _surface.setBounds(Rect(0, 0, _bounds.width(), _bounds.height())); else +#endif _surface.setBounds(_bounds); _surface.copyFrom(src, destBounds, priorityRegion); } + void GfxManager::copyFrom(GfxSurface &src, int destX, int destY) { +#if 0 if (&_surface == &(GLOBALS._screenSurface)) _surface.setBounds(Rect(0, 0, _bounds.width(), _bounds.height())); else +#endif _surface.setBounds(_bounds); _surface.copyFrom(src, destX, destY); -- cgit v1.2.3 From 4938e49e2df1d2f8f794461a32a7da86f4e1e967 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 8 Jan 2012 19:02:14 +0200 Subject: TSAGE: Fix assert triggering when there's nothing to update on screen --- engines/tsage/graphics.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index b211f910c1..afaf05190e 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -259,6 +259,12 @@ void GfxSurface::updateScreen() { for (Common::List::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) { Rect r = *i; + // Make sure that there is something to update. If not, skip this + // rectangle. An example case is the speedbike closeup at the beginning + // of Ringworld (third screen). + if (r.isEmpty()) + continue; + const byte *srcP = (const byte *)_customSurface->getBasePtr(r.left, r.top); g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top, r.width(), r.height()); -- cgit v1.2.3 From fb26f7dcfa2987706f669882135c7648d365e696 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 8 Jan 2012 19:07:00 +0200 Subject: TSAGE: Update comment --- engines/tsage/graphics.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index afaf05190e..5acd191b11 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1309,12 +1309,10 @@ int GfxManager::getAngle(const Common::Point &p1, const Common::Point &p2) { } // FIXME: The two checks for screenSurface inside these two copyFrom() methods -// are meant for Ringworld 2, but the corresponding setBounds case causes a lot -// of issues with the popup menus when right clicking in all games (i.e. the -// popup menu is always shown on the top left of the screen). For now, these checks -// are limited for R2R only (as was the original intent), but they should be -// investigated, as they cause the same glitches with the popup menu there as with -// the other games. +// are meant for Ringworld 2, but the corresponding setBounds cases cause +// issues with the popup menus when right clicking in all games (e.g. the popup +// menu is always shown on the top left of the screen). Therefore, these two +// code fragments are disabled for now, till the glitches they cause are fixed. void GfxManager::copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion) { #if 0 -- 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') 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') 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') 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 3f05ee5452b6f5a5d876bf38fbf806616a90ff50 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 10 Jan 2012 20:10:46 +0100 Subject: TSAGE: R2R - Add some global variables, fix some default values --- engines/tsage/globals.cpp | 36 ++++++++++++++++++++++++++++++------ engines/tsage/globals.h | 5 +++++ 2 files changed, 35 insertions(+), 6 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index ad7d0d1e0c..4c9c6de956 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -381,23 +381,42 @@ void Ringworld2Globals::reset() { _v5657C = 0; _v565F5 = 0; _v565AE = 0; - for (int i = 0; i < 14; i++) - _v56605[i] = 0; + + _v56605[0] = 0; + _v56605[1] = 3; + _v56605[2] = 5; + _v56605[3] = 1; + _v56605[4] = 2; + _v56605[5] = 5; + _v56605[6] = 9; + _v56605[7] = 14; + _v56605[8] = 15; + _v56605[9] = 18; + _v56605[10] = 20; + _v56605[11] = 25; + _v56605[12] = 27; + _v56605[13] = 31; + _v566A6 = 3800; - _v566A8 = 0; + _v566A8 = 5; _v566A9 = 0; _v566AA = 0; for (int i = 0; i < 1000; i++) _v566AB[i] = 0; - _v56A93 = 0; - _v56A99 = 0; + _v56A93 = -1; + _v56A99 = 5; _v56A9E = 0; _v56AA0 = 0; _v56AA1 = 0; + _v56AA2 = 60; + _v56AA4 = 660; + _v56AA6 = 1; + _v56AA7 = 1; + _v56AA8 = 1; _v56AAB = 0; _v57C2C = 0; _v58CE2 = 0; - Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); + Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 1); _speechSubtitles = SPEECH_VOICE | SPEECH_TEXT; _insetUp = 0; @@ -434,6 +453,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v566A6); s.syncAsSint16LE(_v56A93); s.syncAsSint16LE(_v56A9E); + s.syncAsSint16LE(_v56AA2); + s.syncAsSint16LE(_v56AA4); s.syncAsSint16LE(_v56AAB); s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_v58CE2); @@ -448,6 +469,9 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_v566AA); s.syncAsByte(_v56AA0); s.syncAsByte(_v56AA1); + s.syncAsByte(_v56AA6); + s.syncAsByte(_v56AA7); + s.syncAsByte(_v56AA8); for (i = 0; i < 14; ++i) s.syncAsByte(_v56605[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 227058f1d6..07f5b85e9b 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -265,6 +265,11 @@ public: int _v56A9E; byte _v56AA0; byte _v56AA1; + int _v56AA2; + int _v56AA4; + byte _v56AA6; + byte _v56AA7; + byte _v56AA8; int _v56AAB; int _v57C2C; int _v58CE2; -- 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') 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') 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/globals.cpp | 12 +- engines/tsage/globals.h | 3 +- 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 - engines/tsage/staticres.cpp | 23 + engines/tsage/staticres.h | 3 + 9 files changed, 1306 insertions(+), 24 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 4c9c6de956..1ac426518d 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -416,11 +416,14 @@ void Ringworld2Globals::reset() { _v56AAB = 0; _v57C2C = 0; _v58CE2 = 0; + _v565EC[0] = 0; + _v565EC[1] = 27; + _v565EC[2] = 27; + _v565EC[3] = 4; + _v565EC[4] = 4; Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 1); _speechSubtitles = SPEECH_VOICE | SPEECH_TEXT; _insetUp = 0; - - Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 0); Common::fill(&_stripManager_lookupList[0], &_stripManager_lookupList[12], 0); _stripManager_lookupList[0] = 1; _stripManager_lookupList[1] = 1; @@ -460,8 +463,11 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v58CE2); s.syncAsSint16LE(_speechSubtitles); + for (i = 0; i < 5; i++) + s.syncAsByte(_v565EC[i]); + for (i = 0; i < MAX_CHARACTERS; ++i) - s.syncAsSint16LE(_v565F1[i]); + s.syncAsByte(_v565F1[i]); s.syncAsByte(_v565AE); s.syncAsByte(_v566A8); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 07f5b85e9b..9d00e618a4 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -274,7 +274,8 @@ public: int _v57C2C; int _v58CE2; int _speechSubtitles; - int _v565F1[4]; + byte _v565EC[5]; + byte _v565F1[4]; byte _stripManager_lookupList[12]; virtual void reset(); 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"; } diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index cc93c4f35f..1251b6d262 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -237,6 +237,29 @@ char const *const F7 = "F7"; char const *const F8 = "F8"; char const *const F10 = "F10"; +const byte _v5A4D6[] = { + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, + 13, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14 +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 5b6f4393c4..ae2aa28aeb 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -190,6 +190,9 @@ extern char const *const F7; extern char const *const F8; extern char const *const F10; +// Scene 1550 map +extern const byte _v5A4D6[]; + } // End of namespace Ringworld2 } // End of namespace TsAGE -- 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') 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') 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/globals.h | 5 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 698 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 8 +- engines/tsage/staticres.cpp | 163 +++++- engines/tsage/staticres.h | 11 +- 5 files changed, 876 insertions(+), 9 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 9d00e618a4..5b1d6b4eb0 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -242,6 +242,11 @@ namespace Ringworld2 { #define SPEECH_TEXT 1 #define SPEECH_VOICE 2 +#define k5A78C 15 +#define k5A78D 16 +#define k5A790 18 +#define k5A791 17 + class Ringworld2Globals: public TsAGE2Globals { public: ASoundExt _sound1, _sound2, _sound3, _sound4; 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(); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 1251b6d262..398d06881b 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -237,7 +237,137 @@ char const *const F7 = "F7"; char const *const F8 = "F8"; char const *const F10 = "F10"; -const byte _v5A4D6[] = { +const byte k562CC[] = { + 20, 7, 41, 6, + 3, 6, 42, 11, + 10, 15, 43, 6, + 15, 1, 44, 7, + 1, 1, 2, 1, + 1, 1, 21, 12, + 5, 1, 36, 1, + 5, 1, 28, 2, + 9, 1, 10, 7, + 9, 1, 12, 10, + 19, 1, 10, 8, + 19, 1, 2, 13, + 25, 1, 31, 1, + 27, 1, 15, 6, + 27, 1, 20, 7, + 28, 1, 24, 4, + 6, 2, 22, 1, + 6, 2, 16, 5, + 12, 2, 40, 1, + 12, 2, 6, 11, + 18, 2, 21, 5, + 20, 5, 19, 4, + 20, 5, 18, 8, + 1, 6, 20, 11, + 1, 6, 18, 15, + 1, 6, 16, 4, + 7, 6, 6, 16, + 8, 6, 23, 9, + 8, 6, 38, 10, + 8, 6, 14, 13, + 8, 6, 6, 14, + 8, 6, 11, 15, + 10, 6, 3, 1, + 10, 6, 8, 2, + 10, 6, 13, 3, + 10, 6, 6, 15, + 17, 6, 4, 15, + 5, 7, 26, 11, + 25, 7, 27, 3, + 28, 7, 21, 5, + 2, 8, 23, 5, + 14, 8, 21, 5, + 14, 8, 22, 16, + 22, 8, 34, 3, + 22, 8, 24, 7, + 6, 9, 38, 5, + 6, 9, 32, 6, + 6, 9, 18, 7, + 9, 9, 34, 15, + 9, 9, 35, 16, + 18, 9, 1, 5, + 18, 9, 24, 11, + 26, 9, 21, 10, + 1, 10, 21, 9, + 1, 10, 12, 13, + 11, 10, 21, 16, + 15, 10, 8, 1, + 15, 10, 12, 6, + 15, 10, 14, 10, + 20, 10, 14, 10, + 20, 10, 39, 11, + 3, 11, 5, 9, + 3, 11, 4, 13, + 5, 11, 32, 7, + 5, 11, 20, 8, + 5, 11, 20, 11, + 7, 12, 22, 11, + 7, 12, 2, 12, + 7, 12, 23, 16, + 8, 12, 25, 9, + 13, 12, 23, 10, + 16, 12, 3, 11, + 17, 12, 25, 10, + 17, 12, 28, 15, + 25, 12, 8, 15, + 26, 12, 7, 14, + 1, 13, 8, 6, + 10, 13, 28, 11, + 21, 13, 25, 13, + 21, 13, 24, 16, + 25, 13, 25, 3, + 5, 14, 17, 6, + 5, 14, 23, 16, + 12, 14, 36, 15, + 12, 14, 17, 16, + 13, 14, 40, 13, + 13, 14, 38, 14, + 19, 14, 18, 10, + 2, 15, 4, 14, + 8, 15, 1, 13, + 12, 15, 21, 4, + 12, 15, 27, 7, + 12, 15, 28, 8, + 13, 15, 34, 1, + 13, 15, 31, 5, + 14, 15, 21, 16, + 15, 15, 29, 1, + 15, 15, 23, 13, + 25, 15, 24, 6, + 25, 15, 23, 11, + 28, 15, 8, 6, + 28, 15, 9, 10, + 1, 16, 1, 1, + 1, 16, 22, 5, + 7, 16, 3, 4, + 8, 16, 7, 1, + 11, 17, 4, 12, + 18, 17, 1, 13, + 22, 17, 21, 6, + 22, 17, 28, 15, + 27, 17, 12, 7, + 27, 17, 8, 8, + 27, 17, 14, 11, + 27, 17, 18, 15, + 27, 17, 2, 16, + 6, 18, 24, 7, + 14, 18, 21, 13, + 27, 18, 38, 4, + 28, 18, 20, 1, + 1, 18, 11, 15, + 9, 18, 7, 1, + 9, 18, 13, 12, + 16, 18, 32, 10, + 16, 18, 25, 13, + 16, 18, 31, 14, + 25, 18, 20, 7, + 28, 18, 21, 1 +}; + +const byte k5A4D6[] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, @@ -260,6 +390,37 @@ const byte _v5A4D6[] = { 13, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14 }; +const byte k5A72E[] = {0, 98, 135, 183, 229, 81, 133, 185, 235, 75, 131, 187, 241, 70, 129, 190, 247}; +const byte k5A73F[] = {0, 42, 42, 42, 42, 67, 67, 67, 67, 92, 92, 92, 92, 116, 116, 116, 116}; +const byte k5A750[] = { + 9, 10, 7, 13, 7, 8, 9, 7, 9, 10, + 2, 3, 3, 2, 2, 2, 4, 3, 3, 4, + 3, 2, 3, 4, 3, 8, 10, 4, 0 +}; +const byte k5A76D[] = { + 3, 3, 3, 4, 3, 3, 3, 3, 1, 3, + 3, 3, 3, 7, 3, 7, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3 +}; +const byte k5A78A[] = {0, 8, 15, 16, 12, 7, 18, 17, 13, 6, 19, 20, 14, 5, 11, 10, 9}; +const byte k5A79B[] = { + 23, 3, 1, + 23, 4, 1, + 26, 3, 1, + 26, 4, 1, + 15, 16, 2, + 2, 16, 3, + 3, 16, 4, + 10, 7, 5, + 11, 7, 6, + 3, 0, 7, + 4, 0, 8, + 24, 11, 9, + 25, 11, 10, + 12, 8, 11, + 9, 11, 12 +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index ae2aa28aeb..b2489b7e3d 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -190,8 +190,15 @@ extern char const *const F7; extern char const *const F8; extern char const *const F10; -// Scene 1550 map -extern const byte _v5A4D6[]; +// Scene 1550 arrays of constants +extern const byte k562CC[]; +extern const byte k5A4D6[]; +extern const byte k5A72E[]; +extern const byte k5A73F[]; +extern const byte k5A750[]; +extern const byte k5A76D[]; +extern const byte k5A78A[]; +extern const byte k5A79B[]; } // End of namespace Ringworld2 -- 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') 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') 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') 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') 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 ++++ engines/tsage/staticres.cpp | 20 ++ engines/tsage/staticres.h | 1 + 5 files changed, 455 insertions(+) (limited to 'engines/tsage') 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 diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 398d06881b..543dbe86a9 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -421,6 +421,26 @@ const byte k5A79B[] = { 9, 11, 12 }; +const byte k5A7F6[] = { + 4, 11, 6, + 5, 14, 5, + 5, 11, 6, + 5, 7, 5, + 6, 9, 6, + 7, 16, 7, + 7, 12, 7, + 8, 6, 5, + 9, 9, 7, + 10, 13, 9, + 10, 6, 8, + 11, 10, 9, + 12, 15, 10, + 13, 12, 11, + 14, 8, 9, + 15, 16, 1, + 15, 10, 11 +}; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index b2489b7e3d..2a5d5c76ba 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -199,6 +199,7 @@ extern const byte k5A750[]; extern const byte k5A76D[]; extern const byte k5A78A[]; extern const byte k5A79B[]; +extern const byte k5A7F6[]; } // End of namespace Ringworld2 -- 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') 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') 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 ++- engines/tsage/staticres.cpp | 2 + engines/tsage/staticres.h | 2 + 7 files changed, 378 insertions(+), 5 deletions(-) (limited to 'engines/tsage') 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"; } diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 543dbe86a9..3aec851b74 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -237,6 +237,8 @@ char const *const F7 = "F7"; char const *const F8 = "F8"; char const *const F10 = "F10"; +char const *const DONE_MSG = "Done"; + const byte k562CC[] = { 20, 7, 41, 6, 3, 6, 42, 11, diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 2a5d5c76ba..4a92f48cf8 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -190,6 +190,8 @@ extern char const *const F7; extern char const *const F8; extern char const *const F10; +extern char const *const DONE_MSG; + // Scene 1550 arrays of constants extern const byte k562CC[]; extern const byte k5A4D6[]; -- 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/globals.cpp | 4 + engines/tsage/globals.h | 2 + engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 467 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 60 +++ 5 files changed, 534 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 1ac426518d..e6c167355c 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -380,6 +380,8 @@ void Ringworld2Globals::reset() { _v558C2 = 0; _v5657C = 0; _v565F5 = 0; + _v565F6 = 0; + _v565FA = 0; _v565AE = 0; _v56605[0] = 0; @@ -453,6 +455,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v558C2); s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565F5); + s.syncAsSint16LE(_v565F6); + s.syncAsSint16LE(_v565FA); s.syncAsSint16LE(_v566A6); s.syncAsSint16LE(_v56A93); s.syncAsSint16LE(_v56A9E); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 5b1d6b4eb0..e734ef3196 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -257,6 +257,8 @@ public: Rect _v558B6; int _v558C2; int _v565F5; + int _v565F6; + int _v565FA; int _v5657C; byte _v565AE; byte _v56605[14]; 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') 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') 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/globals.cpp | 2 + engines/tsage/globals.h | 1 + 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 + 7 files changed, 323 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index e6c167355c..e058be871b 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -407,6 +407,7 @@ void Ringworld2Globals::reset() { _v566AB[i] = 0; _v56A93 = -1; _v56A99 = 5; + _v56A9C = 0; _v56A9E = 0; _v56AA0 = 0; _v56AA1 = 0; @@ -459,6 +460,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v565FA); s.syncAsSint16LE(_v566A6); s.syncAsSint16LE(_v56A93); + s.syncAsSint16LE(_v56A9C); s.syncAsSint16LE(_v56A9E); s.syncAsSint16LE(_v56AA2); s.syncAsSint16LE(_v56AA4); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index e734ef3196..285e48e611 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -269,6 +269,7 @@ public: byte _v566AB[1000]; int _v56A93; byte _v56A99; + int _v56A9C; int _v56A9E; byte _v56AA0; byte _v56AA1; 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') 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') 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/events.h | 7 +- engines/tsage/globals.cpp | 2 + engines/tsage/globals.h | 1 + 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 +- 10 files changed, 679 insertions(+), 13 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index dcff1b45b8..6f54163682 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -88,9 +88,10 @@ enum CursorType { // Ringworld 2 objects R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, - R2_7 = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_OPTICAL_FIBRE = 14, - R2_CLAMP = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21, - R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, R2_26 = 26, R2_27 = 27, R2_28 = 28, + R2_SONIC_STUNNER = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_AEROSOL = 12, R2_13 = 13, + R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, + R2_REBREATHER_TANK = 20, R2_21 = 21, R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, + R2_26 = 26, R2_27 = 27, R2_28 = 28, R2_29 = 29, R2_30 = 30, R2_31 = 31, R2_32 = 32, R2_33 = 33, R2_34 = 34, R2_35 = 35, R2_36 = 36, R2_37 = 37, R2_38 = 38, R2_39 = 39, R2_40 = 40, R2_41 = 41, R2_42 = 42, R2_43 = 43, R2_44 = 44, R2_45 = 45, R2_46 = 46, R2_47 = 47, R2_48 = 48, R2_49 = 49, diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index e058be871b..f0f02d4acb 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -400,6 +400,7 @@ void Ringworld2Globals::reset() { _v56605[13] = 31; _v566A6 = 3800; + _v566A3 = 2; _v566A8 = 5; _v566A9 = 0; _v566AA = 0; @@ -458,6 +459,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v565F6); s.syncAsSint16LE(_v565FA); + s.syncAsSint16LE(_v566A3); s.syncAsSint16LE(_v566A6); s.syncAsSint16LE(_v56A93); s.syncAsSint16LE(_v56A9C); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 285e48e611..b9babde131 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -263,6 +263,7 @@ public: byte _v565AE; byte _v56605[14]; int _v566A6; + byte _v566A3; byte _v566A8; byte _v566A9; byte _v566AA; 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/globals.cpp | 4 +- engines/tsage/globals.h | 2 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 1 + engines/tsage/ringworld2/ringworld2_scenes1.cpp | 324 +++++++++++++++++++++++- engines/tsage/ringworld2/ringworld2_scenes1.h | 49 ++++ 5 files changed, 375 insertions(+), 5 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index f0f02d4acb..1c2b83c81b 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -408,7 +408,7 @@ void Ringworld2Globals::reset() { _v566AB[i] = 0; _v56A93 = -1; _v56A99 = 5; - _v56A9C = 0; + _scene1925CurrLevel = 0; //_v56A9C _v56A9E = 0; _v56AA0 = 0; _v56AA1 = 0; @@ -462,7 +462,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v566A3); s.syncAsSint16LE(_v566A6); s.syncAsSint16LE(_v56A93); - s.syncAsSint16LE(_v56A9C); + s.syncAsSint16LE(_scene1925CurrLevel); // _v56A9C s.syncAsSint16LE(_v56A9E); s.syncAsSint16LE(_v56AA2); s.syncAsSint16LE(_v56AA4); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index b9babde131..c4ab3e695c 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -270,7 +270,7 @@ public: byte _v566AB[1000]; int _v56A93; byte _v56A99; - int _v56A9C; + int _scene1925CurrLevel; //_v56A9C int _v56A9E; byte _v56AA0; byte _v56AA1; 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') 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') 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') 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/globals.cpp | 29 +- engines/tsage/globals.h | 3 + engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 1800 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 142 ++ 5 files changed, 1974 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 1c2b83c81b..579239d565 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -383,7 +383,6 @@ void Ringworld2Globals::reset() { _v565F6 = 0; _v565FA = 0; _v565AE = 0; - _v56605[0] = 0; _v56605[1] = 3; _v56605[2] = 5; @@ -399,8 +398,34 @@ void Ringworld2Globals::reset() { _v56605[12] = 27; _v56605[13] = 31; + for (int i = 0; i < 18; i++) { + _v56613[(i * 4) ] = 1; + _v56613[(i * 4) + 2] = 0; + _v56613[(i * 4) + 3] = 0; + } + _v56613[( 0 * 4) + 1] = 1; + _v56613[( 1 * 4) + 1] = 2; + _v56613[( 2 * 4) + 1] = 2; + _v56613[( 3 * 4) + 1] = 3; + _v56613[( 4 * 4) + 1] = 2; + _v56613[( 5 * 4) + 1] = 2; + _v56613[( 6 * 4) + 1] = 3; + _v56613[( 7 * 4) + 1] = 1; + _v56613[( 8 * 4) + 1] = 1; + _v56613[( 9 * 4) + 1] = 3; + _v56613[(10 * 4) + 1] = 3; + _v56613[(11 * 4) + 1] = 1; + _v56613[(12 * 4) + 1] = 2; + _v56613[(13 * 4) + 1] = 3; + _v56613[(14 * 4) + 1] = 2; + _v56613[(15 * 4) + 1] = 3; + _v56613[(16 * 4) + 1] = 1; + _v56613[(17 * 4) + 1] = 1; + _v566A6 = 3800; _v566A3 = 2; + _v566A4 = 1; + _v566A5 = 0; _v566A8 = 5; _v566A9 = 0; _v566AA = 0; @@ -478,6 +503,8 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_v565F1[i]); s.syncAsByte(_v565AE); + s.syncAsByte(_v566A4); + s.syncAsByte(_v566A5); s.syncAsByte(_v566A8); s.syncAsByte(_v566A9); s.syncAsByte(_v566AA); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index c4ab3e695c..eeeddb4540 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -262,6 +262,9 @@ public: int _v5657C; byte _v565AE; byte _v56605[14]; + int _v56613[76]; + byte _v566A4; + byte _v566A5; int _v566A6; byte _v566A3; byte _v566A8; 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') 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/core.h | 2 +- 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 +++ 7 files changed, 1738 insertions(+), 290 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 542e1d9744..680d9cf76d 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -516,8 +516,8 @@ private: int getNewFrame(); void animEnded(); - int changeFrame(); public: + int changeFrame(); uint32 _updateStartFrame; uint32 _walkStartFrame; Common::Point _field2E; 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') 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') 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') 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') 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 e4e7827f776eb3f013d047544938a617dde6aae0 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 31 Jan 2012 22:20:30 +1100 Subject: TSAGE: Properly handle resetting flags when leaving a scene --- engines/tsage/scenes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 9d75808dbf..c091afe34c 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -164,7 +164,7 @@ void SceneManager::changeScene(int newSceneNumber) { sceneObj->setObjectWrapper(NULL); sceneObj->animate(ANIM_MODE_NONE, 0); - sceneObj->_flags &= !OBJFLAG_PANES; + sceneObj->_flags &= ~OBJFLAG_PANES; } // Blank out the screen -- 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') 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') 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/globals.cpp | 12 + engines/tsage/globals.h | 6 + engines/tsage/ringworld2/ringworld2_logic.cpp | 2 +- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 367 ++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes0.h | 36 +++ 5 files changed, 422 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 579239d565..c17ba9e048 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -379,6 +379,12 @@ void Ringworld2Globals::reset() { _v558B6.set(0, 0, 0, 0); _v558C2 = 0; _v5657C = 0; + _v565E1 = 0; + _v565E3 = 0; + _v565E5 = 0; + _v565E7 = 0; + _v565E9 = -5; + _v565EB = 26; _v565F5 = 0; _v565F6 = 0; _v565FA = 0; @@ -481,6 +487,12 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v558C2); s.syncAsSint16LE(_v5657C); + s.syncAsSint16LE(_v565E1); + s.syncAsSint16LE(_v565E3); + s.syncAsSint16LE(_v565E5); + s.syncAsSint16LE(_v565E7); + s.syncAsSint16LE(_v565E9); + s.syncAsSint16LE(_v565EB); s.syncAsSint16LE(_v565F5); s.syncAsSint16LE(_v565F6); s.syncAsSint16LE(_v565FA); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index eeeddb4540..f185b8235c 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -256,6 +256,12 @@ public: Rect _v5589E; Rect _v558B6; int _v558C2; + int _v565E1; + int _v565E3; + int _v565E5; + int _v565E7; + int _v565E9; + int _v565EB; int _v565F5; int _v565F6; int _v565FA; 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') 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') 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/core.cpp | 7 + engines/tsage/core.h | 1 + engines/tsage/events.h | 1 + engines/tsage/globals.cpp | 4 + engines/tsage/globals.h | 2 + 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 + 11 files changed, 669 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 3e49b6b204..d88d012759 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1301,6 +1301,13 @@ bool ScenePalette::loadPalette(int paletteNum) { return true; } +/** + * Loads a palette from the passed raw data block + */ +void ScenePalette::loadPalette(const byte *pSrc, int start, int count) { + Common::copy(pSrc, pSrc + count * 3, &_palette[start * 3]); +} + void ScenePalette::refresh() { // Set indexes for standard colors to closest color in the palette _colors.background = indexOf(255, 255, 255); // White background diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 680d9cf76d..ef6d4735c0 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -372,6 +372,7 @@ public: ~ScenePalette(); bool loadPalette(int paletteNum); + void loadPalette(const byte *pSrc, int start, int count); void refresh(); void setPalette(int index, int count); void getEntry(int index, uint *r, uint *g, uint *b); diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 6f54163682..2917256382 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -103,6 +103,7 @@ enum CursorType { EXITCURSOR_E = 0x800A, EXITCURSOR_LEFT_HAND = 0x800B, CURSOR_INVALID = 0x800C, EXITCURSOR_NE = 0x800D, EXITCURSOR_SE = 0x800E, EXITCURSOR_SW = 0x800F, EXITCURSOR_NW = 0x8010, SHADECURSOR_UP = 0x8011, SHADECURSOR_DOWN = 0x8012, SHADECURSOR_HAND = 0x8013, + R2_CURSOR_20 = 0x8014, R2_CURSOR_21 = 0x8015, R2_CURSOR_22 = 0x8016, R2_CURSOR_23 = 0x8017, // Cursors CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800, diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index c17ba9e048..59f758f97c 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -449,6 +449,7 @@ void Ringworld2Globals::reset() { _v56AA7 = 1; _v56AA8 = 1; _v56AAB = 0; + _scene180Mode = -1; _v57C2C = 0; _v58CE2 = 0; _v565EC[0] = 0; @@ -459,6 +460,7 @@ void Ringworld2Globals::reset() { Common::fill(&_v565F1[0], &_v565F1[MAX_CHARACTERS], 1); _speechSubtitles = SPEECH_VOICE | SPEECH_TEXT; _insetUp = 0; + _frameEdgeColour = 2; Common::fill(&_stripManager_lookupList[0], &_stripManager_lookupList[12], 0); _stripManager_lookupList[0] = 1; _stripManager_lookupList[1] = 1; @@ -504,6 +506,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v56AA2); s.syncAsSint16LE(_v56AA4); s.syncAsSint16LE(_v56AAB); + s.syncAsSint16LE(_scene180Mode); s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_v58CE2); s.syncAsSint16LE(_speechSubtitles); @@ -535,6 +538,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_stripManager_lookupList[i]); s.syncAsSint16LE(_insetUp); + s.syncAsByte(_frameEdgeColour); } } // end of namespace Ringworld2 diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index f185b8235c..a0b9f0b555 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -253,6 +253,7 @@ public: PlayStream _playStream; StripProxy _stripProxy; int _insetUp; + int _frameEdgeColour; // _v421e Rect _v5589E; Rect _v558B6; int _v558C2; @@ -289,6 +290,7 @@ public: byte _v56AA7; byte _v56AA8; int _v56AAB; + int _scene180Mode; // _v575f7 int _v57C2C; int _v58CE2; int _speechSubtitles; 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 45e61b985c200a9189d172e8a1410915e7f81f95 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 5 Feb 2012 20:31:56 +1100 Subject: TSAGE: Fix problem with scrolling wide scenes. --- engines/tsage/graphics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 5acd191b11..3bcad91d66 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -602,7 +602,7 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi destBounds.bottom = destSurface.h; if (destBounds.isValidRect() && !((destBounds.right < 0) || (destBounds.bottom < 0) - || (destBounds.left >= SCREEN_WIDTH) || (destBounds.top >= SCREEN_HEIGHT))) { + || (destBounds.left >= destSurface.w) || (destBounds.top >= destSurface.h))) { // Register the affected area as dirty addDirtyRect(destBounds); -- cgit v1.2.3 From 4a806d885a95082d2b6d7eef2461adac5dc1ae6a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 5 Feb 2012 20:40:03 +1100 Subject: TSAGE: Clean up the dead code introduced for R2R --- engines/tsage/graphics.cpp | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 3bcad91d66..2ceb007cbc 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -1308,30 +1308,14 @@ int GfxManager::getAngle(const Common::Point &p1, const Common::Point &p2) { } } -// FIXME: The two checks for screenSurface inside these two copyFrom() methods -// are meant for Ringworld 2, but the corresponding setBounds cases cause -// issues with the popup menus when right clicking in all games (e.g. the popup -// menu is always shown on the top left of the screen). Therefore, these two -// code fragments are disabled for now, till the glitches they cause are fixed. - void GfxManager::copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion) { -#if 0 - if (&_surface == &(GLOBALS._screenSurface)) - _surface.setBounds(Rect(0, 0, _bounds.width(), _bounds.height())); - else -#endif - _surface.setBounds(_bounds); + _surface.setBounds(_bounds); _surface.copyFrom(src, destBounds, priorityRegion); } void GfxManager::copyFrom(GfxSurface &src, int destX, int destY) { -#if 0 - if (&_surface == &(GLOBALS._screenSurface)) - _surface.setBounds(Rect(0, 0, _bounds.width(), _bounds.height())); - else -#endif - _surface.setBounds(_bounds); + _surface.setBounds(_bounds); _surface.copyFrom(src, destX, destY); } -- cgit v1.2.3 From e81d1848d1821a20962a72a1837e71ef37beb701 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 6 Feb 2012 21:42:58 +1100 Subject: TSAGE: Add detection entry for Blue Force Spanish CD --- engines/tsage/detection_tables.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 0f6d8c9d7d..583cd8e15b 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -140,6 +140,20 @@ static const tSageGameDescription gameDescriptions[] = { GType_BlueForce, GF_CD | GF_ALT_REGIONS }, + // Blue Force Spanish CD + { + { + "blueforce", + "CD", + AD_ENTRY1s("blue.rlb", "5b2b35c51b62e82d82b0791540bfae2d", 10082565), + Common::ES_ESP, + Common::kPlatformPC, + ADGF_CD | ADGF_TESTING, + GUIO2(GUIO_NOSPEECH, GUIO_NOSFX) + }, + GType_BlueForce, + GF_CD | GF_ALT_REGIONS + }, // Return to Ringworld { -- cgit v1.2.3 From 2855735e1f8e3daee2f360eb12b79557a9d3326e Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 6 Feb 2012 22:03:10 +1100 Subject: TSAGE: Properly de-select inventory buttons when mouse has moved off before mouse is released. This fixes bug #3484777. --- engines/tsage/user_interface.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index 2d06e268e4..428bf8c038 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -199,9 +199,9 @@ void UIInventoryScroll::process(Event &event) { // Draw the button as selected toggle(true); - event.handled = true; - break; - case EVENT_BUTTON_UP: + // Wait for the mouse to be released + BF_GLOBALS._events.waitForPress(EVENT_BUTTON_UP); + // Restore unselected version toggle(false); -- 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/globals.cpp | 8 + engines/tsage/globals.h | 4 + engines/tsage/graphics.cpp | 2 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 3 +- engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2639 +++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_scenes1.h | 174 ++ engines/tsage/staticres.cpp | 4 + engines/tsage/staticres.h | 4 + 8 files changed, 2836 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 59f758f97c..d3843aa174 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -450,6 +450,10 @@ void Ringworld2Globals::reset() { _v56AA8 = 1; _v56AAB = 0; _scene180Mode = -1; + _v57709 = 0; + _v5780C = 0; + _v5780E = 0; + _v57810 = 0; _v57C2C = 0; _v58CE2 = 0; _v565EC[0] = 0; @@ -507,6 +511,10 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v56AA4); s.syncAsSint16LE(_v56AAB); s.syncAsSint16LE(_scene180Mode); + s.syncAsSint16LE(_v57709); + s.syncAsSint16LE(_v5780C); + s.syncAsSint16LE(_v5780E); + s.syncAsSint16LE(_v57810); s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_v58CE2); s.syncAsSint16LE(_speechSubtitles); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index a0b9f0b555..6e3a2eb19d 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -291,6 +291,10 @@ public: byte _v56AA8; int _v56AAB; int _scene180Mode; // _v575f7 + int _v57709; + int _v5780C; + int _v5780E; + int _v57810; int _v57C2C; int _v58CE2; int _speechSubtitles; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 2ceb007cbc..acb615abae 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -440,7 +440,7 @@ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt) // Display the text gfxManager._font.writeLines(msg.c_str(), textRect, ALIGN_LEFT); - // Write for a mouse or keypress + // Wait for a mouse or keypress Event event; while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) ; 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; diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 3aec851b74..7a8f1cb1b0 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -238,6 +238,10 @@ char const *const F8 = "F8"; char const *const F10 = "F10"; char const *const DONE_MSG = "Done"; +char const *const YES_MSG = " Yes "; +char const *const NO_MSG = " No "; +char const *const USE_INTERCEPTOR = "Do you want to use your interceptor card?"; +char const *const USE_DOUBLE_AGENT = "Do you want to use your double agent?"; const byte k562CC[] = { 20, 7, 41, 6, diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 4a92f48cf8..ab0cd73b62 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -191,6 +191,10 @@ extern char const *const F8; extern char const *const F10; extern char const *const DONE_MSG; +extern char const *const YES_MSG; +extern char const *const NO_MSG; +extern char const *const USE_INTERCEPTOR; +extern char const *const USE_DOUBLE_AGENT; // Scene 1550 arrays of constants extern const byte k562CC[]; -- 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') 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') 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') 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 ++- engines/tsage/staticres.cpp | 1 + engines/tsage/staticres.h | 1 + 4 files changed, 116 insertions(+), 17 deletions(-) (limited to 'engines/tsage') 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); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 7a8f1cb1b0..e8004bc40d 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -242,6 +242,7 @@ char const *const YES_MSG = " Yes "; char const *const NO_MSG = " No "; char const *const USE_INTERCEPTOR = "Do you want to use your interceptor card?"; char const *const USE_DOUBLE_AGENT = "Do you want to use your double agent?"; +char const *const NEED_INSTRUCTIONS = "Do you want instructions?"; const byte k562CC[] = { 20, 7, 41, 6, diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index ab0cd73b62..41d1991b48 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -195,6 +195,7 @@ extern char const *const YES_MSG; extern char const *const NO_MSG; extern char const *const USE_INTERCEPTOR; extern char const *const USE_DOUBLE_AGENT; +extern char const *const NEED_INSTRUCTIONS; // Scene 1550 arrays of constants extern const byte k562CC[]; -- 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') 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') 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') 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') 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 +- engines/tsage/staticres.cpp | 2 +- engines/tsage/staticres.h | 1 + 4 files changed, 497 insertions(+), 27 deletions(-) (limited to 'engines/tsage') 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(); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index e8004bc40d..c254565aca 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -243,7 +243,7 @@ char const *const NO_MSG = " No "; char const *const USE_INTERCEPTOR = "Do you want to use your interceptor card?"; char const *const USE_DOUBLE_AGENT = "Do you want to use your double agent?"; char const *const NEED_INSTRUCTIONS = "Do you want instructions?"; - +char const *const WRONG_ANSWER_MSG = "Wrong respond value sent."; const byte k562CC[] = { 20, 7, 41, 6, 3, 6, 42, 11, diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 41d1991b48..e3daf73333 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -196,6 +196,7 @@ extern char const *const NO_MSG; extern char const *const USE_INTERCEPTOR; extern char const *const USE_DOUBLE_AGENT; extern char const *const NEED_INSTRUCTIONS; +extern char const *const WRONG_ANSWER_MSG; // Scene 1550 arrays of constants extern const byte k562CC[]; -- 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') 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/globals.cpp | 2 + engines/tsage/globals.h | 3 + engines/tsage/ringworld2/ringworld2_logic.cpp | 103 ++++++++++++++++++++++++++ engines/tsage/ringworld2/ringworld2_logic.h | 2 + 4 files changed, 110 insertions(+) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index d3843aa174..afd029d035 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -375,6 +375,8 @@ void Ringworld2Globals::reset() { T2_GLOBALS._uiElements._active = false; // Reset fields + Common::fill(&_v1000[0], &_v1000[0x1000], 0); + _v1000Flag = false; _v5589E.set(0, 0, 0, 0); _v558B6.set(0, 0, 0, 0); _v558C2 = 0; diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 6e3a2eb19d..88b0a8146a 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -252,6 +252,9 @@ public: ASoundExt _sound1, _sound2, _sound3, _sound4; PlayStream _playStream; StripProxy _stripProxy; + bool _v1000Flag; + byte _v1000[0x1000]; + byte _palIndexList[10][256]; int _insetUp; int _frameEdgeColour; // _v421e Rect _v5589E; 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') 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/globals.cpp | 2 -- engines/tsage/globals.h | 1 - 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 +++++++++--------- 7 files changed, 33 insertions(+), 36 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index afd029d035..b4c3127ea8 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -457,7 +457,6 @@ void Ringworld2Globals::reset() { _v5780E = 0; _v57810 = 0; _v57C2C = 0; - _v58CE2 = 0; _v565EC[0] = 0; _v565EC[1] = 27; _v565EC[2] = 27; @@ -518,7 +517,6 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v5780E); s.syncAsSint16LE(_v57810); s.syncAsSint16LE(_v57C2C); - s.syncAsSint16LE(_v58CE2); s.syncAsSint16LE(_speechSubtitles); for (i = 0; i < 5; i++) diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index 88b0a8146a..d80e4d9859 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -299,7 +299,6 @@ public: int _v5780E; int _v57810; int _v57C2C; - int _v58CE2; int _speechSubtitles; byte _v565EC[5]; byte _v565F1[4]; 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') 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') 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') 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') 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') 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') 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') 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') 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/events.h | 26 ++++--- 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 +-- engines/tsage/user_interface.cpp | 2 +- 7 files changed, 162 insertions(+), 158 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 2917256382..cf2d1a34ed 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -87,16 +87,20 @@ enum CursorType { // Ringworld 2 objects R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, - R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, - R2_SONIC_STUNNER = 7, R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_AEROSOL = 12, R2_13 = 13, - R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, - R2_REBREATHER_TANK = 20, R2_21 = 21, R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, - R2_26 = 26, R2_27 = 27, R2_28 = 28, - R2_29 = 29, R2_30 = 30, R2_31 = 31, R2_32 = 32, R2_33 = 33, R2_34 = 34, R2_35 = 35, - R2_36 = 36, R2_37 = 37, R2_38 = 38, R2_39 = 39, R2_40 = 40, R2_41 = 41, R2_42 = 42, - R2_43 = 43, R2_44 = 44, R2_45 = 45, R2_46 = 46, R2_47 = 47, R2_48 = 48, R2_49 = 49, - R2_50 = 50, R2_51 = 51, R2_52 = 52, - R2_LAST_INVENT = 53, + R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, R2_SONIC_STUNNER = 7, + R2_CABLE_HARNESS = 8, R2_COM_SCANNER = 9, R2_SPENT_POWER_CAPSULE = 10, + R2_CHARGED_POWER_CAPSULE = 11, R2_AEROSOL = 12, R2_REMOTE_CONTROL = 13, + R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_ATTRACTOR_CABLE_HARNESS = 16, + R2_FUEL_CELL = 17, R2_GYROSCOPE = 18, R2_AIRBAG = 19, R2_REBREATHER_TANK = 20, + R2_RESERVE_REBREATHER_TANK = 21, R2_GUIDANCE_MODULE = 22, R2_THRUSTER_VALVE = 23, + R2_BALLOON_BACKPACK = 24, R2_RADAR_MECHANISM = 25, R2_JOYSTICK = 26, + R2_IGNITOR = 27, R2_DIAGNOSTICS_DISPLAY = 28, R2_GLASS_DOME = 29, R2_WICK_LAMP = 30, + R2_SCRITH_KEY = 31, R2_TANNER_MASK = 32, R2_PURE_GRAIN_ALCOHOL = 33, R2_SAPPHIRE_BLUE = 34, + R2_ANCIENT_SCROLLS = 35, R2_FLUTE = 36, R2_GUNPOWDER = 37, R2_NONAME = 38, + R2_COM_SCANNER_2 = 39, R2_SUPERCONDUCTOR_WIRE = 40, R2_PILLOW = 41, R2_FOOD_TRAY = 42, + R2_LASER_HACKSAW = 43, R2_PHOTON_STUNNER = 44, R2_BATTERY = 45, R2_SOAKED_FACEMASK = 46, + R2_LIGHT_BULB = 47, R2_ALCOHOL_LAMP = 48, R2_ALCOHOL_LAMP_2 = 49, R2_ALCOHOL_LAMP_3 = 50, + R2_BROKEN_DISPLAY = 51, R2_TOOLBOX = 52, R2_LAST_INVENT = 53, // Ringworld 2 cursors R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009, @@ -145,7 +149,7 @@ public: Common::EventType type() { return _event.type; } uint32 getFrameNumber() const { return _frameNumber; } void delay(int numFrames); - bool isInventoryIcon() const { return _currentCursor < 256; } + bool isInventoryIcon() const { return (_currentCursor >= 0) && (_currentCursor < 256); } void proc1() { warning("TODO: EventsClass::proc1"); } virtual void listenerSynchronize(Serializer &s); 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 diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index 428bf8c038..ca9fddc6ce 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -82,7 +82,7 @@ void UIQuestion::showDescription(CursorType cursor) { } break; case GType_Ringworld2: - if ((cursor == R2_9) || (cursor == R2_39)) { + if ((cursor == R2_COM_SCANNER) || (cursor == R2_COM_SCANNER_2)) { // Show communicator warning("TODO: Communicator"); } 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') 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') 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 5d88e67cfdcfe483b374c523c7160b044d7cf3eb Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 12 Jan 2012 11:35:13 +0100 Subject: TSAGE: Remove superfluous md5 bytes setting --- engines/tsage/detection.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index 12add10c58..0c458f5c35 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -74,7 +74,6 @@ enum { class TSageMetaEngine : public AdvancedMetaEngine { public: TSageMetaEngine() : AdvancedMetaEngine(TsAGE::gameDescriptions, sizeof(TsAGE::tSageGameDescription), tSageGameTitles) { - _md5Bytes = 5000; _singleid = "tsage"; _guioptions = GUIO1(GUIO_NOSPEECH); } -- 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') 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 423d41dfc1d0ce5ff340c8915c0016116d6408d7 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 18 Feb 2012 10:19:51 +1100 Subject: TSAGE: Disabled Spanish Blue Force detection entry --- engines/tsage/detection_tables.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index 583cd8e15b..d538cbacbf 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -140,6 +140,8 @@ static const tSageGameDescription gameDescriptions[] = { GType_BlueForce, GF_CD | GF_ALT_REGIONS }, +#if 0 + // Blue Force Spanish doesn't yet work // Blue Force Spanish CD { { @@ -154,7 +156,7 @@ static const tSageGameDescription gameDescriptions[] = { GType_BlueForce, GF_CD | GF_ALT_REGIONS }, - +#endif // Return to Ringworld { { -- cgit v1.2.3 From 975801b6702daefe85f2cc91525ba474bd4aa3aa Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 18 Feb 2012 15:24:32 +1100 Subject: TSAGE: Disable right click in R2R Scene 1330 --- engines/tsage/core.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index d88d012759..c2ce426052 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -4107,7 +4107,8 @@ void SceneHandler::process(Event &event) { // Check for displaying right-click dialog if ((event.eventType == EVENT_BUTTON_DOWN) && (event.btnState == BTNSHIFT_RIGHT) && - g_globals->_player._uiEnabled) { + g_globals->_player._uiEnabled && + ((g_vm->getGameID() != GType_Ringworld2) || (R2_GLOBALS._sceneManager._sceneNumber != 1330))) { g_globals->_game->rightClick(); event.handled = true; -- cgit v1.2.3 From 0f3614b043816238a9334f6cde9fa477ecbf00ff Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 20 Feb 2012 22:30:46 +1100 Subject: TSAGE: Implemented method for getting a resource section entry This will be needed for streaming data directly from the resource file without fully loading the resource. --- engines/tsage/resources.cpp | 62 +++++++++++++++++++++++++++++++++++++-------- engines/tsage/resources.h | 5 ++++ 2 files changed, 56 insertions(+), 11 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index 824f20e9b2..f6f870be20 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -135,7 +135,7 @@ uint16 BitReader::readToken() { /*-------------------------------------------------------------------------*/ TLib::TLib(MemoryManager &memManager, const Common::String &filename) : - _memoryManager(memManager) { + _filename(filename), _memoryManager(memManager) { // If the resource strings list isn't yet loaded, load them if (_resStrings.size() == 0) { @@ -158,25 +158,35 @@ TLib::~TLib() { _resStrings.clear(); } +/** + * Load a section index from the given position in the file + */ void TLib::loadSection(uint32 fileOffset) { _resources.clear(); _file.seek(fileOffset); _sections.fileOffset = fileOffset; - if (_file.readUint32BE() != 0x544D492D) + loadSection(_file, _resources); +} + +/** + * Inner logic for decoding a section index into a passed resource list object + */ +void TLib::loadSection(Common::File &f, ResourceList &resources) { + if (f.readUint32BE() != 0x544D492D) error("Data block is not valid Rlb data"); - /*uint8 unknown1 = */_file.readByte(); - uint16 numEntries = _file.readByte(); + /*uint8 unknown1 = */f.readByte(); + uint16 numEntries = f.readByte(); for (uint i = 0; i < numEntries; ++i) { - uint16 id = _file.readUint16LE(); - uint16 size = _file.readUint16LE(); - uint16 uncSize = _file.readUint16LE(); - uint8 sizeHi = _file.readByte(); - uint8 type = _file.readByte() >> 5; + uint16 id = f.readUint16LE(); + uint16 size = f.readUint16LE(); + uint16 uncSize = f.readUint16LE(); + uint8 sizeHi = f.readByte(); + uint8 type = f.readByte() >> 5; assert(type <= 1); - uint32 offset = _file.readUint32LE(); + uint32 offset = f.readUint32LE(); ResourceEntry re; re.id = id; @@ -185,7 +195,7 @@ void TLib::loadSection(uint32 fileOffset) { re.size = ((sizeHi & 0xF) << 16) | size; re.uncompressedSize = ((sizeHi & 0xF0) << 12) | uncSize; - _resources.push_back(re); + resources.push_back(re); } } @@ -443,6 +453,36 @@ bool TLib::getMessage(int resNum, int lineNum, Common::String &result, bool supp /*--------------------------------------------------------------------------*/ +/** + * Open up the main resource file and get an entry from the root section + */ +bool TLib::getSectionEntry(Common::File &f, ResourceType resType, int rlbNum, int resNum, + ResourceEntry &resEntry) { + // Try and open the resource file + if (!f.open(_filename)) + return false; + + // Load the root section index + ResourceList resList; + loadSection(f, resList); + + // Loop through the index for the desired entry + ResourceList::iterator iter; + for (iter = _resources.begin(); iter != _resources.end(); ++iter) { + ResourceEntry &re = *iter; + if (re.id == resNum) { + // Found it, so exit + resEntry = re; + return true; + } + } + + // No matching entry found + return false; +} + +/*--------------------------------------------------------------------------*/ + ResourceManager::~ResourceManager() { for (uint idx = 0; idx < _libList.size(); ++idx) delete _libList[idx]; diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h index 0410fa3f42..2b5561b184 100644 --- a/engines/tsage/resources.h +++ b/engines/tsage/resources.h @@ -145,10 +145,12 @@ private: MemoryManager &_memoryManager; private: Common::File _file; + Common::String _filename; ResourceList _resources; SectionList _sections; void loadSection(uint32 fileOffset); + void loadSection(Common::File &f, ResourceList &resources); void loadIndex(); public: TLib(MemoryManager &memManager, const Common::String &filename); @@ -159,6 +161,8 @@ public: bool getPalette(int paletteNum, byte *palData, uint *startNum, uint *numEntries); byte *getSubResource(int resNum, int rlbNum, int index, uint *size, bool suppressErrors = false); bool getMessage(int resNum, int lineNum, Common::String &result, bool suppressErrors = false); + + bool getSectionEntry(Common::File &f, ResourceType resType, int rlbNum, int resNum, ResourceEntry &resEntry); }; class ResourceManager { @@ -174,6 +178,7 @@ public: void getPalette(int paletteNum, byte *palData, uint *startNum, uint *numEntries, bool suppressErrors = false); byte *getSubResource(int resNum, int rlbNum, int index, uint *size, bool suppressErrors = false); Common::String getMessage(int resNum, int lineNum, bool suppressErrors = false); + TLib &first() { return **_libList.begin(); } }; -- 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/core.h | 1 + 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 +- 5 files changed, 188 insertions(+), 67 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.h b/engines/tsage/core.h index ef6d4735c0..45bb3506d5 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -373,6 +373,7 @@ public: bool loadPalette(int paletteNum); void loadPalette(const byte *pSrc, int start, int count); + void replace(const ScenePalette *src) { loadPalette(src->_palette, 0, 256); } void refresh(); void setPalette(int index, int count); void getEntry(int index, uint *r, uint *g, uint *b); 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/resources.cpp | 154 ++++++++++++++---------- engines/tsage/resources.h | 9 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 87 +++++++++++-- engines/tsage/ringworld2/ringworld2_logic.h | 32 +++-- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 10 +- 5 files changed, 204 insertions(+), 88 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index f6f870be20..0afae0042f 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -166,37 +166,7 @@ void TLib::loadSection(uint32 fileOffset) { _file.seek(fileOffset); _sections.fileOffset = fileOffset; - loadSection(_file, _resources); -} - -/** - * Inner logic for decoding a section index into a passed resource list object - */ -void TLib::loadSection(Common::File &f, ResourceList &resources) { - if (f.readUint32BE() != 0x544D492D) - error("Data block is not valid Rlb data"); - - /*uint8 unknown1 = */f.readByte(); - uint16 numEntries = f.readByte(); - - for (uint i = 0; i < numEntries; ++i) { - uint16 id = f.readUint16LE(); - uint16 size = f.readUint16LE(); - uint16 uncSize = f.readUint16LE(); - uint8 sizeHi = f.readByte(); - uint8 type = f.readByte() >> 5; - assert(type <= 1); - uint32 offset = f.readUint32LE(); - - ResourceEntry re; - re.id = id; - re.fileOffset = offset; - re.isCompressed = type != 0; - re.size = ((sizeHi & 0xF) << 16) | size; - re.uncompressedSize = ((sizeHi & 0xF0) << 12) | uncSize; - - resources.push_back(re); - } + ResourceManager::loadSection(_file, _resources); } struct DecodeReference { @@ -342,6 +312,40 @@ byte *TLib::getResource(ResourceType resType, uint16 resNum, uint16 rlbNum, bool return getResource(rlbNum, suppressErrors); } +/** + * Gets the offset of the start of a resource in the resource file + */ +uint32 TLib::getResourceStart(ResourceType resType, uint16 resNum, uint16 rlbNum, ResourceEntry &entry) { + // Find the correct section + SectionList::iterator i = _sections.begin(); + while ((i != _sections.end()) && ((*i).resType != resType || (*i).resNum != resNum)) + ++i; + if (i == _sections.end()) { + error("Unknown resource type %d num %d", resType, resNum); + } + + // Load in the section index + loadSection((*i).fileOffset); + + // Scan for an entry for the given Id + ResourceEntry *re = NULL; + ResourceList::iterator iter; + for (iter = _resources.begin(); iter != _resources.end(); ++iter) { + if ((*iter).id == rlbNum) { + re = &(*iter); + break; + } + } + + // Throw an error if no resource was found, or the resource is compressed + if (!re || re->isCompressed) + error("Invalid resource Id #%d", rlbNum); + + // Return the resource entry as well as the file offset + entry = *re; + return _sections.fileOffset + entry.fileOffset; +} + void TLib::loadIndex() { uint16 resNum, configId, fileOffset; @@ -453,36 +457,6 @@ bool TLib::getMessage(int resNum, int lineNum, Common::String &result, bool supp /*--------------------------------------------------------------------------*/ -/** - * Open up the main resource file and get an entry from the root section - */ -bool TLib::getSectionEntry(Common::File &f, ResourceType resType, int rlbNum, int resNum, - ResourceEntry &resEntry) { - // Try and open the resource file - if (!f.open(_filename)) - return false; - - // Load the root section index - ResourceList resList; - loadSection(f, resList); - - // Loop through the index for the desired entry - ResourceList::iterator iter; - for (iter = _resources.begin(); iter != _resources.end(); ++iter) { - ResourceEntry &re = *iter; - if (re.id == resNum) { - // Found it, so exit - resEntry = re; - return true; - } - } - - // No matching entry found - return false; -} - -/*--------------------------------------------------------------------------*/ - ResourceManager::~ResourceManager() { for (uint idx = 0; idx < _libList.size(); ++idx) delete _libList[idx]; @@ -557,4 +531,62 @@ Common::String ResourceManager::getMessage(int resNum, int lineNum, bool suppres return Common::String(); } +/*--------------------------------------------------------------------------*/ + +/** + * Open up the given resource file using a passed file object. If the desired entry is found + * in the index, return the index entry for it, and move the file to the start of the resource + */ +bool ResourceManager::scanIndex(Common::File &f, ResourceType resType, int rlbNum, int resNum, + ResourceEntry &resEntry) { + // Load the root section index + ResourceList resList; + loadSection(f, resList); + + // Loop through the index for the desired entry + ResourceList::iterator iter; + for (iter = resList.begin(); iter != resList.end(); ++iter) { + ResourceEntry &re = *iter; + if (re.id == resNum) { + // Found it, so exit + resEntry = re; + f.seek(re.fileOffset); + return true; + } + } + + // No matching entry found + return false; +} + +/** + * Inner logic for decoding a section index into a passed resource list object + */ +void ResourceManager::loadSection(Common::File &f, ResourceList &resources) { + if (f.readUint32BE() != 0x544D492D) + error("Data block is not valid Rlb data"); + + /*uint8 unknown1 = */f.readByte(); + uint16 numEntries = f.readByte(); + + for (uint i = 0; i < numEntries; ++i) { + uint16 id = f.readUint16LE(); + uint16 size = f.readUint16LE(); + uint16 uncSize = f.readUint16LE(); + uint8 sizeHi = f.readByte(); + uint8 type = f.readByte() >> 5; + assert(type <= 1); + uint32 offset = f.readUint32LE(); + + ResourceEntry re; + re.id = id; + re.fileOffset = offset; + re.isCompressed = type != 0; + re.size = ((sizeHi & 0xF) << 16) | size; + re.uncompressedSize = ((sizeHi & 0xF0) << 12) | uncSize; + + resources.push_back(re); + } +} + } // end of namespace TsAGE diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h index 2b5561b184..45cecf8521 100644 --- a/engines/tsage/resources.h +++ b/engines/tsage/resources.h @@ -150,19 +150,19 @@ private: SectionList _sections; void loadSection(uint32 fileOffset); - void loadSection(Common::File &f, ResourceList &resources); void loadIndex(); public: TLib(MemoryManager &memManager, const Common::String &filename); ~TLib(); + const Common::String &getFilename() { return _filename; } + const SectionList &getSections() { return _sections; } byte *getResource(uint16 id, bool suppressErrors = false); byte *getResource(ResourceType resType, uint16 resNum, uint16 rlbNum, bool suppressErrors = false); + uint32 getResourceStart(ResourceType resType, uint16 resNum, uint16 rlbNum, ResourceEntry &entry); bool getPalette(int paletteNum, byte *palData, uint *startNum, uint *numEntries); byte *getSubResource(int resNum, int rlbNum, int index, uint *size, bool suppressErrors = false); bool getMessage(int resNum, int lineNum, Common::String &result, bool suppressErrors = false); - - bool getSectionEntry(Common::File &f, ResourceType resType, int rlbNum, int resNum, ResourceEntry &resEntry); }; class ResourceManager { @@ -179,6 +179,9 @@ public: byte *getSubResource(int resNum, int rlbNum, int index, uint *size, bool suppressErrors = false); Common::String getMessage(int resNum, int lineNum, bool suppressErrors = false); TLib &first() { return **_libList.begin(); } + + static bool scanIndex(Common::File &f, ResourceType resType, int rlbNum, int resNum, ResourceEntry &resEntry); + static void loadSection(Common::File &f, ResourceList &resources); }; 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') 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/blue_force/blueforce_logic.cpp | 8 +- engines/tsage/blue_force/blueforce_scenes1.cpp | 40 +- engines/tsage/blue_force/blueforce_scenes1.h | 4 +- engines/tsage/blue_force/blueforce_scenes2.cpp | 42 +- engines/tsage/blue_force/blueforce_scenes3.cpp | 8 +- engines/tsage/blue_force/blueforce_scenes4.cpp | 16 +- engines/tsage/blue_force/blueforce_scenes5.cpp | 62 +- engines/tsage/blue_force/blueforce_scenes5.h | 2 +- engines/tsage/blue_force/blueforce_scenes6.cpp | 10 +- engines/tsage/blue_force/blueforce_scenes8.cpp | 34 +- engines/tsage/blue_force/blueforce_scenes9.cpp | 6 +- engines/tsage/debugger.cpp | 6 +- engines/tsage/events.h | 28 +- engines/tsage/graphics.cpp | 6 +- engines/tsage/resources.cpp | 8 +- 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 ++-- engines/tsage/scenes.cpp | 6 +- engines/tsage/staticres.cpp | 4 +- engines/tsage/user_interface.cpp | 2 +- 28 files changed, 951 insertions(+), 951 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index eef48ad58e..3aef18f4f0 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -733,7 +733,7 @@ void SceneExt::remove() { _action->_endHandler = NULL; _action->remove(); } - + _focusObject = NULL; } @@ -1326,7 +1326,7 @@ bool BlueForceInvObjectList::SelectItem(int objectNumber) { AmmoBeltDialog *dlg = new AmmoBeltDialog(); dlg->execute(); delete dlg; - + return true; } @@ -1408,7 +1408,7 @@ void SceneMessage::signal() { } void SceneMessage::process(Event &event) { - if ((event.eventType == EVENT_BUTTON_DOWN) || + if ((event.eventType == EVENT_BUTTON_DOWN) || ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN))) { signal(); } @@ -1439,7 +1439,7 @@ void SceneMessage::draw() { void SceneMessage::clear() { // Fade out the text display - static const uint32 black = 0; + static const uint32 black = 0; BF_GLOBALS._scenePalette.fade((const byte *)&black, false, 100); // Refresh the background diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index c067cd87ea..9f1e9ce36e 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -430,7 +430,7 @@ void Scene110::Action1::signal() { case 6: // Play "Vroum" scene->_sound.play(31); - // The guy starts the engine + // The guy starts the engine scene->_object4.setStrip(3); scene->_object4._frame = 1; scene->_object4.animate(ANIM_MODE_5, NULL); @@ -837,7 +837,7 @@ void Scene110::postInit(SceneObjectList *OwnerList) { _object10._moveDiff.y = 10; _object10.setPosition(_object9._position); _object10.hide(); - + setAction(&_action1); } /*-------------------------------------------------------------------------- @@ -987,7 +987,7 @@ void Scene114::signal() { *--------------------------------------------------------------------------*/ bool Scene115::Kate::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + switch (action) { case CURSOR_LOOK: SceneItem::display(115, 8, SET_WIDTH, 312, @@ -1061,7 +1061,7 @@ bool Scene115::Kate::startAction(CursorType action, Event &event) { bool Scene115::Tony::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + switch (action) { case CURSOR_LOOK: SceneItem::display(115, 7, SET_WIDTH, 312, @@ -1164,7 +1164,7 @@ bool Scene115::Tony::startAction(CursorType action, Event &event) { bool Scene115::Object3::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + switch (action) { case CURSOR_LOOK: SceneItem::display(115, 9, SET_WIDTH, 312, @@ -1195,7 +1195,7 @@ bool Scene115::Object3::startAction(CursorType action, Event &event) { bool Scene115::Object4::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + switch (action) { case CURSOR_LOOK: SceneItem::display(115, 42, SET_WIDTH, 312, @@ -1217,7 +1217,7 @@ bool Scene115::Object4::startAction(CursorType action, Event &event) { void Scene115::Jukebox::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + if (_jokeboxPlayingCtr == 2) _jokeboxPlayingCtr = 0; else if (_jokeboxPlayingCtr == 1) { @@ -1228,7 +1228,7 @@ void Scene115::Jukebox::signal() { bool Scene115::Jukebox::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + if (action == CURSOR_USE) { if (_jokeboxPlayingCtr == 0) { _jokeboxPlayingCtr = 1; @@ -1241,7 +1241,7 @@ bool Scene115::Jukebox::startAction(CursorType action, Event &event) { SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; - } else + } else return NamedHotspot::startAction(action, event); } @@ -1265,7 +1265,7 @@ void Scene115::EventHandler1::dispatch() { bool Scene115::Item10::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; - + if (BF_GLOBALS.getFlag(fWithLyle)) { scene->_object4.setStrip2(6); Common::Point pt(-20, 122); @@ -1591,7 +1591,7 @@ Scene115::Scene115() : SceneExt () { void Scene115::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); - + BF_GLOBALS._sound1.fadeSound(15); loadScene(115); setZoomPercents(98, 85, 115, 100); @@ -1641,7 +1641,7 @@ void Scene115::postInit(SceneObjectList *OwnerList) { _object11.postInit(); _object11.hide(); - + _object12.postInit(); _object12.hide(); @@ -1817,7 +1817,7 @@ void Scene125::Action1::signal() { case 0: // No break on purpose default: - break; + break; } } @@ -2054,7 +2054,7 @@ void Scene125::Action3::dispatch() { SceneObject *owner = static_cast(this->_owner); Action::dispatch(); - + if ((_actionIndex == 9) && (owner->_percent > 70)) owner->changeZoom(owner->_percent - 1); } @@ -2095,7 +2095,7 @@ void Scene125::Action4::dispatch() { SceneObject *owner = static_cast(this->_owner); Action::dispatch(); - + if ((_actionIndex == 4) && (owner->_percent > 80)) owner->changeZoom(owner->_percent - 1); } @@ -2134,7 +2134,7 @@ void Scene125::Action6::dispatch() { SceneObject *owner = static_cast(this->_owner); Action::dispatch(); - + if ((_actionIndex == 2) && (owner->_percent < 100)) owner->changeZoom(owner->_percent + 1); } @@ -2169,7 +2169,7 @@ void Scene125::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player._moveDiff.x = 6; BF_GLOBALS._player._moveDiff.y = 6; BF_GLOBALS._player.disableControl(); - + _object5.postInit(); _object5.setVisage(128); _object5.setPosition(Common::Point(150, 117)); @@ -2457,7 +2457,7 @@ void Scene160::Action1::signal() { scene->_kid.setStrip(2); scene->_kid.animate(ANIM_MODE_5, this); - scene->_kidBody.setPosition(scene->_kid._position); + scene->_kidBody.setPosition(scene->_kid._position); scene->_kidBody.setFrame(1); scene->_kidBody.setStrip(3); break; @@ -2630,7 +2630,7 @@ void Scene160::Action2::signal() { break; case 25: BF_GLOBALS._sound1.fade(0, 10, 10, true, this); -// FIXME: Currently, fade() doesn't end properly with this song, +// FIXME: Currently, fade() doesn't end properly with this song, // thus never returns here. This hack skips the wait and changes // directly to the next scene // Start of hack @@ -2895,7 +2895,7 @@ void Scene180::postInit(SceneObjectList *OwnerList) { _vechile.setStrip(3); _vechile._frame = 5; _vechile.changeZoom(75); - + _dispatchMode = 1; _vechile._moveDiff.x = 45; } else { diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h index b304c2aeaa..ddde200370 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.h +++ b/engines/tsage/blue_force/blueforce_scenes1.h @@ -137,7 +137,7 @@ class Scene110: public SceneExt { virtual void signal(); }; public: - NamedObject _object1, _object2, _object3, _object4, _object5, _object6, _object7, _object8, _object9, _object10; + NamedObject _object1, _object2, _object3, _object4, _object5, _object6, _object7, _object8, _object9, _object10; ASound _sound; Action1 _action1; Action2 _action2; @@ -354,7 +354,7 @@ public: NamedObject _object1; NamedObject _object2; IntroSceneText _text; - + void postInit(SceneObjectList *OwnerList); }; diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp index 340baae6a9..c992afe620 100644 --- a/engines/tsage/blue_force/blueforce_scenes2.cpp +++ b/engines/tsage/blue_force/blueforce_scenes2.cpp @@ -67,7 +67,7 @@ void Scene200::Action1::signal() { rot->setDelay(10); rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1); rot->setDelay(10); - + scene->setAction(&scene->_sequenceManager, this, 201, &scene->_object1, &scene->_object2, &scene->_object3, &scene->_object4, &scene->_object5, &scene->_object6, NULL); break; @@ -99,7 +99,7 @@ void Scene200::Action2::signal() { break; } } - + /*--------------------------------------------------------------------------*/ @@ -133,7 +133,7 @@ void Scene200::postInit(SceneObjectList *OwnerList) { _object11.setVisage(200); _object11.setPosition(Common::Point(96, 112), 1000); _object11.setStrip(3); - _object11.setFrame(1); + _object11.setFrame(1); _object11.changeZoom(100); _object10.setAction(&_action1); @@ -168,7 +168,7 @@ void Scene210::Action1::signal() { rot->setDelay(10); rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1); rot->setDelay(10); - + scene->setAction(&scene->_sequenceManager, this, 210, &scene->_object10, &scene->_object11, &scene->_object12, &scene->_object13, &scene->_object14, &scene->_object15, NULL); break; @@ -301,7 +301,7 @@ void Scene220::Action1::signal() { rot->setDelay(10); rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1); rot->setDelay(10); - + scene->setAction(&scene->_sequenceManager, this, 220, &scene->_object4, &scene->_object5, &scene->_object6, &scene->_object7, &scene->_object8, &scene->_object9, NULL); break; @@ -508,7 +508,7 @@ void Scene225::Action1::signal() { rot->setDelay(10); rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1); rot->setDelay(10); - + scene->setAction(&scene->_sequenceManager, this, 225, &scene->_object15, &scene->_object16, &scene->_object17, &scene->_object18, &scene->_object19, &scene->_object20, NULL); break; @@ -661,7 +661,7 @@ void Scene225::postInit(SceneObjectList *OwnerList) { _object11._frame = 1; _object11.changeZoom(100); _object11._numFrames = 2; - + _object12.postInit(); _object12.setVisage(1225); _object12.setPosition(Common::Point(368, 35)); @@ -1007,14 +1007,14 @@ void Scene270::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player._moveDiff.x = 8; BF_GLOBALS._player.changeZoom(-1); BF_GLOBALS._player.disableControl(); - + switch (BF_GLOBALS._sceneManager._previousScene) { case 560: if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) { _field219A = 1; BF_GLOBALS._player._moveDiff.x = 5; _field386 = 0; - + _grandma.animate(ANIM_MODE_1, NULL); setAction(&_sequenceManager1, NULL, 2720, &BF_GLOBALS._player, &_grandma, NULL); BF_GLOBALS._bookmark = bLyleStoppedBy; @@ -1138,7 +1138,7 @@ void Scene270::signal() { case 2717: _sceneMode = 2718; _lyle.setFrame2(-1); - setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip, + setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip, &_lyle, &_grandma, NULL); break; case 2718: @@ -1167,7 +1167,7 @@ void Scene270::signal() { break; default: break; - } + } } void Scene270::process(Event &event) { @@ -1374,7 +1374,7 @@ Scene271::Scene271() { void Scene271::synchronize(Serializer &s) { PalettedScene::synchronize(s); - + s.syncAsSint16LE(_field796); s.syncAsSint16LE(_field2E16); s.syncAsSint16LE(_tempPos.x); @@ -1396,7 +1396,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_granTextSpeaker); _stripManager.addSpeaker(&_lyleTextSpeaker); - + _exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL); _tv.postInit(); @@ -1433,7 +1433,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _item2.setDetails(3, 270, 24, 25, 26, 1); _item4.setDetails(2, 270, 30, 31, 32, 1); _item11.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 270, 0, 1, 2, 1, NULL); - + BF_GLOBALS._player.postInit(); BF_GLOBALS._player._moveDiff.x = 8; BF_GLOBALS._player.changeZoom(-1); @@ -1477,7 +1477,7 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _object11.setStrip(1); _object11._frame = 2; _object11.setPosition(Common::Point(35, 136)); - + _object6.postInit(); _object6.hide(); @@ -1508,15 +1508,15 @@ void Scene271::postInit(SceneObjectList *OwnerList) { _object7.setVisage(277); _object7.setStrip(7); _object7.setPosition(Common::Point(48, 149)); - + BF_GLOBALS._walkRegions.disableRegion(6); BF_GLOBALS._walkRegions.disableRegion(14); BF_GLOBALS._walkRegions.disableRegion(19); - + _object12.postInit(); _object12.setVisage(276); _object12.setPosition(Common::Point(129, 130)); - + _object2.postInit(); _object2.setVisage(270); _object2.setStrip(3); @@ -1637,10 +1637,10 @@ void Scene271::signal() { BF_GLOBALS._player.enableControl(); _field796 = 1; _field2E16 = 1; - + _object1.remove(); _object11.remove(); - + BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 1); break; case 2709: @@ -1754,7 +1754,7 @@ void Scene280::Action1::signal() { scene->_jake.setFrame(1); scene->_jake.animate(ANIM_MODE_8, NULL); scene->_jake._numFrames = 5; - + scene->_stripManager.start(2800, this); break; case 2: diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp index 8955199286..22c831f531 100644 --- a/engines/tsage/blue_force/blueforce_scenes3.cpp +++ b/engines/tsage/blue_force/blueforce_scenes3.cpp @@ -945,7 +945,7 @@ void Scene315::Action1::signal() { T2_GLOBALS._uiElements.addScore(30); BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1); //HACK: This has to be checked wether or not it occurs in the original. - //When the _sceneMode is set to 3169, the value desn't change. + //When the _sceneMode is set to 3169, the value desn't change. //If you show the forest rapsheet, it gives points (and again... and again...) scene->_sceneMode = 3154; } @@ -4509,12 +4509,12 @@ void Scene360::signal() { break; case 3607: case 3609: - // Original game was only using at this place visage 1363. + // Original game was only using at this place visage 1363. // This workaround allow Harrison to keep his gun handy // when entering the romm (if required) if (! BF_GLOBALS.getFlag(gunDrawn)) _harrison.setVisage(1363); - else + else _harrison.setVisage(363); BF_GLOBALS._player.enableControl(); break; @@ -5365,7 +5365,7 @@ bool Scene385::Jim::startAction(CursorType action, Event &event) { } else if (action < CURSOR_WALK) // Any other inventory item return false; - else + else return NamedObject::startAction(action, event); } diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp index e966daf34e..a10f311791 100644 --- a/engines/tsage/blue_force/blueforce_scenes4.cpp +++ b/engines/tsage/blue_force/blueforce_scenes4.cpp @@ -1083,7 +1083,7 @@ void Scene415::postInit(SceneObjectList *OwnerList) { _animatedSeat.setStrip(1); _animatedSeat.setPosition(Common::Point(306, 116)); _animatedSeat.fixPriority(80); - + _windowLever.setDetails(16, 415, 25, -1, 26, 1); _item7.setDetails(17, 415, 32, -1, 33, 1); _seatBelt.setDetails(14, 415, 29, -1, 30, 1); @@ -1271,7 +1271,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.setVisage(303); BF_GLOBALS._player.setPosition(Common::Point(187, 104)); - + _lyle.setPosition(Common::Point(135, 128)); _lyle.show(); @@ -1291,7 +1291,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) { _vechile.setVisage(580); _vechile.setStrip(2); _vechile.setFrame(3); - + BF_GLOBALS._player.setVisage(303); } } @@ -1310,7 +1310,7 @@ void Scene440::postInit(SceneObjectList *OwnerList) { _lyle.setPosition(Common::Point(143, 93)); _lyle.setStrip(5); _lyle.fixPriority(90); - + _doorway.setFrame(_doorway.getFrameCount()); _sceneMode = 4401; setAction(&_sequenceManager, this, 4401, &BF_GLOBALS._player, &_doorway, NULL); @@ -1375,7 +1375,7 @@ bool Scene450::Weasel::startAction(CursorType action, Event &event) { T2_GLOBALS._uiElements.addScore(30); scene->_sceneMode = 4505; - scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this, + scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this, &scene->_counterDoor, &scene->_object2, NULL); return true; default: @@ -1427,7 +1427,7 @@ bool Scene450::Manager::startAction(CursorType action, Event &event) { if (BF_GLOBALS.getFlag(takenWeasel) && !BF_GLOBALS.getFlag(gotTrailer450)) { BF_GLOBALS.setFlag(gotTrailer450); scene->_sceneMode = 4517; - scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this, + scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this, &scene->_door, NULL); } else { animate(ANIM_MODE_8, 1, NULL); @@ -1485,11 +1485,11 @@ bool Scene450::Manager::startAction(CursorType action, Event &event) { } else { animate(ANIM_MODE_8, 1, NULL); BF_GLOBALS._player.disableControl(); - + if (!BF_GLOBALS.getFlag(showEugeneID)) T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(showEugeneID); - + if ((BF_GLOBALS.getFlag(showRapEugene) || BF_GLOBALS.getFlag(showEugeneNapkin)) && !BF_GLOBALS.getFlag(fMgrCallsWeasel)) { T2_GLOBALS._uiElements.addScore(30); diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp index 692e142f55..abadc4300a 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.cpp +++ b/engines/tsage/blue_force/blueforce_scenes5.cpp @@ -60,7 +60,7 @@ bool Scene550::Lyle::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_TALK: - if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) || + if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) || (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) { if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) && (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) { @@ -132,7 +132,7 @@ bool Scene550::Vechile::startAction(CursorType action, Event &event) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 2; scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL); - } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) || + } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) || (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) { if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1) { scene->_sceneMode = 5501; @@ -164,11 +164,11 @@ void Scene550::postInit(SceneObjectList *OwnerList) { _sceneMode = 1; signal(); return; - } + } SceneExt::postInit(); loadScene(550); - + _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_lyleHatSpeaker); _stripManager.addSpeaker(&_jakeJacketSpeaker); @@ -216,7 +216,7 @@ void Scene550::postInit(SceneObjectList *OwnerList) { if (BF_GLOBALS.getFlag(onDuty)) { _vechile.setVisage(301); _vechile.setStrip(1); - + BF_GLOBALS._player.setVisage(304); } else { _vechile.setVisage(580); @@ -224,7 +224,7 @@ void Scene550::postInit(SceneObjectList *OwnerList) { _vechile.setFrame(2); BF_GLOBALS._player.setVisage(303); - } + } } BF_GLOBALS._sceneItems.push_back(&_vechile); @@ -299,7 +299,7 @@ void Scene551::Action2::signal() { BF_GLOBALS._walkRegions.enableRegion(18); BF_GLOBALS._walkRegions.enableRegion(4); scene->_field1CD2 = 1; - + scene->_harrison.setObjectWrapper(new SceneObjectWrapper()); scene->_harrison.animate(ANIM_MODE_1, NULL); @@ -506,7 +506,7 @@ void Scene551::TrunkInset::remove() { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; - scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison, + scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison, &scene->_patrolCarTrunk, NULL); FocusObject::remove(); @@ -711,7 +711,7 @@ void Scene551::postInit(SceneObjectList *OwnerList) { _object12.show(); _object12.setDetails(550, 25, -1, 26, 1, (SceneItem *)NULL); BF_GLOBALS._sceneItems.push_front(&_object12); - + _harrison.postInit(); _harrison.setVisage(304); _harrison.setPosition(Common::Point(67, 102)); @@ -1076,7 +1076,7 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) { _item4.setDetails(Rect(143, 86, 159, 102), 560, 49, 50, -1, 1, NULL); _item5.setDetails(Rect(159, 86, 175, 102), 560, 49, 50, -1, 1, NULL); _item6.setDetails(Rect(175, 86, 191, 102), 560, 49, 50, -1, 1, NULL); - + BF_GLOBALS._sceneItems.remove(&_item1); BF_GLOBALS._sceneItems.remove(&_item2); BF_GLOBALS._sceneItems.remove(&_item3); @@ -1114,9 +1114,9 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) { _digit0.setStrip(3); _digit0.setPosition(Common::Point(183, 94)); _digit0.fixPriority(252); - + int amount = (BF_GLOBALS._safeCombination != 0) ? BF_GLOBALS._safeCombination : 1000; - + // Get digit 0 portion int remainder = amount % 10; amount /= 10; @@ -1135,7 +1135,7 @@ void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) { void Scene560::SafeInset::remove() { Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene; - + _item1.remove(); _item2.remove(); _item3.remove(); @@ -1145,7 +1145,7 @@ void Scene560::SafeInset::remove() { _digit2.remove(); _digit1.remove(); _digit0.remove(); - + scene->_nickel.remove(); if (BF_GLOBALS._events.getCursor() == CURSOR_USE) { @@ -1293,7 +1293,7 @@ bool Scene560::SafeInset::Item::startAction(CursorType action, Event &event) { default: break; } - + scene->_safeInset.signal(); scene->_sound1.play(75); return true; @@ -1345,7 +1345,7 @@ bool Scene560::BoxInset::Item1::startAction(CursorType action, Event &event) { scene->_safeInset.setPosition(Common::Point(160, 141)); scene->_safeInset.fixPriority(251); scene->_safeInset.setDetails(560, 45, 46, -1); - + scene->_sceneMode = 3; scene->_boxInset.remove(); @@ -1414,7 +1414,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) { _deskChair.setPosition(Common::Point(81, 149)); _deskChair.fixPriority(151); _deskChair.changeZoom(81); - + if (BF_GLOBALS._sceneManager._previousScene == 570) { // Returning from using computer BF_GLOBALS._events.setCursor(CURSOR_USE); @@ -1448,7 +1448,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player._moveDiff.x = 11; BF_GLOBALS._player.changeZoom(-1); BF_GLOBALS._player.disableControl(); - + _sceneMode = 10; ADD_MOVER(BF_GLOBALS._player, 85, 115); } @@ -1516,7 +1516,7 @@ void Scene560::signal() { T2_GLOBALS._uiElements.addScore(10); BF_GLOBALS.setFlag(fGotPointsForPunch); } - + _boxInset.postInit(); _boxInset.setVisage(560); _boxInset.setStrip(2); @@ -1605,7 +1605,7 @@ void Scene570::PasswordEntry::postInit(SceneObjectList *OwnerList) { void Scene570::PasswordEntry::process(Event &event) { Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; bool entryChanged = false; - + switch (event.eventType) { case EVENT_KEYPRESS: { int key = toupper(event.kbd.ascii); @@ -1648,7 +1648,7 @@ void Scene570::PasswordEntry::process(Event &event) { _entryText.setPosition(Common::Point(213, 40)); _entryText.fixPriority(255); _entryText.setup(_entryBuffer); - + // Pad entered text with spaces to make up the allowed width and then display Common::String msg = _entryBuffer; while (msg.size() < 10) @@ -1658,7 +1658,7 @@ void Scene570::PasswordEntry::process(Event &event) { } void Scene570::PasswordEntry::checkPassword() { - // Check if the password is correctly entered as 'JACKIE' or, as a nod to the + // Check if the password is correctly entered as 'JACKIE' or, as a nod to the // reimplementation in ScummVM, as the project name. Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; @@ -1794,7 +1794,7 @@ void Scene570::Icon::remove() { } bool Scene570::Icon::startAction(CursorType action, Event &event) { - Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; + Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: @@ -1907,7 +1907,7 @@ bool Scene570::Icon::startAction(CursorType action, Event &event) { } void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, int unused, const Common::String &msg) { - Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; + Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; NamedObject::postInit(); _iconId = iconId; @@ -1929,7 +1929,7 @@ void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, in /*--------------------------------------------------------------------------*/ bool Scene570::PowerSwitch::startAction(CursorType action, Event &event) { - Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; + Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: @@ -1972,7 +1972,7 @@ bool Scene570::PrinterIcon::startAction(CursorType action, Event &event) { } void Scene570::Object3::remove() { - Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; + Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; scene->_object4._flag = 0; scene->_printerIcon.remove(); @@ -1998,7 +1998,7 @@ void Scene570::Object3::remove() { /*--------------------------------------------------------------------------*/ bool Scene570::FloppyDrive::startAction(CursorType action, Event &event) { - Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; + Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: @@ -2326,7 +2326,7 @@ bool Scene590::Skip::startAction(CursorType action, Event &event) { } else { scene->_stripNumber = !scene->_field17DC ? 5901 : 5902; } - + scene->setAction(&scene->_action1); scene->_field17DC = 1; return true; @@ -2404,7 +2404,7 @@ void Scene590::Action2::signal() { case 4: scene->_skip.setStrip(1); scene->_skip.animate(ANIM_MODE_1, NULL); - + BF_GLOBALS._player.setVisage(368); BF_GLOBALS._player.setStrip(7); BF_GLOBALS._player.setPosition(Common::Point(238, 131)); @@ -2456,7 +2456,7 @@ void Scene590::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_skipSpeaker); _stripManager.addSpeaker(&_lauraSpeaker); _stripManager.addSpeaker(&_jakeJacketSpeaker); - + if (BF_GLOBALS.getFlag(onDuty)) { BF_GLOBALS._player.setVisage(361); BF_GLOBALS._player._moveDiff = Common::Point(6, 2); @@ -2488,7 +2488,7 @@ void Scene590::postInit(SceneObjectList *OwnerList) { _item10.setDetails(13, 590, 9, -1, 21, 1); _item11.setDetails(15, 590, 10, -1, 22, 1); _item12.setDetails(17, 590, 11, -1, 23, 1); - + BF_GLOBALS._player.disableControl(); _sceneMode = 0; setAction(&_sequenceManager, this, 5900, &BF_GLOBALS._player, NULL); diff --git a/engines/tsage/blue_force/blueforce_scenes5.h b/engines/tsage/blue_force/blueforce_scenes5.h index 76bf4cdbc3..73d323fc54 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.h +++ b/engines/tsage/blue_force/blueforce_scenes5.h @@ -228,7 +228,7 @@ public: NamedHotspot _chair, _lamp, _item4, _trophy, _watercolours, _fileCabinets; NamedHotspot _certificate, _bookcase, _desk, _carpet, _item12, _office; ASound _sound1; - bool _field380; + bool _field380; bool _field11EA; Common::Point _destPosition; diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp index e5e7c71bef..9467df7917 100644 --- a/engines/tsage/blue_force/blueforce_scenes6.cpp +++ b/engines/tsage/blue_force/blueforce_scenes6.cpp @@ -49,7 +49,7 @@ void Scene600::Action1::signal() { break; case 2: scene->_sound1.play(59); - setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_ryan, + setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_ryan, &BF_GLOBALS._player, &scene->_skidMarks, NULL); break; case 3: @@ -149,7 +149,7 @@ void Scene600::remove() { void Scene620::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(999); - + BF_GLOBALS._player.postInit(); BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.setVisage(621); @@ -176,14 +176,14 @@ void Scene620::signal() { case 13: case 16: case 19: - addFader((const byte *)&black, 2, this); + addFader((const byte *)&black, 2, this); break; case 2: BF_GLOBALS._player.remove(); _object1.postInit(); _object1.setVisage(622); _object1.setPosition(Common::Point(101, 41)); - add2Faders((const byte *)&black, 2, 622, this); + add2Faders((const byte *)&black, 2, 622, this); break; case 5: _object1.remove(); @@ -441,7 +441,7 @@ void Scene690::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._dayNumber = 1; _stripManager.addSpeaker(&_jakeSpeaker); - + _object1.postInit(); _object1.setVisage(690); _object1.setStrip2(2); diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp index ceee748374..5a60cd7c5e 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.cpp +++ b/engines/tsage/blue_force/blueforce_scenes8.cpp @@ -434,7 +434,7 @@ void Scene810::Action2::signal() { scene->_lyle.setVisage(813); scene->_lyle.setStrip(2); scene->_lyle.setFrame(1); - + ADD_PLAYER_MOVER(84, 113); break; case 5: @@ -611,7 +611,7 @@ bool Scene810::Lyle::startAction(CursorType action, Event &event) { default: return NamedObjectExt::startAction(action, event); } -} +} bool Scene810::Chair::startAction(CursorType action, Event &event) { switch (action) { @@ -709,7 +709,7 @@ bool Scene810::Object5::startAction(CursorType action, Event &event) { case CURSOR_USE: { scene->_sceneMode = 8195; BF_GLOBALS._player.disableControl(); - + PlayerMover *mover = new PlayerMover(); Common::Point destPos(67, 111); BF_GLOBALS._player.addMover(mover, &destPos, scene); @@ -804,7 +804,7 @@ bool Scene810::FaxMachine::startAction(CursorType action, Event &event) { scene->_sceneMode = 811; if (BF_GLOBALS._sceneObjects->contains(&scene->_lyle)) { - scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8108 : 8105, + scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8108 : 8105, &BF_GLOBALS._player, &scene->_object6, NULL); } else { scene->setAction(&scene->_sequenceManager1, scene, 8111, &BF_GLOBALS._player, @@ -1058,12 +1058,12 @@ void Scene810::postInit(SceneObjectList *OwnerList) { case 820: BF_GLOBALS._player.setStrip(7); BF_GLOBALS._player.setPosition(Common::Point(278, 116)); - + _lyle.setVisage(845); _lyle.setPosition(Common::Point(340, 175)); _lyle.setObjectWrapper(new SceneObjectWrapper()); _lyle.animate(ANIM_MODE_1, NULL); - + _chair.show(); BF_GLOBALS._player.disableControl(); @@ -1121,7 +1121,7 @@ void Scene810::postInit(SceneObjectList *OwnerList) { _item12._sceneRegionId = 8; BF_GLOBALS._sceneItems.push_back(&_item12); - BF_GLOBALS._sceneItems.addItems(&_microficheReader, &_map, &_window, &_bookcase, &_garbageCan, + BF_GLOBALS._sceneItems.addItems(&_microficheReader, &_map, &_window, &_bookcase, &_garbageCan, &_fileCabinets, &_coffeeMaker, &_shelves, &_background, NULL); _background.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y)); } @@ -1276,7 +1276,7 @@ void Scene810::dispatch() { _lyle.updateAngle(BF_GLOBALS._player._position); } - if (BF_GLOBALS._sceneObjects->contains(&_faxMachineInset) && (BF_GLOBALS._player._position.x != 67) && + if (BF_GLOBALS._sceneObjects->contains(&_faxMachineInset) && (BF_GLOBALS._player._position.x != 67) && (BF_GLOBALS._player._position.y != 111)) { _faxMachineInset.remove(); } @@ -1341,7 +1341,7 @@ bool Scene820::PowerButton::startAction(CursorType action, Event &event) { BF_GLOBALS._scenePalette.loadPalette(821); BF_GLOBALS._scenePalette.refresh(); - SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, + SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END); } else { BF_GLOBALS._scenePalette.loadPalette(820); @@ -1388,7 +1388,7 @@ bool Scene820::BackButton::startAction(CursorType action, Event &event) { scene->_object5.hide(); } - SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, + SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END); return true; default: @@ -1419,7 +1419,7 @@ bool Scene820::ForwardButton::startAction(CursorType action, Event &event) { if (scene->_pageNumber < 4) ++scene->_pageNumber; - SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, + SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0, SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END); if (scene->_pageNumber == 4) { @@ -1447,7 +1447,7 @@ void Scene820::synchronize(Serializer &s) { void Scene820::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(820); - + _stripManager.addSpeaker(&_gameTextSpeaker); _powerButton.postInit(); @@ -3115,7 +3115,7 @@ void Scene870::postInit(SceneObjectList *OwnerList) { _lyle.setPosition(Common::Point(156, 148)); _lyle.fixPriority(149); } - + if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) && (BF_INVENTORY.getObjectScene(INV_GRENADES) == 355)) { _object4.postInit(); @@ -3135,7 +3135,7 @@ void Scene870::postInit(SceneObjectList *OwnerList) { } break; } - + _boat.setDetails(7, 870, 3, 4, 5, 1); _crate.setDetails(14, 870, 12, 13, 14, 1); _water.setDetails(5, 870, 24, 25, 26, 1); @@ -3393,7 +3393,7 @@ void Scene880::postInit(SceneObjectList *OwnerList) { _object4.setFrame2(_object4.getFrameCount()); _object4.fixPriority(160); _object4.setPosition(Common::Point(255, 148)); - + _seqNumber = 8816; } else if (BF_GLOBALS.getFlag(fBlowUpGoon)) { _object4.setStrip(7); @@ -3405,7 +3405,7 @@ void Scene880::postInit(SceneObjectList *OwnerList) { } else { _object4.setStrip(2); _object4.setPosition(Common::Point(258, 147)); - + _object3.postInit(); _object3.setVisage(871); _object3.setStrip(4); @@ -3600,7 +3600,7 @@ void Scene880::handleAction(Action *action) { action->_owner = NULL; } } - + void Scene880::dispatch() { SceneExt::dispatch(); diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index f5705eb471..a303576928 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -386,7 +386,7 @@ void Scene900::Action3::signal() { break; default: break; - } + } } void Scene900::Action4::signal() { @@ -540,7 +540,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, (SceneItem *)NULL); _lyle.animate(ANIM_MODE_1, NULL); _lyle.setObjectWrapper(new SceneObjectWrapper()); - } + } _sceneMode = 9000; setAction(&_sequenceManager1, this, 9000, &BF_GLOBALS._player, NULL); @@ -2125,7 +2125,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _lyle.setFrame(3); _lyle._field90 = 1; _lyle.setDetails(910, 69, 70 ,71 , 5, &_item4); - + BF_GLOBALS._walkRegions.disableRegion(15); BF_GLOBALS._walkRegions.disableRegion(16); BF_GLOBALS._walkRegions.disableRegion(14); diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index f7ba5c20f2..82645f2d62 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -305,7 +305,7 @@ bool Debugger::Cmd_Hotspots(int argc, const char **argv) { if (ri != g_globals->_sceneRegions.end()) { // Fill out the areas defined by the region Region &r = *ri; - + for (int y = r._bounds.top; y < r._bounds.bottom; ++y) { LineSliceSet set = r.getLineSlices(y); @@ -615,7 +615,7 @@ bool BlueForceDebugger::Cmd_MoveObject(int argc, const char **argv) { if ((objNum > 0) && (objNum < 65)) BF_INVENTORY.setObjectScene(objNum, sceneNum); - else + else DebugPrintf("Invalid object Id %s\n", argv[1]); return true; @@ -702,7 +702,7 @@ bool Ringworld2Debugger::Cmd_MoveObject(int argc, const char **argv) { if ((objNum > 0) && (objNum < 53)) R2_INVENTORY.setObjectScene(objNum, sceneNum); - else + else DebugPrintf("Invalid object Id %s\n", argv[1]); return true; diff --git a/engines/tsage/events.h b/engines/tsage/events.h index cf2d1a34ed..475db47315 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -86,25 +86,25 @@ enum CursorType { INV_CARAVAN_KEY = 67, BF_LAST_INVENT = 68, // Ringworld 2 objects - R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, - R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, R2_SONIC_STUNNER = 7, - R2_CABLE_HARNESS = 8, R2_COM_SCANNER = 9, R2_SPENT_POWER_CAPSULE = 10, - R2_CHARGED_POWER_CAPSULE = 11, R2_AEROSOL = 12, R2_REMOTE_CONTROL = 13, - R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_ATTRACTOR_CABLE_HARNESS = 16, - R2_FUEL_CELL = 17, R2_GYROSCOPE = 18, R2_AIRBAG = 19, R2_REBREATHER_TANK = 20, + R2_OPTO_DISK = 1, R2_READER = 2, R2_NEGATOR_GUN = 3, R2_STEPPING_DISKS = 4, + R2_ATTRACTOR_UNIT = 5, R2_SENSOR_PROBE = 6, R2_SONIC_STUNNER = 7, + R2_CABLE_HARNESS = 8, R2_COM_SCANNER = 9, R2_SPENT_POWER_CAPSULE = 10, + R2_CHARGED_POWER_CAPSULE = 11, R2_AEROSOL = 12, R2_REMOTE_CONTROL = 13, + R2_OPTICAL_FIBRE = 14, R2_CLAMP = 15, R2_ATTRACTOR_CABLE_HARNESS = 16, + R2_FUEL_CELL = 17, R2_GYROSCOPE = 18, R2_AIRBAG = 19, R2_REBREATHER_TANK = 20, R2_RESERVE_REBREATHER_TANK = 21, R2_GUIDANCE_MODULE = 22, R2_THRUSTER_VALVE = 23, - R2_BALLOON_BACKPACK = 24, R2_RADAR_MECHANISM = 25, R2_JOYSTICK = 26, - R2_IGNITOR = 27, R2_DIAGNOSTICS_DISPLAY = 28, R2_GLASS_DOME = 29, R2_WICK_LAMP = 30, - R2_SCRITH_KEY = 31, R2_TANNER_MASK = 32, R2_PURE_GRAIN_ALCOHOL = 33, R2_SAPPHIRE_BLUE = 34, - R2_ANCIENT_SCROLLS = 35, R2_FLUTE = 36, R2_GUNPOWDER = 37, R2_NONAME = 38, + R2_BALLOON_BACKPACK = 24, R2_RADAR_MECHANISM = 25, R2_JOYSTICK = 26, + R2_IGNITOR = 27, R2_DIAGNOSTICS_DISPLAY = 28, R2_GLASS_DOME = 29, R2_WICK_LAMP = 30, + R2_SCRITH_KEY = 31, R2_TANNER_MASK = 32, R2_PURE_GRAIN_ALCOHOL = 33, R2_SAPPHIRE_BLUE = 34, + R2_ANCIENT_SCROLLS = 35, R2_FLUTE = 36, R2_GUNPOWDER = 37, R2_NONAME = 38, R2_COM_SCANNER_2 = 39, R2_SUPERCONDUCTOR_WIRE = 40, R2_PILLOW = 41, R2_FOOD_TRAY = 42, - R2_LASER_HACKSAW = 43, R2_PHOTON_STUNNER = 44, R2_BATTERY = 45, R2_SOAKED_FACEMASK = 46, - R2_LIGHT_BULB = 47, R2_ALCOHOL_LAMP = 48, R2_ALCOHOL_LAMP_2 = 49, R2_ALCOHOL_LAMP_3 = 50, + R2_LASER_HACKSAW = 43, R2_PHOTON_STUNNER = 44, R2_BATTERY = 45, R2_SOAKED_FACEMASK = 46, + R2_LIGHT_BULB = 47, R2_ALCOHOL_LAMP = 48, R2_ALCOHOL_LAMP_2 = 49, R2_ALCOHOL_LAMP_3 = 50, R2_BROKEN_DISPLAY = 51, R2_TOOLBOX = 52, R2_LAST_INVENT = 53, // Ringworld 2 cursors - R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009, - EXITCURSOR_E = 0x800A, EXITCURSOR_LEFT_HAND = 0x800B, CURSOR_INVALID = 0x800C, + R2CURSORS_START = 0x8000, EXITCURSOR_N = 0x8007, EXITCURSOR_S = 0x8008, EXITCURSOR_W = 0x8009, + EXITCURSOR_E = 0x800A, EXITCURSOR_LEFT_HAND = 0x800B, CURSOR_INVALID = 0x800C, EXITCURSOR_NE = 0x800D, EXITCURSOR_SE = 0x800E, EXITCURSOR_SW = 0x800F, EXITCURSOR_NW = 0x8010, SHADECURSOR_UP = 0x8011, SHADECURSOR_DOWN = 0x8012, SHADECURSOR_HAND = 0x8013, R2_CURSOR_20 = 0x8014, R2_CURSOR_21 = 0x8015, R2_CURSOR_22 = 0x8016, R2_CURSOR_23 = 0x8017, diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index acb615abae..5ddc7b6a1a 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -266,7 +266,7 @@ void GfxSurface::updateScreen() { continue; const byte *srcP = (const byte *)_customSurface->getBasePtr(r.left, r.top); - g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top, + g_system->copyRectToScreen(srcP, _customSurface->pitch, r.left, r.top, r.width(), r.height()); } @@ -287,7 +287,7 @@ void GfxSurface::addDirtyRect(const Rect &r) { r2.translate(_bounds.left, _bounds.top); // Add to the dirty rect list - _dirtyRects.push_back(Rect(r2.left, r2.top, + _dirtyRects.push_back(Rect(r2.left, r2.top, MIN(r2.right + 1, SCREEN_WIDTH), MIN(r2.bottom + 1, SCREEN_HEIGHT))); } } @@ -1194,7 +1194,7 @@ void GfxDialog::setPalette() { g_globals->_scenePalette.setPalette(g_globals->_fontColors.background, 1); g_globals->_scenePalette.setPalette(g_globals->_fontColors.foreground, 1); g_globals->_scenePalette.setEntry(255, 0xff, 0xff, 0xff); - g_globals->_scenePalette.setPalette(255, 1); + g_globals->_scenePalette.setPalette(255, 1); } else { g_globals->_scenePalette.loadPalette(0); g_globals->_scenePalette.setPalette(0, 1); diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp index 0afae0042f..5987d78067 100644 --- a/engines/tsage/resources.cpp +++ b/engines/tsage/resources.cpp @@ -326,7 +326,7 @@ uint32 TLib::getResourceStart(ResourceType resType, uint16 resNum, uint16 rlbNum // Load in the section index loadSection((*i).fileOffset); - + // Scan for an entry for the given Id ResourceEntry *re = NULL; ResourceList::iterator iter; @@ -341,7 +341,7 @@ uint32 TLib::getResourceStart(ResourceType resType, uint16 resNum, uint16 rlbNum if (!re || re->isCompressed) error("Invalid resource Id #%d", rlbNum); - // Return the resource entry as well as the file offset + // Return the resource entry as well as the file offset entry = *re; return _sections.fileOffset + entry.fileOffset; } @@ -441,7 +441,7 @@ bool TLib::getMessage(int resNum, int lineNum, Common::String &result, bool supp while (lineNum-- > 0) { srcP += strlen(srcP) + 1; - + if (srcP >= endP) { if (suppressErrors) return false; @@ -537,7 +537,7 @@ Common::String ResourceManager::getMessage(int resNum, int lineNum, bool suppres * Open up the given resource file using a passed file object. If the desired entry is found * in the index, return the index entry for it, and move the file to the start of the resource */ -bool ResourceManager::scanIndex(Common::File &f, ResourceType resType, int rlbNum, int resNum, +bool ResourceManager::scanIndex(Common::File &f, ResourceType resType, int rlbNum, int resNum, ResourceEntry &resEntry) { // Load the root section index ResourceList resList; 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 diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index c091afe34c..0756d71d4c 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -240,7 +240,7 @@ void SceneManager::listenerSynchronize(Serializer &s) { if (s.isLoading()) { changeScene(_sceneNumber); - + if (_nextSceneNumber != -1) { sceneChange(); _nextSceneNumber = -1; @@ -317,7 +317,7 @@ void Scene::loadSceneData(int sceneNum) { _activeScreenNumber = sceneNum; if (g_vm->getGameID() == GType_Ringworld2) { - // Most scenes in Ringworld 2 don't have a scene size resource, but rather just have + // Most scenes in Ringworld 2 don't have a scene size resource, but rather just have // a standard 320x200 size. Only read the scene size data for the specific few scenes switch (sceneNum) { case 700: @@ -457,7 +457,7 @@ void Scene::refreshBackground(int xAmount, int yAmount) { Rect destBounds(xSectionDest * 160, ySectionDest * 100, (xSectionDest + 1) * 160, (ySectionDest + 1) * 100); if (g_vm->getGameID() != GType_Ringworld) { - // For Blue Force and Return to Ringworld, if the scene has an interface area, + // For Blue Force and Return to Ringworld, if the scene has an interface area, // exclude it from the copy srcBounds.bottom = MIN(srcBounds.bottom, BF_GLOBALS._interfaceY); destBounds.bottom = MIN(destBounds.bottom, BF_GLOBALS._interfaceY); diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index c254565aca..a273ec2a0b 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -400,8 +400,8 @@ const byte k5A4D6[] = { const byte k5A72E[] = {0, 98, 135, 183, 229, 81, 133, 185, 235, 75, 131, 187, 241, 70, 129, 190, 247}; const byte k5A73F[] = {0, 42, 42, 42, 42, 67, 67, 67, 67, 92, 92, 92, 92, 116, 116, 116, 116}; const byte k5A750[] = { - 9, 10, 7, 13, 7, 8, 9, 7, 9, 10, - 2, 3, 3, 2, 2, 2, 4, 3, 3, 4, + 9, 10, 7, 13, 7, 8, 9, 7, 9, 10, + 2, 3, 3, 2, 2, 2, 4, 3, 3, 4, 3, 2, 3, 4, 3, 8, 10, 4, 0 }; const byte k5A76D[] = { diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index ca9fddc6ce..10cb6961dc 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -316,7 +316,7 @@ void UIElements::synchronize(Serializer &s) { } void UIElements::process(Event &event) { - if (_clearScreen && GLOBALS._player._enabled && + if (_clearScreen && GLOBALS._player._enabled && ((g_vm->getGameID() != GType_BlueForce) || (GLOBALS._sceneManager._sceneNumber != 50))) { if (_bounds.contains(event.mousePos)) { // Cursor inside UI area -- 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/core.cpp | 6 +- engines/tsage/core.h | 2 +- engines/tsage/globals.cpp | 2 + engines/tsage/globals.h | 1 + engines/tsage/ringworld2/ringworld2_logic.cpp | 120 ++++++++++++++++++++---- engines/tsage/ringworld2/ringworld2_logic.h | 50 ++++++++-- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 10 +- engines/tsage/tsage.h | 3 +- 8 files changed, 158 insertions(+), 36 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index c2ce426052..0a8c4ef1b4 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1354,13 +1354,15 @@ void ScenePalette::setEntry(int index, uint r, uint g, uint b) { * @param g G component * @param b B component * @param threshold Closeness threshold. + * @param start Starting index + * @param count Number of indexes to scan * @remarks A threshold may be provided to specify how close the matching color must be */ -uint8 ScenePalette::indexOf(uint r, uint g, uint b, int threshold) { +uint8 ScenePalette::indexOf(uint r, uint g, uint b, int threshold, int start, int count) { int palIndex = -1; byte *palData = &_palette[0]; - for (int i = 0; i < 256; ++i) { + for (int i = start; i < (start + count); ++i) { byte ir = *palData++; byte ig = *palData++; byte ib = *palData++; diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 45bb3506d5..60a7930eab 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -378,7 +378,7 @@ public: void setPalette(int index, int count); void getEntry(int index, uint *r, uint *g, uint *b); void setEntry(int index, uint r, uint g, uint b); - uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff); + uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff, int start = 0, int count = 256); void getPalette(int start = 0, int count = 256); void signalListeners(); void clearListeners(); diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index b4c3127ea8..59eb59b194 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -380,6 +380,7 @@ void Ringworld2Globals::reset() { _v5589E.set(0, 0, 0, 0); _v558B6.set(0, 0, 0, 0); _v558C2 = 0; + _animationCtr = 0; _v5657C = 0; _v565E1 = 0; _v565E3 = 0; @@ -493,6 +494,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { _v558B6.synchronize(s); s.syncAsSint16LE(_v558C2); + s.syncAsSint16LE(_animationCtr); s.syncAsSint16LE(_v5657C); s.syncAsSint16LE(_v565E1); s.syncAsSint16LE(_v565E3); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index d80e4d9859..45226c921b 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -260,6 +260,7 @@ public: Rect _v5589E; Rect _v558B6; int _v558C2; + int _animationCtr; int _v565E1; int _v565E3; int _v565E5; 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; diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index eb36cf0790..41179c4915 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -54,7 +54,8 @@ enum { enum { kRingDebugScripts = 1 << 0, ktSageSound = 1 << 1, - ktSageCore = 1 << 2 + ktSageCore = 1 << 2, + ktSageDebugGraphics = 1 << 3 }; struct tSageGameDescription; -- 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') 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') 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/core.cpp | 6 +- engines/tsage/ringworld2/ringworld2_logic.cpp | 115 +++++++++++++----------- engines/tsage/ringworld2/ringworld2_logic.h | 28 +++--- engines/tsage/ringworld2/ringworld2_scenes0.cpp | 2 +- 4 files changed, 83 insertions(+), 68 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 0a8c4ef1b4..292e74c09b 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -4259,8 +4259,10 @@ void SceneHandler::dispatch() { } // Handle drawing the contents of the scene - if (g_globals->_sceneManager._scene) - g_globals->_sceneObjects->draw(); + if ((g_vm->getGameID() != GType_Ringworld2) || (R2_GLOBALS._animationCtr == 0)) { + if (g_globals->_sceneManager._scene) + g_globals->_sceneObjects->draw(); + } // Check to see if any scene change is required g_globals->_sceneManager.checkScene(); 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') 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') 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') 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/graphics.cpp | 2 ++ engines/tsage/ringworld2/ringworld2_logic.cpp | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 5ddc7b6a1a..b3dceba292 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -223,11 +223,13 @@ GfxSurface::GfxSurface() : _bounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) { _lockSurfaceCtr = 0; _customSurface = NULL; _transColor = -1; + _trackDirtyRects = false; } GfxSurface::GfxSurface(const GfxSurface &s) { _lockSurfaceCtr = 0; _customSurface = NULL; + _trackDirtyRects = false; this->operator =(s); } 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 3bf8eb4e3e59439cb90a4a8fa7b10c8be360d019 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 4 Mar 2012 19:37:45 +1100 Subject: TSAGE: Bugfix for Blue Force named hotspots to display look/use/talk descriptions correctly --- engines/tsage/blue_force/blueforce_logic.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h index 04c6e9bdc2..59bc2b7a51 100644 --- a/engines/tsage/blue_force/blueforce_logic.h +++ b/engines/tsage/blue_force/blueforce_logic.h @@ -119,9 +119,6 @@ public: class NamedObject: public SceneObject { public: - int _resNum; - int _lookLineNum, _talkLineNum, _useLineNum; - virtual Common::String getClassName() { return "NamedObject"; } virtual void synchronize(Serializer &s); virtual void postInit(SceneObjectList *OwnerList = NULL); -- cgit v1.2.3 From 818c85948e418c7f02f53feca34102b171ab3ce5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 4 Mar 2012 19:38:25 +1100 Subject: TSAGE: Bugfix for showing cursor correctly in Blue Force scene 930 --- engines/tsage/blue_force/blueforce_scenes9.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index a303576928..a63ff7efdf 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -3375,6 +3375,7 @@ void Scene930::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.fixPriority(80); BF_GLOBALS._player.changeZoom(-1); BF_GLOBALS._player.enableControl(); + BF_GLOBALS._events.setCursor(CURSOR_WALK); _item1.setDetails( 1, 930, 0, 1, 2, 1); _item2.setDetails( 2, 930, 4, 5, 6, 1); -- 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') 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 From 62966183e448d2e9332f3abf50918594280a02d6 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 7 Mar 2012 21:06:32 +1100 Subject: TSAGE: Renaming of fields and fix for gate in Blue Force scene 900 --- engines/tsage/blue_force/blueforce_scenes9.cpp | 14 +++++++------- engines/tsage/blue_force/blueforce_scenes9.h | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index a63ff7efdf..e364525e2c 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -35,7 +35,7 @@ namespace BlueForce { * *--------------------------------------------------------------------------*/ -bool Scene900::Item1::startAction(CursorType action, Event &event) { +bool Scene900::Exterior::startAction(CursorType action, Event &event) { if (action == CURSOR_LOOK) { SceneItem::display2(900, 6); return true; @@ -44,7 +44,7 @@ bool Scene900::Item1::startAction(CursorType action, Event &event) { } } -bool Scene900::Item4::startAction(CursorType action, Event &event) { +bool Scene900::WestExit::startAction(CursorType action, Event &event) { Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene; BF_GLOBALS._player.disableControl(); @@ -458,7 +458,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_jakeJacketSpeaker); _stripManager.addSpeaker(&_lyleHatSpeaker); - _item4.setDetails(Rect(0, 85, 20, 130), 900, -1, -1, -1, 1, 0); + _westExit.setDetails(Rect(0, 85, 20, 130), 900, -1, -1, -1, 1, 0); BF_GLOBALS._player.postInit(); _dog.postInit(); @@ -559,11 +559,11 @@ void Scene900::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager1, this, 9002, &BF_GLOBALS._player, &_door, NULL); } - _gate.setDetails(900, 0, -1, 1, 1, 0); - _door.setDetails(900, 2, -1, 5, 1, 0); + _gate.setDetails(900, 0, -1, 1, 1, (SceneItem *)NULL); + _door.setDetails(900, 2, -1, 5, 1, (SceneItem *)NULL); _item2.setDetails(Rect(0, 0, 225, 21), 666, 25, -1, -1, 1, NULL); _item3.setDetails(Rect(37, 21, 324, 50), 666, 26, -1, -1, 1, NULL); - _item1.setDetails(Rect(0, 0, 960, 200), 900, 7, -1, -1, 1, NULL); + _exterior.setDetails(Rect(0, 0, 960, 200), 900, 7, -1, -1, 1, NULL); } void Scene900::signal() { @@ -692,7 +692,7 @@ void Scene900::process(Event &event) { SceneExt::process(event); if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) { - if (_item4.contains(event.mousePos)) { + if (_westExit.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W); BF_GLOBALS._events.setCursor(surface); } else { diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h index 9ae542c21d..74708b94de 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.h +++ b/engines/tsage/blue_force/blueforce_scenes9.h @@ -41,11 +41,11 @@ using namespace TsAGE; class Scene900: public PalettedScene { /* Items */ - class Item1: public NamedHotspot { + class Exterior: public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; - class Item4: public NamedHotspot { + class WestExit: public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; @@ -94,7 +94,7 @@ public: SpeakerGameText _gameTextSpeaker; SpeakerJakeJacket _jakeJacketSpeaker; SpeakerLyleHat _lyleHatSpeaker; - Item1 _item1; + Exterior _exterior; Gate _gate; Door _door; Dog _dog; @@ -104,7 +104,7 @@ public: NamedObject _object5; Lyle _lyle; Body _body; - Item4 _item4; + WestExit _westExit; ASoundExt _sound1; Action1 _action1; Action2 _action2; -- cgit v1.2.3 From 4f740bb224a310567e060c06d7d010d14a195b66 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 9 Mar 2012 22:49:27 +1100 Subject: TSAGE: Bugfix for breaker box display in Blue Force scene 910 This fixes one of the problems in bug #3500015 --- engines/tsage/blue_force/blueforce_scenes9.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index e364525e2c..dbea1756b3 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -1285,9 +1285,9 @@ bool Scene910::Object13::startAction(CursorType action, Event &event) { } if (_mode != 1) - BF_GLOBALS._breakerBoxStatusArr[_state - 1] = (_state + 251) % 256; + BF_GLOBALS._breakerBoxStatusArr[_state - 1] = (_frame + 251) % 256; else - BF_GLOBALS._breakerBoxStatusArr[_state - 1] = _state; + BF_GLOBALS._breakerBoxStatusArr[_state - 1] = _frame; switch (_state) { case 1: -- cgit v1.2.3 From d142606f755203bf2e407729840898b0c8ca53d5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 10 Mar 2012 16:11:00 +1100 Subject: TSAGE: Fix for walk regions enablement in Blue Force warehouse scene --- engines/tsage/blue_force/blueforce_scenes9.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage') diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp index dbea1756b3..2178f31b30 100644 --- a/engines/tsage/blue_force/blueforce_scenes9.cpp +++ b/engines/tsage/blue_force/blueforce_scenes9.cpp @@ -2209,7 +2209,7 @@ void Scene910::postInit(SceneObjectList *OwnerList) { _fakeWall.hide(); if (BF_GLOBALS._v4CECC != 2) _yellowCord.setPosition(Common::Point(291, -30)); - BF_GLOBALS._walkRegions.disableRegion(10); + BF_GLOBALS._walkRegions.enableRegion(10); } if (BF_GLOBALS._breakerBoxStatusArr[17] != 0) { -- cgit v1.2.3