diff options
author | Willem Jan Palenstijn | 2013-09-24 13:55:54 +0200 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-09-24 13:55:54 +0200 |
commit | 6417192584873f98737a0928adefeb9aa9cad894 (patch) | |
tree | 0d238f05c406ae70fff8c907bd10d29a16f2d6a4 /engines/tsage/ringworld2 | |
parent | f3514534ce46bad5e3ffadfdf0b3af403045e5ef (diff) | |
parent | 74cc4aec8aa80da2541857e3120b31a566ccdff3 (diff) | |
download | scummvm-rg350-6417192584873f98737a0928adefeb9aa9cad894.tar.gz scummvm-rg350-6417192584873f98737a0928adefeb9aa9cad894.tar.bz2 scummvm-rg350-6417192584873f98737a0928adefeb9aa9cad894.zip |
Merge branch 'master' into zvision
Conflicts:
video/avi_decoder.cpp
Diffstat (limited to 'engines/tsage/ringworld2')
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_dialogs.cpp | 10 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_logic.cpp | 62 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_logic.h | 7 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes0.cpp | 522 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes0.h | 68 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes1.cpp | 1008 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes1.h | 62 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes2.cpp | 81 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes3.cpp | 42 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_speakers.cpp | 113 | ||||
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_speakers.h | 16 |
11 files changed, 1148 insertions, 843 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 57fdef6405..e2afa574de 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -234,9 +234,9 @@ void CharacterDialog::show() { SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene; scene->saveCharacter(oldCharacter); - // Play a transition sound as the character is changed + // Play the correctfrequency, if any, of the character being switched to's scanner device if (R2_GLOBALS._player._characterScene[0] != 300) { - switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex] - 1) { case 0: R2_GLOBALS._sound4.stop(); break; @@ -256,7 +256,7 @@ void CharacterDialog::show() { break; } } else if (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex] > 1) { - switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex] - 1) { case 2: R2_GLOBALS._sound4.play(45); break; @@ -273,7 +273,7 @@ void CharacterDialog::show() { break; } } else if ((R2_GLOBALS._player._characterScene[1] == 300) && (R2_GLOBALS._scannerFrequencies[1] != 1)) { - switch (R2_GLOBALS._scannerFrequencies[1]) { + switch (R2_GLOBALS._scannerFrequencies[1] - 1) { case 2: R2_GLOBALS._sound4.play(45); break; @@ -294,7 +294,7 @@ void CharacterDialog::show() { } else if (R2_GLOBALS._scannerFrequencies[2] == 1) { R2_GLOBALS._sound4.stop(); } else { - switch (R2_GLOBALS._scannerFrequencies[1]) { + switch (R2_GLOBALS._scannerFrequencies[1] - 1) { case 2: R2_GLOBALS._sound4.play(45); break; diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f1f9f9fe5a..a50dccda03 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -133,6 +133,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Elevator return new Scene1530(); case 1550: + // Spaceport return new Scene1550(); case 1575: return new Scene1575(); @@ -337,7 +338,7 @@ 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 + // Initialize fields _action = NULL; _field12 = 0; _sceneMode = 0; @@ -358,6 +359,7 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { void SceneExt::remove() { _sceneAreas.clear(); Scene::remove(); + R2_GLOBALS._uiElements._active = true; } void SceneExt::process(Event &event) { @@ -382,27 +384,6 @@ void SceneExt::dispatch() { Scene::dispatch(); } -void SceneExt::loadScene(int sceneNum) { - Scene::loadScene(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._uiElements._active = true; - R2_GLOBALS._uiElements.show(); - } else { - // Update the user interface - R2_GLOBALS._uiElements.updateInventory(); - } -} - bool SceneExt::display(CursorType action, Event &event) { switch (action) { case CURSOR_CROSSHAIRS: @@ -620,7 +601,7 @@ void SceneHandlerExt::postLoad(int priorSceneBeforeLoad, int currentSceneBeforeL R2_GLOBALS._gfxColors.foreground = 59; R2_GLOBALS._fontColors.background = 4; R2_GLOBALS._fontColors.foreground = 15; - R2_GLOBALS._frameEdgeColour = 2; + R2_GLOBALS._frameEdgeColor = 2; R2_GLOBALS._scenePalette.loadPalette(0); R2_GLOBALS._scenePalette.setEntry(255, 0xff, 0xff, 0xff); @@ -664,7 +645,7 @@ void SceneHandlerExt::setupPaletteMaps() { break; } - // Scan for the palette index with the closest matching colour + // Scan for the palette index with the closest matching color int threshold = 769; int foundIndex = -1; for (int pIndex2 = 223; pIndex2 >= 0; --pIndex2) { @@ -970,7 +951,8 @@ void Ringworld2InvObjectList::setObjectScene(int objectNum, int sceneNumber) { R2_GLOBALS._events.setCursor(CURSOR_USE); // Update the user interface if necessary - T2_GLOBALS._uiElements.updateInventory(); + T2_GLOBALS._uiElements.updateInventory( + (sceneNumber == R2_GLOBALS._player._characterIndex) ? objectNum : 0); } /** @@ -1324,7 +1306,7 @@ GfxSurface SceneActor::getFrame() { /*--------------------------------------------------------------------------*/ -SceneArea::SceneArea(): EventHandler() { +SceneArea::SceneArea(): SceneItem() { _enabled = true; _insideArea = false; _savedCursorNum = CURSOR_NONE; @@ -1428,6 +1410,7 @@ void SceneExit::process(Event &event) { /*--------------------------------------------------------------------------*/ void SceneAreaObject::remove() { + R2_GLOBALS._sceneItems.remove(this); _object1.remove(); SceneArea::remove(); --R2_GLOBALS._insetUp; @@ -1437,19 +1420,22 @@ void SceneAreaObject::process(Event &event) { if (_insetCount == R2_GLOBALS._insetUp) { CursorType cursor = R2_GLOBALS._events.getCursor(); - if (_bounds.contains(event.mousePos)) { + if (_object1._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) + if (_cursorNum != cursor) { // Cursor moved outside bounded area - R2_GLOBALS._events.setCursor(_savedCursorNum); - + _savedCursorNum = R2_GLOBALS._events.getCursor(); + R2_GLOBALS._events.setCursor(CURSOR_INVALID); + } + if (event.eventType == EVENT_BUTTON_DOWN) { - R2_GLOBALS._events.setCursor(_savedCursorNum); event.handled = true; + R2_GLOBALS._events.setCursor(_savedCursorNum); + remove(); } } } @@ -1469,7 +1455,7 @@ void SceneAreaObject::setDetails(int visage, int strip, int frameNumber, const C } void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { - ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum, + _object1.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *)NULL); } @@ -1881,7 +1867,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { default: // ANIMPALMODE_CURR_PALETTE - // Use the closest matching colours in the currently active palette to those specified in the animation + // Use the closest matching colors 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]; @@ -2269,14 +2255,14 @@ void ScannerDialog::Button::reset() { scanner._obj5.postInit(); scanner._obj5.setup(4, 4, 1); - scanner._obj5.setPosition(Common::Point(R2_GLOBALS._v565EC[1] + 145, - R2_GLOBALS._v565EC[3] + 59)); + scanner._obj5.setPosition(Common::Point(R2_GLOBALS._s1550PlayerArea[R2_QUINN].x + 145, + R2_GLOBALS._s1550PlayerArea[R2_QUINN].y + 59)); scanner._obj5.fixPriority(257); scanner._obj6.postInit(); scanner._obj6.setup(4, 4, 2); - scanner._obj6.setPosition(Common::Point(R2_GLOBALS._v565EC[2] + 145, - R2_GLOBALS._v565EC[4] + 59)); + scanner._obj6.setPosition(Common::Point(R2_GLOBALS._s1550PlayerArea[R2_SEEKER].x + 145, + R2_GLOBALS._s1550PlayerArea[R2_SEEKER].y + 59)); scanner._obj6.fixPriority(257); break; case 1700: @@ -2416,7 +2402,7 @@ void ScannerDialog::remove() { switch (R2_GLOBALS._sceneManager._sceneNumber) { case 1550: case 1700: - R2_GLOBALS._events.setCursor(R2_GLOBALS._player._canWalk ? CURSOR_ARROW : CURSOR_USE); + R2_GLOBALS._events.setCursor(R2_GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE); break; case 3800: case 3900: { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 1b4b7fca1f..2b2a28aff8 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -42,9 +42,8 @@ public: static Scene *createScene(int sceneNumber); }; -class SceneArea: public EventHandler { +class SceneArea: public SceneItem { public: - Rect _bounds; bool _enabled; bool _insideArea; CursorType _cursorNum; @@ -54,9 +53,12 @@ public: SceneArea(); void setDetails(const Rect &bounds, CursorType cursor); + virtual Common::String getClassName() { return "SceneArea"; } virtual void synchronize(Serializer &s); virtual void remove(); virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event) { return false; } + virtual void doAction(int action) {} }; class SceneExit: public SceneArea { @@ -99,7 +101,6 @@ public: virtual void remove(); virtual void process(Event &event); virtual void dispatch(); - virtual void loadScene(int sceneNum); virtual void refreshBackground(int xAmount, int yAmount); virtual void saveCharacter(int characterIndex); virtual void restore() {} diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 8d35fc7222..1439557d1e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -392,11 +392,11 @@ void Scene100::dispatch() { * *--------------------------------------------------------------------------*/ -bool Scene125::Object5::startAction(CursorType action, Event &event) { +bool Scene125::Food::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) return true; - else - return SceneActor::startAction(action, event); + + return SceneActor::startAction(action, event); } /*--------------------------------------------------------------------------*/ @@ -631,9 +631,9 @@ void Scene125::postInit(SceneObjectList *OwnerList) { _infoDisk.setPosition(Common::Point(47, 167)); } - _object6.postInit(); - _object6.setup(162, 1, 1); - _object6.setPosition(Common::Point(214, 168)); + _foodDispenser.postInit(); + _foodDispenser.setup(162, 1, 1); + _foodDispenser.setPosition(Common::Point(214, 168)); _diskSlot.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); @@ -656,8 +656,8 @@ void Scene125::signal() { _icon4.postInit(); _icon4._sceneRegionId = 5; - _sceneMode = 2; setAction(&_sequenceManager, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, &R2_GLOBALS._player, NULL); + _sceneMode = 2; break; case 2: _icon1.setup(160, 1, 1); @@ -698,7 +698,7 @@ void Scene125::signal() { _icon6._sceneRegionId = 8; consoleAction(5); - R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 10: @@ -971,14 +971,17 @@ void Scene125::consoleAction(int id) { case 15: consoleAction(3); - if (R2_GLOBALS._v565F5 < 3) { + if (R2_GLOBALS._foodCount < 3) { R2_GLOBALS._player.disableControl(); - _object5.postInit(); - _object5.setup(162, 2, 2); - _object5.setPosition(Common::Point(216, UI_INTERFACE_Y)); + _food.postInit(); + _food.setup(162, 2, 2); + _food.setPosition(Common::Point(216, UI_INTERFACE_Y)); - R2_GLOBALS._v565F5 += 2; - } else if (R2_GLOBALS._v565F5 == 3) { + R2_GLOBALS._foodCount += 2; + + _sceneMode = 128; + this->setAction(&_sequenceManager, this, 128, &_foodDispenser, &_food, NULL); + } else if (R2_GLOBALS._foodCount == 3) { SceneItem::display2(126, 13); } else { SceneItem::display2(126, 14); @@ -987,13 +990,16 @@ void Scene125::consoleAction(int id) { case 16: consoleAction(3); - if (R2_GLOBALS._v565F5 < 4) { + if (R2_GLOBALS._foodCount < 4) { R2_GLOBALS._player.disableControl(); - _object5.postInit(); - _object5.setup(162, 2, 3); - _object5.setPosition(Common::Point(218, UI_INTERFACE_Y)); + _food.postInit(); + _food.setup(162, 2, 3); + _food.setPosition(Common::Point(218, UI_INTERFACE_Y)); - ++R2_GLOBALS._v565F5; + ++R2_GLOBALS._foodCount; + + _sceneMode = 128; + this->setAction(&_sequenceManager, this, 128, &_foodDispenser, &_food, NULL); } else { SceneItem::display2(126, 15); } @@ -1001,13 +1007,16 @@ void Scene125::consoleAction(int id) { case 17: consoleAction(3); - if (R2_GLOBALS._v565F5 < 4) { + if (R2_GLOBALS._foodCount < 4) { R2_GLOBALS._player.disableControl(); - _object5.postInit(); - _object5.setup(162, 2, 1); - _object5.setPosition(Common::Point(215, UI_INTERFACE_Y)); + _food.postInit(); + _food.setup(162, 2, 1); + _food.setPosition(Common::Point(215, UI_INTERFACE_Y)); + + ++R2_GLOBALS._foodCount; - ++R2_GLOBALS._v565F5; + _sceneMode = 128; + this->setAction(&_sequenceManager, this, 128, &_foodDispenser, &_food, NULL); } else { SceneItem::display2(126, 16); } @@ -1924,7 +1933,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.foreground = 4; R2_GLOBALS._gfxColors.background = 3; R2_GLOBALS._fontColors.background = 3; - R2_GLOBALS._frameEdgeColour = 3; + R2_GLOBALS._frameEdgeColor = 3; break; case 1: @@ -1933,7 +1942,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.foreground = 25; R2_GLOBALS._gfxColors.background = 43; R2_GLOBALS._fontColors.background = 48; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; case 2: @@ -1943,7 +1952,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.background = 136; R2_GLOBALS._fontColors.background = 48; R2_GLOBALS._fontColors.foreground = 253; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; case 3: @@ -1952,7 +1961,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.foreground = 84; R2_GLOBALS._gfxColors.background = 118; R2_GLOBALS._fontColors.background = 47; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; case 14: @@ -1962,7 +1971,7 @@ void Scene180::restore() { R2_GLOBALS._fontColors.foreground = 38; R2_GLOBALS._gfxColors.foreground = 192; R2_GLOBALS._gfxColors.background = 30; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; default: @@ -2026,7 +2035,7 @@ void Scene200::EastExit::changeScene() { Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; _enabled = false; - R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.disableControl(CURSOR_WALK); scene->_sceneMode = 206; scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); } @@ -2035,7 +2044,7 @@ void Scene200::WestExit::changeScene() { Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; _enabled = false; - R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.disableControl(CURSOR_WALK); scene->_sceneMode = 208; scene->setAction(&scene->_sequenceManager, scene, 208, &R2_GLOBALS._player, NULL); } @@ -3142,7 +3151,7 @@ bool Scene300::Doorway::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) { if ((R2_GLOBALS._player._characterIndex == R2_QUINN) && - (!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500)) { + (!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_SEEKER] == 500)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 301; scene->setAction(&scene->_sequenceManager1, scene, 301, &R2_GLOBALS._player, this, NULL); @@ -3559,7 +3568,7 @@ void Scene300::signal() { break; case 16: - if (_stripManager._field2E8 == 1) { + if (_stripManager._exitMode == 1) { R2_GLOBALS._player.setAction(NULL); R2_GLOBALS._sceneManager.changeScene(1000); } else { @@ -4813,6 +4822,11 @@ void Scene400::dispatch() { * *--------------------------------------------------------------------------*/ +Scene500::PanelDialog::Button::Button() { + _buttonId = 0; + _buttonDown = false; +} + bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; @@ -4835,17 +4849,18 @@ bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ -bool Scene500::Object2::startAction(CursorType action, Event &event) { +bool Scene500::Seeker::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) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { scene->_stripNumber = R2_GLOBALS.getFlag(26) ? 1101 : 1103; } else { scene->_stripNumber = R2_GLOBALS.getFlag(26) ? 1102 : 1105; } + scene->_sceneMode = 524; scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); return true; } else { @@ -4853,7 +4868,7 @@ bool Scene500::Object2::startAction(CursorType action, Event &event) { } } -bool Scene500::Object3::startAction(CursorType action, Event &event) { +bool Scene500::Suit::startAction(CursorType action, Event &event) { Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -4864,20 +4879,20 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { case CURSOR_USE: if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if ((_strip != 3) && (_strip != 7)) - SceneItem::display2(500, _strip); + SceneItem::display2(500, _strip + 25); 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); + scene->setAction(&scene->_sequenceManager1, scene, 512, &R2_GLOBALS._player, NULL); } else if (!R2_GLOBALS.getFlag(28)) SceneItem::display2(500, 41); - else if (!R2_GLOBALS.getFlag(40)) + else if (!R2_GLOBALS.getFlag(25)) SceneItem::display2(500, 40); else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 512; - scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, &scene->_object3, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 512, &R2_GLOBALS._player, &scene->_suit, NULL); R2_GLOBALS.setFlag(26); } } else { @@ -4893,7 +4908,7 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 515; - scene->setAction(&scene->_sequenceManager1, scene, 515, &R2_GLOBALS._player, &scene->_object3, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 515, &R2_GLOBALS._player, &scene->_suit, NULL); R2_GLOBALS.setFlag(28); } return true; @@ -4903,12 +4918,7 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { return true; default: - if (action < R2_LAST_INVENT) { - SceneItem::display2(500, action); - return true; - } else { - return SceneActor::startAction(action, event); - } + return SceneActor::startAction(action, event); } } @@ -4976,7 +4986,7 @@ bool Scene500::AirLock::startAction(CursorType action, Event &event) { 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); + &scene->_seeker, &scene->_airLock, NULL); return true; } else { return SceneActor::startAction(action, event); @@ -5045,7 +5055,36 @@ bool Scene500::Locker2::startAction(CursorType action, Event &event) { } } -bool Scene500::Object::startAction(CursorType action, Event &event) { +/*--------------------------------------------------------------------------*/ + +void Scene500::PanelDialog::setDetails(int visage, int strip, int frameNumber, + const Common::Point &pt) { + SceneAreaObject::setDetails(visage, strip, frameNumber, pt); + SceneAreaObject::setDetails(500, 43, 32, 45); + + _button1.setupButton(1); + _button2.setupButton(2); + _button3.setupButton(3); +} + +void Scene500::PanelDialog::remove() { + Scene500 *scene = (Scene500 *)BF_GLOBALS._sceneManager._scene; + scene->_sceneAreas.remove(&_button1); + scene->_sceneAreas.remove(&_button2); + scene->_sceneAreas.remove(&_button3); + + _button1.remove(); + _button2.remove(); + _button3.remove(); + + SceneAreaObject::remove(); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 511; + scene->setAction(&scene->_sequenceManager1, scene, 511, &R2_GLOBALS._player, NULL); +} + +bool Scene500::PanelDialog::Button::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) { return false; } else { @@ -5053,6 +5092,119 @@ bool Scene500::Object::startAction(CursorType action, Event &event) { } } +void Scene500::PanelDialog::Button::setupButton(int buttonId) { + _buttonId = buttonId; + _buttonDown = false; + SceneActor::postInit(); + setup(500, 7, 1); + fixPriority(251); + + switch (_buttonId) { + case 1: + setPosition(Common::Point(139, 78)); + break; + case 2: + setPosition(Common::Point(139, 96)); + break; + case 3: + setPosition(Common::Point(139, 114)); + break; + default: + break; + } + + Scene500 *scene = (Scene500 *)BF_GLOBALS._sceneManager._scene; + scene->_sceneAreas.push_front(this); +} + +void Scene500::PanelDialog::Button::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_buttonId); + s.syncAsSint16LE(_buttonDown); +} + +void Scene500::PanelDialog::Button::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && + (R2_GLOBALS._events.getCursor() == CURSOR_USE) && + _bounds.contains(event.mousePos) && !_buttonDown) { + _buttonDown = true; + event.handled = true; + setFrame(2); + } + + if ((event.eventType == EVENT_BUTTON_UP) && _buttonDown) { + setFrame(1); + _buttonDown = false; + event.handled = true; + + doButtonPress(); + } +} + +void Scene500::PanelDialog::Button::doButtonPress() { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS.getFlag(28)) { + SceneItem::display2(500, 48); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = _buttonId; + + switch (_buttonId) { + case 1: + if (--R2_GLOBALS._landerSuitNumber == 0) + R2_GLOBALS._landerSuitNumber = 3; + + if (R2_GLOBALS.getFlag(35)) { + scene->_sceneMode = 5; + scene->setAction(&scene->_sequenceManager1, scene, 509, &scene->_object1, + &scene->_suit, &scene->_object8, NULL); + } else { + scene->_sound1.play(127); + scene->_object1.animate(ANIM_MODE_6, scene); + } + break; + + case 2: + if (++R2_GLOBALS._landerSuitNumber == 4) + R2_GLOBALS._v566A4 = 1; + + if (R2_GLOBALS.getFlag(35)) { + scene->_sceneMode = 6; + scene->setAction(&scene->_sequenceManager1, scene, 509, &scene->_object1, + &scene->_suit, &scene->_object8, NULL); + } else { + scene->_sound1.play(127); + scene->_object1.animate(ANIM_MODE_6, scene); + } + break; + + case 3: + if (R2_GLOBALS.getFlag(35)) { + scene->_sceneMode = 509; + scene->setAction(&scene->_sequenceManager1, scene, 509, &scene->_object1, + &scene->_suit, &scene->_object8, NULL); + } else { + scene->_suit.postInit(); + scene->_suit.hide(); + scene->_suit._effect = 1; + scene->_suit.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); + scene->_suit.setup(502, R2_GLOBALS._landerSuitNumber + 2, 1); + + scene->setAction(&scene->_sequenceManager1, scene, 508, + &R2_GLOBALS._player, &scene->_object1, &scene->_suit, + &scene->_object8, NULL); + R2_GLOBALS.setFlag(35); + } + break; + + default: + break; + } + } +} + /*--------------------------------------------------------------------------*/ void Scene500::postInit(SceneObjectList *OwnerList) { @@ -5071,23 +5223,23 @@ void Scene500::postInit(SceneObjectList *OwnerList) { 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); + _seeker.postInit(); + _seeker._effect = 1; + _seeker.setup(1505, 1, 1); + _seeker._moveDiff.x = 5; + _seeker.setPosition(Common::Point(42, 151)); + _seeker.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)); + _seeker.postInit(); + _seeker._effect = 1; + _seeker.setup(R2_GLOBALS.getFlag(26) ? 1500 : 10, 1, 1); + _seeker.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); + _seeker.setDetails(500, 37, 38, -1, 1, (SceneItem *)NULL); } } @@ -5167,16 +5319,16 @@ void Scene500::postInit(SceneObjectList *OwnerList) { } 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); + _suit.postInit(); + _suit._effect = 1; + _suit.setPosition(Common::Point(247, 52)); + _suit.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); if (!R2_GLOBALS.getFlag(26)) { if (R2_GLOBALS.getFlag(28)) - _object3.setup(502, 7, 2); + _suit.setup(502, 7, 2); else - _object3.setup(502, R2_GLOBALS._v566A3 + 2, 7); + _suit.setup(502, R2_GLOBALS._landerSuitNumber + 2, 7); } } @@ -5222,7 +5374,7 @@ void Scene500::signal() { _object1.animate(ANIM_MODE_6, this); R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 6: @@ -5231,7 +5383,7 @@ void Scene500::signal() { _object1.animate(ANIM_MODE_5, this); R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 7: @@ -5239,14 +5391,14 @@ void Scene500::signal() { _object8.animate(ANIM_MODE_6, this); R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 500: R2_GLOBALS._sceneManager.changeScene(700); break; case 501: - if (R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500) { + if (R2_GLOBALS._player._characterScene[R2_SEEKER] == 500) { _stripNumber = 1100; _sceneMode = 523; setAction(&_sequenceManager1, this, 523, &R2_GLOBALS._player, NULL); @@ -5277,7 +5429,7 @@ void Scene500::signal() { break; case 506: case 518: - R2_GLOBALS.setFlag(11); + R2_GLOBALS.setFlag(12); R2_GLOBALS._player.enableControl(); break; case 507: @@ -5287,12 +5439,12 @@ void Scene500::signal() { break; case 509: R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 510: R2_GLOBALS._player.enableControl(); - _area1.setDetails(500, 6, 1, Common::Point(160, 120)); + _panelDialog.setDetails(500, 6, 1, Common::Point(160, 120)); R2_GLOBALS._player.enableControl(); break; case 513: @@ -5391,22 +5543,22 @@ bool Scene600::Item4::startAction(CursorType action, Event &event) { Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; scene->_object1.setup2(603, 3, 1, 239, 54, 10, 0); - scene->_actor3.postInit(); - scene->_actor2.postInit(); + scene->_stasisField.postInit(); + scene->_computer.postInit(); scene->_sceneMode = 612; - scene->setAction(&scene->_sequenceManager1, scene, 612, &scene->_actor3, &scene->_actor2, &R2_GLOBALS._player, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 612, &scene->_stasisField, &scene->_computer, &R2_GLOBALS._player, NULL); return true; } -void Scene600::Actor4::signal() { +void Scene600::Smoke::signal() { Common::Point pt(177 + R2_GLOBALS._randomSource.getRandomNumber(5), 108 + R2_GLOBALS._randomSource.getRandomNumber(3)); NpcMover *mover = new NpcMover(); addMover(mover, &pt, this); } -bool Scene600::Actor4::startAction(CursorType action, Event &event) { +bool Scene600::Smoke::startAction(CursorType action, Event &event) { if (action >= CURSOR_WALK) // Only action cursors return SceneActor::startAction(action, event); @@ -5414,7 +5566,7 @@ bool Scene600::Actor4::startAction(CursorType action, Event &event) { return false; } -GfxSurface Scene600::Actor4::getFrame() { +GfxSurface Scene600::Smoke::getFrame() { GfxSurface frame = SceneActor::getFrame(); if (_effect) { @@ -5435,7 +5587,8 @@ GfxSurface Scene600::Actor4::getFrame() { } bool Scene600::Doorway::startAction(CursorType action, Event &event) { - if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) + // Only action cursors + if (action < CURSOR_WALK) return false; if (action != CURSOR_USE) @@ -5478,16 +5631,17 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { if (action < CURSOR_WALK) { switch (action) { case R2_COM_SCANNER: + // If laser is destroyed 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->_laser); + scene->_scanner.postInit(); + scene->_scanner.setDetails(600, 20, -1, -1, 4, &scene->_laser); scene->_sceneMode = 607; - scene->setAction(&scene->_sequenceManager1, scene, 607, &R2_GLOBALS._player, &scene->_actor8, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 607, &R2_GLOBALS._player, &scene->_scanner, NULL); return true; } } else { @@ -5503,21 +5657,22 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { scene->_aerosol.postInit(); scene->_aerosol.setDetails(600, 27, -1, -1, 5, &scene->_laser); - 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->_aerosol); + scene->_smoke.postInit(); + scene->_smoke.setup(601, 3, 1); + scene->_smoke._effect = 3; + scene->_smoke._moveDiff = Common::Point(1, 1); + scene->_smoke._moveRate = 2; + scene->_smoke._numFrames = 3; + scene->_smoke.setDetails(600, 24, 25, 26, 5, &scene->_aerosol); scene->_sceneMode = 605; - scene->setAction(&scene->_sequenceManager1, scene, 605, &R2_GLOBALS._player, &scene->_aerosol, &scene->_actor4, &scene->_doorway, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 605, &R2_GLOBALS._player, &scene->_aerosol, &scene->_smoke, &scene->_doorway, NULL); return true; } break; case R2_CLAMP: + // If cloud is active if (R2_GLOBALS.getFlag(5)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 606; @@ -5547,9 +5702,11 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { bool Scene600::Aerosol::startAction(CursorType action, Event &event) { Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; - if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) { + // Only action cursors + if (action < CURSOR_WALK) return false; - } else if (action == CURSOR_USE) { + + if (action == CURSOR_USE) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 614; scene->setAction(&scene->_sequenceManager1, scene, 614, &R2_GLOBALS._player, &scene->_aerosol, NULL); @@ -5574,17 +5731,17 @@ void Scene600::synchronize(Serializer &s) { s.syncAsByte(_pixelMap[i]); } -bool Scene600::Actor8::startAction(CursorType action, Event &event) { +bool Scene600::Scanner::startAction(CursorType action, Event &event) { Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; - if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(9) == 600)) { + if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 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._scannerFrequencies[1] == 2) && (!R2_GLOBALS.getFlag(8))){ + scene->setAction(&scene->_sequenceManager1, scene, 615, &R2_GLOBALS._player, &scene->_scanner, NULL); + } else if ((action == R2_SONIC_STUNNER) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600) && (R2_GLOBALS._scannerFrequencies[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); + scene->setAction(&scene->_sequenceManager1, scene, 608, &R2_GLOBALS._player, &scene->_smoke, NULL); } else { return SceneActor::startAction(action, event); } @@ -5599,7 +5756,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._walkRegions.enableRegion(3); _field412 = 0; - // Initialise pixel map for the obscuring effect + // Initialize pixel map for the obscuring effect ScenePalette &pal = R2_GLOBALS._scenePalette; uint r, g, b; for (int i = 0; i < 256; ++i) { @@ -5618,11 +5775,11 @@ void Scene600::postInit(SceneObjectList *OwnerList) { _laser.postInit(); _laser.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); + if (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600) { + _scanner.postInit(); + _scanner.setup(602, 5, 1); + _scanner.setPosition(Common::Point(246, 41)); + _scanner.setDetails(600, 20, -1, -1, 1, (SceneItem *) NULL); switch (R2_GLOBALS._scannerFrequencies[1] - 2) { case 0: R2_GLOBALS._sound4.play(45); @@ -5658,7 +5815,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { _object1.setup2(603, 1, 1, 244, 50, 10, 0); if (R2_GLOBALS.getFlag(5)) { - if (R2_INVENTORY.getObjectScene(12) == 600) { + if (R2_INVENTORY.getObjectScene(R2_AEROSOL) == 600) { _aerosol.postInit(); _aerosol.setup(602, 2, 2); _aerosol.setPosition(Common::Point(189, 95)); @@ -5667,23 +5824,25 @@ void Scene600::postInit(SceneObjectList *OwnerList) { 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); + // Computer is active + _computer.postInit(); + _computer.setup(603, 2, 1); + _computer.setPosition(Common::Point(233, 45)); + _computer.animate(ANIM_MODE_2, NULL); + _computer.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(); + _smoke.postInit(); + _smoke.setup(601, 1, 1); + _smoke.setPosition(Common::Point(180, 110)); + _smoke._moveDiff = Common::Point(1, 1); + _smoke._moveRate = 2; + _smoke._numFrames = 3; + _smoke.animate(ANIM_MODE_2, NULL); + _smoke.fixPriority(130); + _smoke._effect = 3; + _smoke.setDetails(600, 24, 25, 26, 1, (SceneItem *) NULL); + _smoke.signal(); } } @@ -5727,7 +5886,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { } void Scene600::remove() { - if (R2_INVENTORY.getObjectScene(9) == 600) + if (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600) R2_GLOBALS._sound4.fadeOut2(NULL); SceneExt::remove(); } @@ -5742,6 +5901,7 @@ void Scene600::signal() { R2_GLOBALS._sceneManager.changeScene(700); break; case 605: + // After cloud is active R2_GLOBALS._player.enableControl(); R2_GLOBALS._walkRegions.enableRegion(6); R2_GLOBALS._walkRegions.enableRegion(7); @@ -5751,42 +5911,48 @@ void Scene600::signal() { R2_INVENTORY.setObjectScene(R2_AEROSOL, 600); R2_GLOBALS.setFlag(5); - _actor4._effect = 3; - _actor4.signal(); + _smoke._effect = 3; + _smoke.signal(); break; case 606: - R2_INVENTORY.setObjectScene(15, 600); + // After Clamp is put on laser + R2_INVENTORY.setObjectScene(R2_CLAMP, 600); R2_GLOBALS._player.enableControl(); break; case 607: - R2_INVENTORY.setObjectScene(9, 600); + // After scanner is put on laser + R2_INVENTORY.setObjectScene(R2_COM_SCANNER, 600); R2_GLOBALS._player.enableControl(); break; case 608: + // deactivate cloud R2_GLOBALS.setFlag(8); - _actor4.remove(); + _smoke.remove(); R2_GLOBALS._walkRegions.disableRegion(6); R2_GLOBALS._walkRegions.disableRegion(9); R2_GLOBALS._walkRegions.disableRegion(10); R2_GLOBALS._player.enableControl(); break; case 612: + // Deactivate stasis field R2_GLOBALS.setFlag(9); - _actor3.remove(); + _stasisField.remove(); R2_GLOBALS._sceneItems.remove(&_item4); - _actor2.setDetails(600, 21, -1, 23, 4, &_item4); + _computer.setDetails(600, 21, -1, 23, 4, &_item4); _background.setDetails(600, 7, -1, -1, 3, (SceneItem *) NULL); R2_GLOBALS._player.enableControl(CURSOR_USE); break; case 614: + // Pick up Aerosol R2_GLOBALS._player.enableControl(); _aerosol.remove(); - R2_INVENTORY.setObjectScene(12, 1); + R2_INVENTORY.setObjectScene(R2_AEROSOL, 1); R2_GLOBALS._walkRegions.disableRegion(7); break; case 615: - _actor8.remove(); - R2_INVENTORY.setObjectScene(9, 1); + // Pick up Com Scanner + _scanner.remove(); + R2_INVENTORY.setObjectScene(R2_COM_SCANNER, 1); R2_GLOBALS._player.enableControl(); break; default: @@ -5842,7 +6008,7 @@ void Scene600::dispatch() { _aSound1.play(40); Scene::dispatch(); - if ((_actor4._strip == 3) && (_actor4._frame == 3)) { + if ((_smoke._strip == 3) && (_smoke._frame == 3)) { _actor1.setStrip(4); _actor1.setFrame(1); } @@ -5868,26 +6034,26 @@ bool Scene700::Item11::startAction(CursorType action, Event &event) { return NamedHotspot::startAction(action, event); } -bool Scene700::Item12::startAction(CursorType action, Event &event) { +bool Scene700::HandGrip::startAction(CursorType action, Event &event) { Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; switch (action) { case R2_CABLE_HARNESS: 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->_cable.postInit(); + scene->_cable.setup(701, 3, 2); + scene->_cable.setPosition(Common::Point(243, 98)); + scene->_cable.setDetails(700, 37, -1, -1, 2, (SceneItem *) NULL); + scene->_cable.hide(); scene->_sceneMode = 20; break; case R2_ATTRACTOR_CABLE_HARNESS: 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->_cable.postInit(); + scene->_cable.setup(701, 2, 8); + scene->_cable.setPosition(Common::Point(243, 98)); + scene->_cable.setDetails(700, 38, -1, -1, 2, (SceneItem *) NULL); + scene->_cable.hide(); scene->_sceneMode = 21; break; default: @@ -5895,7 +6061,7 @@ bool Scene700::Item12::startAction(CursorType action, Event &event) { break; } - scene->setAction(&scene->_sequenceManager, scene, 707, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager, scene, 707, &R2_GLOBALS._player, &scene->_cable, NULL); return true; } @@ -5947,7 +6113,7 @@ bool Scene700::Actor4::startAction(CursorType action, Event &event) { return true; } -bool Scene700::Actor5::startAction(CursorType action, Event &event) { +bool Scene700::Cable::startAction(CursorType action, Event &event) { Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -5981,9 +6147,9 @@ bool Scene700::Actor5::startAction(CursorType action, Event &event) { break; case R2_ATTRACTOR_UNIT: R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) { + if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 700) { scene->_sceneMode = 706; - scene->setAction(&scene->_sequenceManager, scene, 706, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager, scene, 706, &R2_GLOBALS._player, &scene->_cable, NULL); } else { scene->_sceneMode = 15; Common::Point pt(_position.x - 12, _position.y + 1); @@ -6065,20 +6231,20 @@ void Scene700::postInit(SceneObjectList *OwnerList) { _actor9.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 1) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 1)) { - _actor5.postInit(); - _actor5.fixPriority(10); + _cable.postInit(); + _cable.fixPriority(10); switch (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS)) { case 0: switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: - _actor5.setup(701, 3, 2); - _actor5.setPosition(Common::Point(243, 98)); - _actor5.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); + _cable.setup(701, 3, 2); + _cable.setPosition(Common::Point(243, 98)); + _cable.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); + _cable.setup(701, 3, 1); + _cable.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + _cable.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); break; default: break; @@ -6088,22 +6254,22 @@ void Scene700::postInit(SceneObjectList *OwnerList) { switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) - _actor5.setup(701, 2, 1); + _cable.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); + _cable.setup(701, 2, 8); + _cable.setPosition(Common::Point(243, 98)); + _cable.fixPriority(77); + _cable.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); break; case 700: - _actor5.setup(701, 1, 8); + _cable.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))); + _cable.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)); + _cable.setup(701, 1, 1); + _cable.setPosition(Common::Point(_actor1._position.x + 1, _actor1._position.y + 120)); } - _actor5.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); + _cable.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); break; default: break; @@ -6118,7 +6284,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) { _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); + _handGrip.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); @@ -6223,7 +6389,7 @@ void Scene700::signal() { break; case 11: _sceneMode = 12; - _actor5.remove(); + _cable.remove(); R2_GLOBALS._player.animate(ANIM_MODE_6, this); break; case 12: @@ -6248,13 +6414,13 @@ void Scene700::signal() { 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._electromagnetChangeAmount + 10) / 5) * 4))) { - _actor5.animate(ANIM_MODE_6, NULL); - Common::Point pt(_actor5._position.x, _actor1._position.y + 120); + _cable.setup(701, 1, 8); + _cable.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); + if ((R2_GLOBALS._v565E5 != 0) && (_cable._position.x == _actor1._position.x + 1) && (_cable._position.x == 148 - (((R2_GLOBALS._electromagnetChangeAmount + 10) / 5) * 4))) { + _cable.animate(ANIM_MODE_6, NULL); + Common::Point pt(_cable._position.x, _actor1._position.y + 120); NpcMover *mover = new NpcMover(); - _actor5.addMover(mover, &pt, NULL); + _cable.addMover(mover, &pt, NULL); R2_GLOBALS._v565E7 = 1; } R2_GLOBALS._player.animate(ANIM_MODE_6, this); @@ -6274,9 +6440,9 @@ void Scene700::signal() { R2_GLOBALS._player.enableControl(); break; case 21: - _actor5.fixPriority(77); + _cable.fixPriority(77); if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) - _actor5.animate(ANIM_MODE_6, NULL); + _cable.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.enableControl(); @@ -6291,10 +6457,10 @@ void Scene700::signal() { R2_GLOBALS._sceneManager.changeScene(900); break; case 706: - _actor5.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); - _actor5.fixPriority(77); + _cable.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); + _cable.fixPriority(77); if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) - _actor5.animate(ANIM_MODE_6, NULL); + _cable.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.enableControl(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index bc30743aca..a2f2accaba 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -102,7 +102,7 @@ public: class Scene125: public SceneExt { /* Objects */ - class Object5: public SceneActor { + class Food: public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -136,7 +136,7 @@ public: ASoundExt _sound1; NamedHotspot _background, _item2, _item3; DiskSlot _diskSlot; - SceneActor _object1, _object2, _object3, _object4, _object5, _object6, _infoDisk; + SceneActor _object1, _object2, _object3, _object4, _food, _foodDispenser, _infoDisk; Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6; SequenceManager _sequenceManager; SceneText _sceneText; @@ -524,6 +524,31 @@ public: }; class Scene500: public SceneExt { + /* Dialogs */ + class PanelDialog: public SceneAreaObject { + class Button: public SceneActor { + private: + int _buttonId; + bool _buttonDown; + + void doButtonPress(); + public: + Button(); + virtual Common::String getClassName() { return "Scene500_Button"; } + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + virtual void synchronize(Serializer &s); + + void setupButton(int buttonId); + }; + public: + Button _button1, _button2, _button3; + + virtual Common::String getClassName() { return "Scene500_PanelWindow"; } + virtual void remove(); + void setDetails(int visage, int strip, int frameNumber, const Common::Point &pt); + }; + /* Items */ class ControlPanel: public SceneHotspot { public: @@ -531,11 +556,11 @@ class Scene500: public SceneExt { }; /* Objects */ - class Object2: public SceneActor { + class Seeker: public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Object3: public SceneActor { + class Suit: public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -570,20 +595,16 @@ class Scene500: public SceneExt { 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; + SpeakerSeeker500 _seekerSpeaker; + SpeakerQuinn500 _quinnSpeaker; SceneHotspot _background, _item2; ControlPanel _controlPanel; SceneActor _object1; - Object2 _object2; - Object3 _object3; + Seeker _seeker; + Suit _suit; Doorway _doorway; OxygenTanks _tanks1, _tanks2; AirLock _airLock; @@ -592,8 +613,7 @@ public: SonicStunner _sonicStunner; Locker1 _locker1; Locker2 _locker2; - SceneAreaObject _area1; - Object _obj1, _obj2, _obj3; + PanelDialog _panelDialog; ASoundExt _sound1; SequenceManager _sequenceManager1, _sequenceManager2; public: @@ -622,7 +642,7 @@ class Scene600 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor4 : public SceneActor { + class Smoke : public SceneActor { public: virtual void signal(); virtual bool startAction(CursorType action, Event &event); @@ -640,7 +660,7 @@ class Scene600 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor8 : public SceneActor { + class Scanner : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -653,13 +673,13 @@ public: CompartmentHotspot _item5; BackgroundSceneObject _object1; SceneActor _actor1; - SceneActor _actor2; - SceneActor _actor3; - Actor4 _actor4; + SceneActor _computer; + SceneActor _stasisField; + Smoke _smoke; Doorway _doorway; Laser _laser; Aerosol _aerosol; - Actor8 _actor8; + Scanner _scanner; ASoundExt _aSound1; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; @@ -679,7 +699,7 @@ class Scene700: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Item12 : public NamedHotspot { + class HandGrip : public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; @@ -696,7 +716,7 @@ class Scene700: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor5 : public SceneActor { + class Cable : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -716,12 +736,12 @@ public: NamedHotspot _item9; NamedHotspot _item10; Item11 _item11; - Item12 _item12; + HandGrip _handGrip; SceneActor _actor1; Actor2 _actor2; Actor3 _actor3; Actor4 _actor4; - Actor5 _actor5; + Cable _cable; Actor6 _actor6; Actor6 _actor7; Actor6 _actor8; diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 6ea53d0852..33eb9b9afb 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -39,6 +39,7 @@ Scene1000::Scene1000(): SceneExt() { R2_GLOBALS._uiElements._active = false; _gameTextSpeaker._displayMode = 9; _fieldD2E = 0; + _field412 = 0; } void Scene1000::postInit(SceneObjectList *OwnerList) { @@ -672,7 +673,7 @@ void Scene1100::synchronize(Serializer &s) { s.syncAsSint16LE(_field414); } -bool Scene1100::Actor16::startAction(CursorType action, Event &event) { +bool Scene1100::Seeker::startAction(CursorType action, Event &event) { Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; if (action != CURSOR_TALK) @@ -680,7 +681,7 @@ bool Scene1100::Actor16::startAction(CursorType action, Event &event) { if (R2_GLOBALS.getFlag(52)) { R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_field412 = 327; else scene->_field412 = 328; @@ -690,14 +691,14 @@ bool Scene1100::Actor16::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 55; if (R2_GLOBALS._v565AE >= 3) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) 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) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_stripManager.start3(304, scene, R2_GLOBALS._stripManager_lookupList); else scene->_stripManager.start3(308, scene, R2_GLOBALS._stripManager_lookupList); @@ -706,7 +707,7 @@ bool Scene1100::Actor16::startAction(CursorType action, Event &event) { return true; } -bool Scene1100::Actor17::startAction(CursorType action, Event &event) { +bool Scene1100::Trooper::startAction(CursorType action, Event &event) { Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -714,7 +715,7 @@ bool Scene1100::Actor17::startAction(CursorType action, Event &event) { if (_visage == 1105) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1114; - scene->setAction(&scene->_sequenceManager1, scene, 1114, &R2_GLOBALS._player, &scene->_actor17, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1114, &R2_GLOBALS._player, &scene->_trooper, NULL); return true; } else { return SceneActor::startAction(action, event); @@ -725,21 +726,21 @@ bool Scene1100::Actor17::startAction(CursorType action, Event &event) { case R2_PHOTON_STUNNER: if (_visage == 1105) { R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { scene->_sceneMode = 1112; - scene->setAction(&scene->_sequenceManager1, scene, 1112, &R2_GLOBALS._player, &scene->_actor17, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1112, &R2_GLOBALS._player, &scene->_trooper, NULL); } else { scene->_sceneMode = 1115; - scene->setAction(&scene->_sequenceManager1, scene, 1115, &R2_GLOBALS._player, &scene->_actor17, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1115, &R2_GLOBALS._player, &scene->_trooper, 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); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + scene->setAction(&scene->_sequenceManager1, scene, 1113, &R2_GLOBALS._player, &scene->_trooper, NULL); } else { - scene->setAction(&scene->_sequenceManager1, scene, 1118, &R2_GLOBALS._player, &scene->_actor17, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1118, &R2_GLOBALS._player, &scene->_trooper, NULL); } return true; } else { @@ -752,7 +753,7 @@ bool Scene1100::Actor17::startAction(CursorType action, Event &event) { } } -bool Scene1100::Actor18::startAction(CursorType action, Event &event) { +bool Scene1100::Chief::startAction(CursorType action, Event &event) { Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; if ((action == CURSOR_TALK) && (!R2_GLOBALS.getFlag(54)) && (R2_GLOBALS.getFlag(52))) { @@ -814,7 +815,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.stop(); if (R2_GLOBALS._sceneManager._previousScene == 300) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) R2_GLOBALS._player._characterIndex = R2_QUINN; R2_GLOBALS._player._characterScene[1] = 1100; R2_GLOBALS._player._characterScene[2] = 1100; @@ -824,28 +825,28 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { 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); + _seeker.postInit(); + _seeker.hide(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _seeker.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); else - _actor16.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + _seeker.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); - _actor18.postInit(); - _actor18.setup(1113, 3, 1); - _actor18.setPosition(Common::Point(181, 125)); - _actor18.fixPriority(110); + _chief.postInit(); + _chief.setup(1113, 3, 1); + _chief.setPosition(Common::Point(181, 125)); + _chief.fixPriority(110); if (R2_GLOBALS.getFlag(54)) - _actor18.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); + _chief.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); else - _actor18.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL); + _chief.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); + _trooper.postInit(); + _trooper.setup(1105, 3, 1); + _trooper.setPosition(Common::Point(312, 165)); + _trooper._numFrames = 5; + _trooper.setDetails(1100, 22, 23, 24, 1, (SceneItem *) NULL); _actor1.postInit(); _actor1.setup(1512, 1, 1); @@ -907,66 +908,66 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); - _actor16.postInit(); + _seeker.postInit(); if (R2_GLOBALS.getFlag(52)) { - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setup(19, 7, 1); - _actor16.setup(29, 6, 1); + _seeker.setup(29, 6, 1); } else { R2_GLOBALS._player.setup(29, 7, 1); - _actor16.setup(19, 6, 1); + _seeker.setup(19, 6, 1); } R2_GLOBALS._player.setPosition(Common::Point(140, 124)); - _actor16.setPosition(Common::Point(237, 134)); + _seeker.setPosition(Common::Point(237, 134)); R2_GLOBALS._player.enableControl(); } else { - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setup(1107, 2, 1); - _actor16.setup(1107, 4, 1); + _seeker.setup(1107, 4, 1); R2_GLOBALS._player.setPosition(Common::Point(247, 169)); - _actor16.setPosition(Common::Point(213, 169)); + _seeker.setPosition(Common::Point(213, 169)); } else { R2_GLOBALS._player.setup(1107, 4, 1); - _actor16.setup(1107, 2, 1); + _seeker.setup(1107, 2, 1); R2_GLOBALS._player.setPosition(Common::Point(213, 169)); - _actor16.setPosition(Common::Point(247, 169)); + _seeker.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); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _seeker.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); else - _actor16.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + _seeker.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); - _actor18.postInit(); - _actor18.setup(1113, 3, 1); - _actor18.setPosition(Common::Point(181, 125)); - _actor18.fixPriority(110); + _chief.postInit(); + _chief.setup(1113, 3, 1); + _chief.setPosition(Common::Point(181, 125)); + _chief.fixPriority(110); if (R2_GLOBALS.getFlag(54)) - _actor18.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); + _chief.setDetails(1100, 4, -1, -1, 1, (SceneItem *) NULL); else - _actor18.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL); + _chief.setDetails(1100, 3, -1, -1, 1, (SceneItem *) NULL); if (!R2_GLOBALS.getFlag(52)) { - _actor17.postInit(); + _trooper.postInit(); if (R2_GLOBALS.getFlag(53)) - _actor17.setup(1106, 2, 4); + _trooper.setup(1106, 2, 4); else - _actor17.setup(1105, 4, 4); + _trooper.setup(1105, 4, 4); - _actor17.setPosition(Common::Point(17, 54)); - _actor17._numFrames = 5; + _trooper.setPosition(Common::Point(17, 54)); + _trooper._numFrames = 5; if (R2_GLOBALS.getFlag(53)) - _actor17.setDetails(1100, 28, -1, -1, 1, (SceneItem *) NULL); + _trooper.setDetails(1100, 28, -1, -1, 1, (SceneItem *) NULL); else - _actor17.setDetails(1100, 22, 23, 24, 1, (SceneItem *) NULL); + _trooper.setDetails(1100, 22, 23, 24, 1, (SceneItem *) NULL); - _actor17.fixPriority(200); + _trooper.fixPriority(200); } _actor1.postInit(); _actor1.setup(1512, 1, 1); @@ -1026,9 +1027,9 @@ void Scene1100::signal() { } break; case 4: - _actor18.postInit(); - _actor18.show(); - setAction(&_sequenceManager1, this, 1101, &_actor18, &_actor10, NULL); + _chief.postInit(); + _chief.show(); + setAction(&_sequenceManager1, this, 1101, &_chief, &_actor10, NULL); break; case 5: _actor13.postInit(); @@ -1054,12 +1055,12 @@ void Scene1100::signal() { } break; case 7: - setAction(&_sequenceManager1, this, 1103, &_actor18, &_actor10); + setAction(&_sequenceManager1, this, 1103, &_chief, &_actor10); break; case 8: R2_GLOBALS._player._effect = 0; _actor11.postInit(); - setAction(&_sequenceManager1, this, 1105, &R2_GLOBALS._player, &_actor10, &_actor11, &_actor18, NULL); + setAction(&_sequenceManager1, this, 1105, &R2_GLOBALS._player, &_actor10, &_actor11, &_chief, NULL); break; case 9: _object1.copySceneToBackground(); @@ -1090,8 +1091,8 @@ void Scene1100::signal() { // Really nothing break; case 13: - _actor17.postInit(); - R2_GLOBALS._scrollFollower = &_actor17; + _trooper.postInit(); + R2_GLOBALS._scrollFollower = &_trooper; _actor11.setup(1100, 2, 1); _actor11.setPosition(Common::Point(408, 121)); @@ -1099,7 +1100,7 @@ void Scene1100::signal() { _actor10.setup(1100, 3, 5); _actor10.setPosition(Common::Point(409, 121)); - setAction(&_sequenceManager1, this, 1104, &_actor17, NULL); + setAction(&_sequenceManager1, this, 1104, &_trooper, NULL); break; case 14: setAction(&_sequenceManager1, this, 1100, &_actor11, &_actor10, NULL); @@ -1115,14 +1116,14 @@ void Scene1100::signal() { break; case 21: { R2_GLOBALS._sound2.play(92); - _actor17.animate(ANIM_MODE_5, NULL); + _trooper.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); + setAction(&_sequenceManager1, this, 1110, &_seeker, &R2_GLOBALS._player, NULL); break; case 23: R2_GLOBALS._player.disableControl(); @@ -1136,46 +1137,49 @@ void Scene1100::signal() { break; case 25: R2_GLOBALS._player.disableControl(); - _stripManager._lookupList[9] = 1; - _stripManager._lookupList[10] = 1; - _stripManager._lookupList[11] = 1; + R2_GLOBALS._stripManager_lookupList[9] = 1; + R2_GLOBALS._stripManager_lookupList[10] = 1; + R2_GLOBALS._stripManager_lookupList[11] = 1; R2_GLOBALS._sound1.play(95); - setAction(&_sequenceManager1, this, 1111, &_actor17, &R2_GLOBALS._player, &_actor16, NULL); + setAction(&_sequenceManager1, this, 1111, &_trooper, &R2_GLOBALS._player, &_seeker, NULL); break; case 26: R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(302, this); break; case 27: R2_GLOBALS._player.disableControl(); - setAction(&_sequenceManager1, this, 1120, &_actor16, &R2_GLOBALS._player, NULL); + setAction(&_sequenceManager1, this, 1120, &_seeker, &R2_GLOBALS._player, NULL); break; case 28: R2_GLOBALS._player.disableControl(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(303, this); break; + case 29: + case 50: + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; + 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: + _trooper.setDetails(1100, 28, -1, -1, 3, (SceneItem *) NULL); + R2_GLOBALS._player.enableControl(CURSOR_USE); + R2_GLOBALS._player._canWalk = false; break; case 52: R2_GLOBALS._sound1.play(98); R2_GLOBALS.setFlag(52); R2_GLOBALS._player.disableControl(); _sceneMode = 1116; - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { setAction(&_sequenceManager1, this, 1116, &R2_GLOBALS._player, NULL); - _actor16.setAction(&_sequenceManager2, NULL, 1123, &_actor16, NULL); + _seeker.setAction(&_sequenceManager2, NULL, 1123, &_seeker, NULL); } else { setAction(&_sequenceManager1, this, 1124, &R2_GLOBALS._player, NULL); - _actor16.setAction(&_sequenceManager2, NULL, 1117, &_actor16, NULL); + _seeker.setAction(&_sequenceManager2, NULL, 1117, &_seeker, NULL); } break; case 53: @@ -1184,13 +1188,13 @@ void Scene1100::signal() { if (_field412 == 0) { R2_GLOBALS.setFlag(55); if (R2_GLOBALS.getFlag(55)) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _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) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _stripManager.start(317, this); else _stripManager.start(322, this); @@ -1200,10 +1204,10 @@ void Scene1100::signal() { } break; case 54: - if (_stripManager._field2E8 == 1) { + if (_stripManager._exitMode == 1) { R2_GLOBALS._player.disableControl(); _sceneMode = 1125; - setAction(&_sequenceManager1, this, 1125, &R2_GLOBALS._player, &_actor16, NULL); + setAction(&_sequenceManager1, this, 1125, &R2_GLOBALS._player, &_seeker, NULL); } else R2_GLOBALS._player.enableControl(CURSOR_TALK); break; @@ -1244,9 +1248,9 @@ void Scene1100::signal() { break; case 1116: R2_GLOBALS._player.enableControl(CURSOR_ARROW); - _stripManager._lookupList[9] = 1; - _stripManager._lookupList[10] = 1; - _stripManager._lookupList[11] = 1; + R2_GLOBALS._stripManager_lookupList[9] = 1; + R2_GLOBALS._stripManager_lookupList[10] = 1; + R2_GLOBALS._stripManager_lookupList[11] = 1; break; case 1125: { _sceneMode = 99; @@ -1295,7 +1299,7 @@ void Scene1100::dispatch() { } void Scene1100::saveCharacter(int characterIndex) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) R2_GLOBALS._sound1.fadeOut2(NULL); SceneExt::saveCharacter(characterIndex); } @@ -5973,7 +5977,8 @@ void Scene1337::subCF31D() { if ((_arrunkObj1337[1]._arr2[i]._field34 == 0) && (!subC2687(_arrunkObj1337[1]._arr3[0]._field34))) { subC340B(&_arrunkObj1337[1]._arr1[tmpVal], &_arrunkObj1337[1]._arr2[i]); found = true; - } + break; + } } } @@ -5983,8 +5988,10 @@ void Scene1337::subCF31D() { tmpVal = subC274D(1); int tmpVal2 = subC331B(1); - if ((tmpVal != -1) && ( tmpVal2 != -1)) + if ((tmpVal != -1) && ( tmpVal2 != -1)) { subC358E(&_arrunkObj1337[1]._arr1[tmpVal], tmpVal2); + found = true; + } if (found) return; @@ -7008,7 +7015,7 @@ void Scene1500::signal() { } break; case 24: - R2_GLOBALS._sceneManager.changeScene(300); + R2_GLOBALS._sceneManager.changeScene(1550); break; default: break; @@ -7169,21 +7176,22 @@ void Scene1530::dispatch() { } /*-------------------------------------------------------------------------- - * Scene 1550 - + * Scene 1550 - Spaceport * *--------------------------------------------------------------------------*/ -Scene1550::UnkObj15501::UnkObj15501() { - _fieldA4 = _fieldA6 = 0; + +Scene1550::Junk::Junk() { + _fieldA4 = _junkNumber = 0; } -void Scene1550::UnkObj15501::synchronize(Serializer &s) { +void Scene1550::Junk::synchronize(Serializer &s) { SceneActor::synchronize(s); s.syncAsSint16LE(_fieldA4); - s.syncAsSint16LE(_fieldA6); + s.syncAsSint16LE(_junkNumber); } -bool Scene1550::UnkObj15501::startAction(CursorType action, Event &event) { +bool Scene1550::Junk::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -7236,36 +7244,36 @@ bool Scene1550::UnkObj15501::startAction(CursorType action, Event &event) { } } -Scene1550::UnkObj15502::UnkObj15502() { - _fieldA4 = 0; +Scene1550::ShipComponent::ShipComponent() { + _componentId = 0; } -void Scene1550::UnkObj15502::synchronize(Serializer &s) { +void Scene1550::ShipComponent::synchronize(Serializer &s) { SceneActor::synchronize(s); - s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_componentId); } -bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { +bool Scene1550::ShipComponent::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: - if (_fieldA4 == 8) { + if (_componentId == 8) { scene->_field412 = 1; R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) 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); + // strcpy(scene->_shipComponents[7]._actorName, 'hatch'); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[7], NULL); return true; } return SceneActor::startAction(action, event); break; case CURSOR_LOOK: - if (_fieldA4 == 8) + if (_componentId == 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); @@ -7275,92 +7283,92 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { break; case R2_FUEL_CELL: scene->_field412 = 1; - if (_fieldA4 == 6) { + if (_componentId == 6) { R2_GLOBALS._player.disableControl(); - scene->_actor1.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) + scene->_landingStrut.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1574; else scene->_sceneMode = 1582; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[5], &scene->_actor1, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[5], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_GYROSCOPE: scene->_field412 = 1; - if (_fieldA4 == 3) { + if (_componentId == 3) { R2_GLOBALS._player.disableControl(); - scene->_actor1.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) + scene->_landingStrut.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1571; else scene->_sceneMode = 1581; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[2], &scene->_actor1, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[2], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_GUIDANCE_MODULE: scene->_field412 = 1; - if (_fieldA4 == 1) { + if (_componentId == 1) { R2_GLOBALS._player.disableControl(); - scene->_actor1.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) + scene->_landingStrut.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1569; else scene->_sceneMode = 1579; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[0], &scene->_actor1, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[0], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_THRUSTER_VALVE: scene->_field412 = 1; - if (_fieldA4 == 4) { + if (_componentId == 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); + scene->_landingStrut.postInit(); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[3], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_RADAR_MECHANISM: scene->_field412 = 1; - if (_fieldA4 == 2) { + if (_componentId == 2) { R2_GLOBALS._player.disableControl(); - scene->_actor1.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) + scene->_landingStrut.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1570; else scene->_sceneMode = 1580; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[1], &scene->_actor1, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[1], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_IGNITOR: scene->_field412 = 1; - if (_fieldA4 == 5) { + if (_componentId == 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); + scene->_landingStrut.postInit(); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[4], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_BATTERY: scene->_field412 = 1; - if (_fieldA4 == 7) { + if (_componentId == 7) { R2_GLOBALS._player.disableControl(); - scene->_actor1.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) + scene->_landingStrut.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1575; else scene->_sceneMode = 1583; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_arrUnkObj15502[6], &scene->_actor1, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[6], &scene->_landingStrut, NULL); return true; } return SceneActor::startAction(action, event); @@ -7371,11 +7379,12 @@ bool Scene1550::UnkObj15502::startAction(CursorType action, Event &event) { } } -void Scene1550::UnkObj15502::subA5CDF(int strip) { - _fieldA4 = strip; +void Scene1550::ShipComponent::setupShipComponent(int componentId) { + _componentId = componentId; postInit(); - setup(1517, _fieldA4, 1); - switch (_fieldA4 - 1) { + setup(1517, _componentId, 1); + + switch (_componentId - 1) { case 0: if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) == 0) setFrame(5); @@ -7510,19 +7519,16 @@ void Scene1550::UnkArea1550::process(Event &event) { 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); + R2_GLOBALS._events.setCursor(_savedCursorNum); } } 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); + R2_GLOBALS._events.setCursor(_savedCursorNum); remove(); } } @@ -7570,26 +7576,30 @@ void Scene1550::UnkArea1550::proc13(int resNum, int lookLineNum, int talkLineNum _areaActor.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); } -bool Scene1550::Hotspot1::startAction(CursorType action, Event &event) { +bool Scene1550::WorkingShip::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)); + assert ((R2_GLOBALS._player._characterIndex == R2_QUINN) || (R2_GLOBALS._player._characterIndex == R2_SEEKER)); // 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]); + warning("Location: %d/%d - %d", + R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x, + R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y, + scene1550AreaMap[(R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y * 30)] + + R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x); return SceneHotspot::startAction(action, event); } -bool Scene1550::Actor6::startAction(CursorType action, Event &event) { +bool Scene1550::Wreckage::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); } -bool Scene1550::Actor7::startAction(CursorType action, Event &event) { +bool Scene1550::Companion::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); @@ -7607,7 +7617,7 @@ bool Scene1550::Actor8::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; scene->_field412 = 1; - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1552; else scene->_sceneMode = 1588; @@ -7624,7 +7634,7 @@ bool Scene1550::Actor9::startAction(CursorType action, Event &event) { scene->_sceneMode = 50; R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_stripManager.start(518, scene); else scene->_stripManager.start(520, scene); @@ -7645,7 +7655,7 @@ bool Scene1550::Actor10::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1555; else scene->_sceneMode = 1589; @@ -7661,7 +7671,7 @@ bool Scene1550::Actor11::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_field412 = 1; - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1586; else scene->_sceneMode = 1587; @@ -7676,7 +7686,7 @@ bool Scene1550::Actor12::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1585; scene->setAction(&scene->_sequenceManager1, scene, 1585, &R2_GLOBALS._player, NULL); @@ -7756,19 +7766,22 @@ void Scene1550::synchronize(Serializer &s) { } void Scene1550::postInit(SceneObjectList *OwnerList) { - if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 9) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 11)) + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 9) && + (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 11)) + // Exiting the intact spaceship loadScene(1234); else + // Normal scene entry loadScene(1550); + SceneExt::postInit(); 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); + R2_GLOBALS.setFlag(16); if ((R2_GLOBALS._player._characterScene[1] != 1550) && (R2_GLOBALS._player._characterScene[1] != 1580)) { R2_GLOBALS._player._characterScene[1] = 1550; @@ -7783,14 +7796,15 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player._effect = 6; - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) 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)) + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 9) && + (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 11)) R2_GLOBALS._player.setPosition(Common::Point(157, 135)); else R2_GLOBALS._player.setPosition(Common::Point(160, 100)); @@ -7799,7 +7813,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.disableControl(); _field414 = 0; - _actor7.changeZoom(-1); + _companion.changeZoom(-1); R2_GLOBALS._player.changeZoom(-1); switch (R2_GLOBALS._sceneManager._previousScene) { @@ -7814,21 +7828,22 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(105); break; case 1580: + // Leaving intact ship 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(); - if (R2_GLOBALS._player._characterIndex == 1) + _landingStrut.postInit(); + _shipComponents[7].setupShipComponent(8); + _shipComponents[7].hide(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _sceneMode = 1577; else _sceneMode = 1578; - setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_actor1, &_arrUnkObj15502[7], NULL); + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_landingStrut, &_shipComponents[7], NULL); R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550; } else { R2_GLOBALS._player.enableControl(); @@ -7838,29 +7853,29 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { break; } - subA2B2F(); + enterArea(); - _item1.setDetails(16, 1550, 10, -1, -1); + _shipHull.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._sceneObjects->contains(&_companion)) + _companion.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) - _actor7.setVisage(1505); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _companion.setVisage(1505); else - _actor7.setVisage(1500); + _companion.setVisage(1500); - _actor7.changeZoom(77); - _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + _companion.changeZoom(77); + _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); assert(_field419 >= 1550); R2_GLOBALS._walkRegions.enableRegion(k5A750[_field419 - 1550]); - setAction(&_sequenceManager1, this, 1590, &_actor7, NULL); + setAction(&_sequenceManager1, this, 1590, &_companion, NULL); } else if ((_sceneMode != 1577) && (_sceneMode != 1578)) R2_GLOBALS._player.enableControl(); } @@ -7876,7 +7891,7 @@ void Scene1550::signal() { case 7: _field412 = 0; R2_GLOBALS._v56AAB = 0; - R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_WALK); break; case 20: // No break on purpose @@ -7917,14 +7932,14 @@ void Scene1550::signal() { break; case 40: { _sceneMode = 41; - Common::Point pt(_arrUnkObj15501[0]._position.x, _arrUnkObj15501[0]._position.y + 20); + Common::Point pt(_junk[0]._position.x, _junk[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) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setup(1502, 8, 1); } else { R2_GLOBALS._player.changeZoom(R2_GLOBALS._player._percent + 14); @@ -7932,37 +7947,42 @@ void Scene1550::signal() { } R2_GLOBALS._player.animate(ANIM_MODE_5, this); break; - case 42: + + 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; + int junkRegionIndex = R2_GLOBALS._scene1550JunkLocations[_junk[0]._junkNumber + 3]; + R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[junkRegionIndex]); + + switch (_junk[0]._frame) { case 1: - R2_INVENTORY.setObjectScene(17, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_JOYSTICK, R2_GLOBALS._player._characterIndex); break; case 2: - R2_INVENTORY.setObjectScene(22, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_FUEL_CELL, R2_GLOBALS._player._characterIndex); break; case 3: - R2_INVENTORY.setObjectScene(25, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, R2_GLOBALS._player._characterIndex); break; case 4: - R2_INVENTORY.setObjectScene(45, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_RADAR_MECHANISM, R2_GLOBALS._player._characterIndex); break; case 5: - R2_INVENTORY.setObjectScene(28, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_BATTERY, R2_GLOBALS._player._characterIndex); + break; + case 6: + R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, R2_GLOBALS._player._characterIndex); break; default: break; } - _arrUnkObj15501[0].remove(); + + _junk[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._scene1550JunkLocations[_junk[0]._junkNumber + 2] = 0; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) R2_GLOBALS._player.setVisage(1500); else { R2_GLOBALS._player.changeZoom(-1); @@ -7976,29 +7996,29 @@ void Scene1550::signal() { warning("STUB: sub_1D227()"); ++_sceneMode; setAction(&_sequenceManager1, this, 1591, &R2_GLOBALS._player, NULL); - if (g_globals->_sceneObjects->contains(&_actor7)) + if (g_globals->_sceneObjects->contains(&_companion)) signal(); else { - _actor7.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) - _actor7.setVisage(1505); + _companion.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + _companion.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); + _companion.setVisage(1500); + _companion.changeZoom(77); + _companion.setAction(&_sequenceManager2, this, 1590, &_companion, NULL); + _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); } break; case 51: ++_sceneMode; break; case 52: - _actor7.changeZoom(-1); + _companion.changeZoom(-1); _sceneMode = 1592; - if (R2_GLOBALS._player._characterIndex == 1) - setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_actor7, &_arrUnkObj15501[0], &_actor9, NULL); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_companion, &_junk[0], &_actor9, NULL); else - setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_actor7, &_arrUnkObj15501[0], &_actor9, NULL); + setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_companion, &_junk[0], &_actor9, NULL); break; case 61: R2_GLOBALS._player.enableControl(CURSOR_USE); @@ -8013,9 +8033,8 @@ void Scene1550::signal() { } break; case 70: - R2_GLOBALS._v565EC[2] = R2_GLOBALS._v565EC[1]; - R2_GLOBALS._v565EC[4] = R2_GLOBALS._v565EC[3]; - R2_GLOBALS._v565EC[0] = 1; + R2_GLOBALS._s1550PlayerArea[R2_SEEKER] = R2_GLOBALS._s1550PlayerArea[R2_QUINN]; + //R2_GLOBALS._s1550PlayerAreas[0] = 1; _sceneMode = 60; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); _stripManager.start(500, this); @@ -8026,13 +8045,13 @@ void Scene1550::signal() { R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); if (R2_GLOBALS._v565AE >= 3) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _stripManager.start(572, this); else _stripManager.start(573, this); } else { ++R2_GLOBALS._v565AE; - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _stripManager.start(499 + R2_GLOBALS._v565AE, this); else _stripManager.start(502 + R2_GLOBALS._v565AE, this); @@ -8042,13 +8061,13 @@ void Scene1550::signal() { R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); if (R2_GLOBALS._v565AE >= 4) { - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _stripManager.start(572, this); else _stripManager.start(573, this); } else { ++R2_GLOBALS._v565AE; - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) _stripManager.start(563 + R2_GLOBALS._v565AE, this); else _stripManager.start(567 + R2_GLOBALS._v565AE, this); @@ -8112,7 +8131,7 @@ void Scene1550::signal() { // No break on purpose case 1579: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, 0); R2_GLOBALS._player.enableControl(); break; @@ -8120,7 +8139,7 @@ void Scene1550::signal() { // No break on purpose case 1580: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_RADAR_MECHANISM, 0); R2_GLOBALS._player.enableControl(); break; @@ -8128,19 +8147,19 @@ void Scene1550::signal() { // No break on purpose case 1581: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_GYROSCOPE, 0); R2_GLOBALS._player.enableControl(); break; case 1572: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_THRUSTER_VALVE, 0); R2_GLOBALS._player.enableControl(); break; case 1573: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_IGNITOR, 0); R2_GLOBALS._player.enableControl(); break; @@ -8148,7 +8167,7 @@ void Scene1550::signal() { // No break on purpose case 1582: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_FUEL_CELL, 0); R2_GLOBALS._player.enableControl(); break; @@ -8156,7 +8175,7 @@ void Scene1550::signal() { // No break on purpose case 1583: _field412 = 0; - _actor1.remove(); + _landingStrut.remove(); R2_INVENTORY.setObjectScene(R2_BATTERY, 0); R2_GLOBALS._player.enableControl(); break; @@ -8170,7 +8189,7 @@ void Scene1550::signal() { // No break on purpose case 1578: _sceneMode = 0; - _actor1.remove(); + _landingStrut.remove(); _field412 = 0; R2_GLOBALS._player.fixPriority(-1); R2_GLOBALS._player.enableControl(); @@ -8183,19 +8202,17 @@ void Scene1550::signal() { // No break on purpose case 1587: R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, R2_GLOBALS._player._characterIndex); - _actor1.remove(); + _landingStrut.remove(); _field412 = 0; R2_GLOBALS._player.enableControl(); break; case 1592: _actor9.remove(); 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]; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_GLOBALS._s1550PlayerArea[R2_SEEKER] = R2_GLOBALS._s1550PlayerArea[R2_QUINN]; } else { - R2_GLOBALS._v565EC[1] = R2_GLOBALS._v565EC[2]; - R2_GLOBALS._v565EC[3] = R2_GLOBALS._v565EC[4]; + R2_GLOBALS._s1550PlayerArea[R2_QUINN] = R2_GLOBALS._s1550PlayerArea[R2_SEEKER]; } R2_GLOBALS._player.enableControl(); break; @@ -8227,11 +8244,11 @@ 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)); + assert ((R2_GLOBALS._player._characterIndex == R2_QUINN) || (R2_GLOBALS._player._characterIndex == R2_SEEKER)); - if ((R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] == 15) && (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] == 16)) { + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 15) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 16)) { R2_GLOBALS._player._shade = 0; - // Original game contains a switch based on an uninitialised variable. + // Original game contains a switch based on an uninitialized variable. // Until we understand what should really happen there, this code is unused on purpose int missingVariable = 0; switch (missingVariable) { @@ -8263,12 +8280,13 @@ void Scene1550::dispatch() { case 0: // No break on purpose case 5: + // Exiting the top of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 1; _field412 = 1; - --R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; + --R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y; - subA2B2F(); + enterArea(); 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) { @@ -8286,12 +8304,13 @@ void Scene1550::dispatch() { } break; case 1: + // Exiting the bottom of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 3; _field412 = 1; - ++R2_GLOBALS._v565EC[2 + R2_GLOBALS._player._characterIndex]; + ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y; - subA2B2F(); + enterArea(); 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) { @@ -8309,14 +8328,15 @@ void Scene1550::dispatch() { } break; case 2: + // Exiting the right of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 5; _field412 = 1; - ++R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]; + ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x; - subA2B2F(); + enterArea(); - 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._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 9) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 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); @@ -8336,16 +8356,20 @@ void Scene1550::dispatch() { } break; case 3: + // Exiting to the left of the screen 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._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x; + + enterArea(); + + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 24) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 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)) { + } else if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 9) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 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); @@ -8370,7 +8394,7 @@ void Scene1550::dispatch() { } void Scene1550::saveCharacter(int characterIndex) { - if (R2_GLOBALS._player._characterIndex == 3) + if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) R2_GLOBALS._sound1.fadeOut2(NULL); SceneExt::saveCharacter(characterIndex); @@ -8560,7 +8584,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { } -void Scene1550::subA2B2F() { +void Scene1550::enterArea() { Rect tmpRect; _field419 = 0; _field415 = 0; @@ -8568,19 +8592,19 @@ void Scene1550::subA2B2F() { tmpRect = R2_GLOBALS._v5589E; _actor14.remove(); - _actor17.remove(); - _actor15.remove(); - _actor19.remove(); + _westWall.remove(); + _northWall.remove(); + _southWall.remove(); _actor16.remove(); - _actor18.remove(); + _eastWall.remove(); for (int i = 0; i < 8; ++i) - _arrUnkObj15501[i].remove(); + _junk[i].remove(); - _actor6.remove(); + _wreckage.remove(); for (int i = 0; i < 8; ++i) - _arrUnkObj15502[i].remove(); + _shipComponents[i].remove(); _actor8.remove(); _actor9.remove(); @@ -8589,18 +8613,19 @@ void Scene1550::subA2B2F() { _actor11.remove(); if ((_sceneMode != 1577) && (_sceneMode != 1578)) - _actor1.remove(); + _landingStrut.remove(); _actor2.remove(); - _actor7.remove(); + _companion.remove(); _actor13.remove(); _actor5.remove(); _actor12.remove(); _actor4.remove(); - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2]) { + // Set up of special walk regions for certain areas + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y) { case 0: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 3: R2_GLOBALS._walkRegions.load(1554); _field419 = 1554; @@ -8616,7 +8641,7 @@ void Scene1550::subA2B2F() { 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._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 23) || (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x)) { if (!R2_GLOBALS.getFlag(16)) { R2_GLOBALS._walkRegions.load(1559); _field419 = 1559; @@ -8624,7 +8649,7 @@ void Scene1550::subA2B2F() { } break; case 7: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 10: R2_GLOBALS._walkRegions.load(1555); _field419 = 1555; @@ -8638,7 +8663,7 @@ void Scene1550::subA2B2F() { } break; case 11: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 24: R2_GLOBALS._walkRegions.load(1558); _field419 = 1558; @@ -8652,7 +8677,7 @@ void Scene1550::subA2B2F() { } break; case 16: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 2: R2_GLOBALS._walkRegions.load(1552); _field419 = 1552; @@ -8675,12 +8700,12 @@ void Scene1550::subA2B2F() { int varA = 0; if (!R2_GLOBALS.getFlag(16)) { - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] - 2) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y - 2) { case 0: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] - 22) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 22) { case 0: varA = 1553; - _actor15.subA4D14(6, 0); + _northWall.subA4D14(6, 0); break; case 1: // No break on purpose @@ -8693,7 +8718,7 @@ void Scene1550::subA2B2F() { break; case 5: varA = 1553; - _actor15.subA4D14(6, 0); + _northWall.subA4D14(6, 0); break; default: break; @@ -8702,14 +8727,14 @@ void Scene1550::subA2B2F() { case 1: // No break on purpose case 2: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] - 21) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) { case 0: varA = 1550; - _actor15.subA4D14(9, 0); + _northWall.subA4D14(9, 0); break; case 1: varA = 1552; - _actor15.subA4D14(10, 0); + _northWall.subA4D14(10, 0); break; case 2: // No break on purpose @@ -8722,25 +8747,25 @@ void Scene1550::subA2B2F() { break; case 6: varA = 1552; - _actor15.subA4D14(7, 0); + _northWall.subA4D14(7, 0); break; case 7: varA = 1550; - _actor15.subA4D14(8, 0); + _northWall.subA4D14(8, 0); break; default: break; } break; case 3: - switch (R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex] - 21) { + switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) { case 0: varA = 1550; - _actor15.subA4D14(4, 0); + _northWall.subA4D14(4, 0); break; case 1: varA = 1550; - _actor15.subA4D14(3, 0); + _northWall.subA4D14(3, 0); break; case 2: // No break on purpose @@ -8753,11 +8778,11 @@ void Scene1550::subA2B2F() { break; case 6: varA = 1550; - _actor15.subA4D14(2, 0); + _northWall.subA4D14(2, 0); break; case 7: varA = 1550; - _actor15.subA4D14(1, 0); + _northWall.subA4D14(1, 0); break; default: break; @@ -8766,21 +8791,22 @@ void Scene1550::subA2B2F() { 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)) { + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y > 0) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x <= 29) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x >= 20) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y > 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) { + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 9) && + (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 11)) { + if (_screenNumber != 1234) { R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; loadScene(1234); R2_GLOBALS._sceneManager._hasPalette = false; _field414 = 0; } } else { - if (R2_GLOBALS._sceneManager._sceneNumber == 1234) { + if (_screenNumber == 1234) { R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; loadScene(1550); R2_GLOBALS._sceneManager._hasPalette = false; @@ -8828,71 +8854,75 @@ void Scene1550::subA2B2F() { } } - switch (k5A4D6[(R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex + 2] * 30)] + R2_GLOBALS._v565EC[R2_GLOBALS._player._characterIndex]) { + // Scene setup dependent on the type of cell specified in the scene map + switch (scene1550AreaMap[(R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y * 30) + + R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x]) { case 0: + // Standard cell if (_field419 == 0) { R2_GLOBALS._walkRegions.load(1550); _field419 = 1550; } break; case 1: + // North end of the spaceport if (_field419 == 0) { R2_GLOBALS._walkRegions.load(1560); _field419 = 1560; } _actor14.subA4D14(2, 1); - _actor15.subA4D14(1, 3); + _northWall.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); + _westWall.subA4D14(2, 2); + _northWall.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); + _northWall.subA4D14(1, 3); _actor16.subA4D14(2, 5); - _actor18.subA4D14(2, 6); + _eastWall.subA4D14(2, 6); break; case 4: R2_GLOBALS._walkRegions.load(1563); _field419 = 1563; - _actor15.subA4D14(2, 3); + _northWall.subA4D14(2, 3); break; case 5: R2_GLOBALS._walkRegions.load(1564); _field419 = 1564; - _actor19.subA4D14(2, 4); + _southWall.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); + _westWall.subA4D14(1, 2); + _northWall.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); + _westWall.subA4D14(1, 2); + _northWall.subA4D14(2, 4); break; case 8: R2_GLOBALS._walkRegions.load(1567); _field419 = 1567; - _actor17.subA4D14(5, 2); + _westWall.subA4D14(5, 2); break; case 9: R2_GLOBALS._walkRegions.load(1568); _field419 = 1568; - _actor17.subA4D14(4, 2); + _westWall.subA4D14(4, 2); break; case 10: R2_GLOBALS._walkRegions.load(1569); @@ -8903,56 +8933,57 @@ void Scene1550::subA2B2F() { R2_GLOBALS._walkRegions.load(1570); _field419 = 1570; _actor14.subA4D14(1, 1); - _actor17.subA4D14(1, 2); + _westWall.subA4D14(1, 2); break; case 12: R2_GLOBALS._walkRegions.load(1571); _field419 = 1571; _actor16.subA4D14(1, 5); - _actor18.subA4D14(1, 6); + _eastWall.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); + _westWall.subA4D14(1, 2); + _southWall.subA4D14(1, 4); break; case 14: R2_GLOBALS._walkRegions.load(1573); _field419 = 1573; - _actor19.subA4D14(1, 4); + _southWall.subA4D14(1, 4); _actor16.subA4D14(1, 5); - _actor18.subA4D14(1, 6); + _eastWall.subA4D14(1, 6); break; case 15: + // South wall R2_GLOBALS._walkRegions.load(1574); _field419 = 1574; - _actor19.subA4D14(1, 4); + _southWall.subA4D14(1, 4); break; case 16: R2_GLOBALS._walkRegions.load(1570); _field419 = 1570; _actor14.subA4D14(2, 1); - _actor17.subA4D14(2, 2); + _westWall.subA4D14(2, 2); break; case 17: R2_GLOBALS._walkRegions.load(1570); _field419 = 1570; _actor14.subA4D14(2, 1); - _actor17.subA4D14(3, 2); + _westWall.subA4D14(3, 2); break; case 18: R2_GLOBALS._walkRegions.load(1571); _field419 = 1571; _actor16.subA4D14(2, 5); - _actor18.subA4D14(2, 6); + _eastWall.subA4D14(2, 6); break; case 19: R2_GLOBALS._walkRegions.load(1571); _field419 = 1571; _actor16.subA4D14(2, 5); - _actor18.subA4D14(3, 6); + _eastWall.subA4D14(3, 6); break; default: break; @@ -8960,24 +8991,27 @@ 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]; - _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); + for (int i = 0; i < 127 * 4; i += 4) { + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == R2_GLOBALS._scene1550JunkLocations[i]) && + (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == R2_GLOBALS._scene1550JunkLocations[i + 1]) && + (R2_GLOBALS._scene1550JunkLocations[i + 2] != 0)) { + tmpIdx = R2_GLOBALS._scene1550JunkLocations[i + 3]; + _junk[di].postInit(); + _junk[di]._effect = 6; + _junk[di]._shade = 0; + _junk[di]._fieldA4 = tmpIdx; + _junk[di]._junkNumber = i; + _junk[di].setDetails(1550, 62, -1, 63, 2, (SceneItem *) NULL); + if (R2_GLOBALS._scene1550JunkLocations[i + 2] == 41) { + _junk[di].changeZoom(-1); + _junk[di].setPosition(Common::Point(150, 70)); + _junk[di].setup(1562, 1, 1); + + R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[2]); + R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[3]); + R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[6]); + R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[7]); + if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1550) { _actor9.postInit(); _actor9.setup(1562, 3, 1); @@ -8986,35 +9020,36 @@ void Scene1550::subA2B2F() { _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); + if (R2_GLOBALS._scene1550JunkLocations[i + 2] > 40) { + _junk[di].changeZoom(100); + _junk[di].setup(1561, 1, R2_GLOBALS._scene1550JunkLocations[i + 2] - 40); } else { - _arrUnkObj15501[di].changeZoom(-1); - _arrUnkObj15501[di].setup(1552, ((k562CC[i + 2] - 1) / 5) + 1, ((k562CC[i + 2] - 1) % 5) + 1); + _junk[di].changeZoom(-1); + _junk[di].setup(1552, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) / 5) + 1, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) % 5) + 1); } - _arrUnkObj15501[di].setPosition(Common::Point(k5A72E[tmpIdx], k5A73F[tmpIdx])); - if (k5A78A[tmpIdx] != 0) - R2_GLOBALS._walkRegions.enableRegion(k5A78A[tmpIdx]); + _junk[di].setPosition(Common::Point(k5A72E[tmpIdx], k5A73F[tmpIdx])); + if (scene1550JunkRegions[tmpIdx] != 0) + R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[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])) { + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == k5A79B[i]) + && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 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); + _landingStrut.postInit(); + if (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 3) + _landingStrut.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); + _landingStrut.setup(1555, 1, 1); + _landingStrut.setPosition(Common::Point(150, 100)); + _landingStrut.fixPriority(92); + _landingStrut.setDetails(1550, 73, -1, -1, 2, (SceneItem *) NULL); } break; case 1: @@ -9053,20 +9088,20 @@ void Scene1550::subA2B2F() { _actor4.setPosition(Common::Point(172, 48)); _actor4.fixPriority(169); - R2_GLOBALS._walkRegions.enableRegion(k5A78A[15]); + R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[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); + _wreckage.postInit(); + _wreckage.setup(1550, 1, 1); + _wreckage.setPosition(Common::Point(259, 55)); + _wreckage.fixPriority(133); + _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _landingStrut.postInit(); + _landingStrut.setup(1550, 1, 2); + _landingStrut.setPosition(Common::Point(259, 133)); + _landingStrut.fixPriority(105); + _landingStrut.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 1550) { _actor10.postInit(); _actor10.setup(1550, 7, 2); @@ -9076,16 +9111,16 @@ void Scene1550::subA2B2F() { } 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); + _wreckage.postInit(); + _wreckage.setup(1550, 1, 4); + _wreckage.setPosition(Common::Point(76, 131)); + _wreckage.fixPriority(10); + _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _landingStrut.postInit(); + _landingStrut.setup(1550, 1, 3); + _landingStrut.setPosition(Common::Point(76, 64)); + _landingStrut.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1550) { _actor11.postInit(); _actor11.setup(1504, 4, 1); @@ -9104,48 +9139,48 @@ void Scene1550::subA2B2F() { } 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); + _wreckage.postInit(); + _wreckage.setup(1550, 2, 4); + _wreckage.setPosition(Common::Point(243, 131)); + _wreckage.fixPriority(10); + _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _landingStrut.postInit(); + _landingStrut.setup(1550, 2, 3); + _landingStrut.setPosition(Common::Point(243, 64)); + _landingStrut.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); + _wreckage.postInit(); + _wreckage.setup(1550, 2, 1); + _wreckage.setPosition(Common::Point(60, 55)); + _wreckage.fixPriority(133); + _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + + _landingStrut.postInit(); + _landingStrut.setup(1550, 2, 2); + _landingStrut.setPosition(Common::Point(60, 133)); + _landingStrut.fixPriority(106); + _landingStrut.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); + _wreckage.postInit(); + _wreckage.setup(1550, 3, 1); + _wreckage.setPosition(Common::Point(281, 132)); + _wreckage.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); + _wreckage.postInit(); + _wreckage.setup(1550, 3, 2); + _wreckage.setPosition(Common::Point(57, 96)); + _wreckage.fixPriority(70); + _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _landingStrut.postInit(); + _landingStrut.setup(1550, 3, 3); + _landingStrut.setPosition(Common::Point(145, 88)); + _landingStrut.fixPriority(55); + _landingStrut.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); _actor2.postInit(); _actor2.setup(1550, 3, 4); @@ -9159,17 +9194,17 @@ void Scene1550::subA2B2F() { _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); + _wreckage.postInit(); + _wreckage.setup(1550, 4, 2); + _wreckage.setPosition(Common::Point(262, 96)); + _wreckage.fixPriority(70); + _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _landingStrut.postInit(); + _landingStrut.setup(1550, 4, 3); + _landingStrut.setPosition(Common::Point(174, 88)); + _landingStrut.fixPriority(55); + _landingStrut.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); _actor2.postInit(); _actor2.setup(1550, 4, 4); @@ -9183,55 +9218,56 @@ void Scene1550::subA2B2F() { _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); + _wreckage.postInit(); + _wreckage.setup(1550, 4, 1); + _wreckage.setPosition(Common::Point(38, 132)); + _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); break; case 11: - _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); + // Intact ship + _shipComponents[7].setupShipComponent(8); + _shipComponents[0].setupShipComponent(1); + _shipComponents[1].setupShipComponent(2); + _shipComponents[2].setupShipComponent(3); + _shipComponents[3].setupShipComponent(4); + _shipComponents[4].setupShipComponent(5); + _shipComponents[5].setupShipComponent(6); + _shipComponents[6].setupShipComponent(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); + if (R2_GLOBALS._s1550PlayerArea[R2_QUINN] == R2_GLOBALS._s1550PlayerArea[R2_SEEKER]) { + _companion.postInit(); + _companion._effect = 7; + _companion.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) { + _companion.setPosition(Common::Point(k5A72E[k5A76D[_field419 - 1550]], k5A73F[k5A76D[_field419 - 1550]] + 8)); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS._player._characterScene[2] == 1580) { - _actor7.setup(1516, 3, 17); - _actor7.setPosition(Common::Point(272, 94)); - _actor7.fixPriority(91); - _actor7.changeZoom(100); - _actor7.setDetails(1550, -1, -1, -1, 5, &_arrUnkObj15502[7]); + _companion.setup(1516, 3, 17); + _companion.setPosition(Common::Point(272, 94)); + _companion.fixPriority(91); + _companion.changeZoom(100); + _companion.setDetails(1550, -1, -1, -1, 5, &_shipComponents[7]); } else { - _actor7.setup(1505, 6, 1); - _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + _companion.setup(1505, 6, 1); + _companion.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); - _actor7.setDetails(1550, -1, -1, -1, 5, &_arrUnkObj15502[7]); + _companion.setup(1516, 2, 14); + _companion.setPosition(Common::Point(276, 97)); + _companion.fixPriority(91); + _companion.changeZoom(100); + _companion.setDetails(1550, -1, -1, -1, 5, &_shipComponents[7]); } else { - _actor7.setup(1500, 6, 1); - _actor7.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); + _companion.setup(1500, 6, 1); + _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); } } } @@ -9636,7 +9672,7 @@ bool Scene1580::Hotspot1::startAction(CursorType action, Event &event) { Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; if (action == R2_JOYSTICK) { - R2_INVENTORY.setObjectScene(26, 1580); + R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1580); R2_GLOBALS._sceneItems.remove(&scene->_item1); scene->_actor2.postInit(); scene->_actor2.setup(1580, 1, 4); @@ -9655,7 +9691,7 @@ bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) { Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; if (action == R2_DIAGNOSTICS_DISPLAY) { - R2_INVENTORY.setObjectScene(28, 1580); + R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, 1580); R2_GLOBALS._player.disableControl(); R2_GLOBALS._sceneItems.remove(&scene->_item2); @@ -9664,7 +9700,7 @@ bool Scene1580::Hotspot2::startAction(CursorType action, Event &event) { scene->_actor3.setPosition(Common::Point(124, 108)); scene->_actor3.fixPriority(10); - if (R2_INVENTORY.getObjectScene(26) == 1580) + if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1580) scene->_actor3.setDetails(1550, 14, -1, -1, 5, &scene->_actor2); else scene->_actor3.setDetails(1550, 14, -1, -1, 2, (SceneItem *)NULL); @@ -9684,15 +9720,15 @@ bool Scene1580::Hotspot2::startAction(CursorType action, Event &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)) { + if ( (action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1580) + && (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) == 0) && (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) == 0) + && (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) == 0) && (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 0) + && (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 0) && (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 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) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_stripManager.start(536, scene); else scene->_stripManager.start(537, scene); @@ -9704,10 +9740,10 @@ bool Scene1580::Actor2::startAction(CursorType action, Event &event) { } bool Scene1580::Actor3::startAction(CursorType action, Event &event) { - if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(51) == 1580)) { + if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(R2_BROKEN_DISPLAY) == 1580)) { Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene; - R2_INVENTORY.setObjectScene(51, R2_GLOBALS._player._characterIndex); + R2_INVENTORY.setObjectScene(R2_BROKEN_DISPLAY, R2_GLOBALS._player._characterIndex); scene->_item2.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 2, NULL); scene->_actor1.remove(); remove(); @@ -9750,8 +9786,8 @@ bool Scene1580::Actor6::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (R2_GLOBALS._player._characterIndex == 1) { - R2_INVENTORY.setObjectScene(23, 1); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_INVENTORY.setObjectScene(R2_THRUSTER_VALVE, 1); remove(); return true; } @@ -9782,8 +9818,8 @@ bool Scene1580::Actor7::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (R2_GLOBALS._player._characterIndex == 1) { - R2_INVENTORY.setObjectScene(27, 1); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + R2_INVENTORY.setObjectScene(R2_IGNITOR, 1); remove(); return true; } @@ -9823,7 +9859,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _sceneMode = 0; R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(26) == 1580) { + if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1580) { _actor2.postInit(); _actor2.setup(1580, 1, 4); _actor2.setPosition(Common::Point(159, 163)); @@ -9832,7 +9868,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _item1.setDetails(Rect(141, 148, 179, 167), 1550, 79, -1, -1, 1, NULL); } - if (R2_INVENTORY.getObjectScene(51) == 1580) { + if (R2_INVENTORY.getObjectScene(R2_BROKEN_DISPLAY) == 1580) { _actor3.postInit(); _actor3.setup(1580, 1, 1); _actor3.setPosition(Common::Point(124, 108)); @@ -9843,7 +9879,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor1.setup(1580, 1, 3); _actor1.setPosition(Common::Point(124, 96)); _actor1.fixPriority(20); - } else if (R2_INVENTORY.getObjectScene(28) == 1580) { + } else if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1580) { _actor3.postInit(); _actor3.setup(1580, 1, 1); _actor3.setPosition(Common::Point(124, 108)); @@ -9861,7 +9897,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { } _actor4.postInit(); - if (R2_INVENTORY.getObjectScene(58) == 0) { + if (R2_GLOBALS.getFlag(58) == 0) { _actor4.setup(1580, 5, 1); _actor4.setDetails(1550, 80, -1, -1, 1, (SceneItem *) NULL); } else { @@ -9876,8 +9912,8 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor5.setPosition(Common::Point(291, 147)); _actor5.fixPriority(100); _actor5.setDetails(1550, 81, -1, -1, 1, (SceneItem *) NULL); - - if (R2_INVENTORY.getObjectScene(23) == 1580) { + + if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 1580) { _actor6.postInit(); _actor6.setup(1580, 6, 2); _actor6.setPosition(Common::Point(222, 108)); @@ -9885,7 +9921,7 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _actor6.setDetails(1550, 32, -1, 34, 1, (SceneItem *) NULL); } - if (R2_INVENTORY.getObjectScene(27) == 1580) { + if (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 1580) { _actor7.postInit(); _actor7.setup(1580, 6, 1); _actor7.setPosition(Common::Point(195, 108)); @@ -9894,11 +9930,9 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { } 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() { @@ -9910,49 +9944,49 @@ void Scene1580::signal() { _actor1.setup(1580, 1, 2); _actor1.setPosition(Common::Point(124, 94)); - if (R2_INVENTORY.getObjectScene(18) != 0) { + if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) != 0) { _arrActor[0].postInit(); _arrActor[0].setup(1580, 2, 1); _arrActor[0].setPosition(Common::Point(138, 56)); } - if (R2_INVENTORY.getObjectScene(25) != 0) { + if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) != 0) { _arrActor[1].postInit(); _arrActor[1].setup(1580, 2, 2); _arrActor[1].setPosition(Common::Point(140, 66)); } - if (R2_INVENTORY.getObjectScene(27) != 0) { + if (R2_INVENTORY.getObjectScene(R2_IGNITOR) != 0) { _arrActor[2].postInit(); _arrActor[2].setup(1580, 2, 3); _arrActor[2].setPosition(Common::Point(142, 85)); } - if (R2_INVENTORY.getObjectScene(23) != 0) { + if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) != 0) { _arrActor[3].postInit(); _arrActor[3].setup(1580, 2, 4); _arrActor[3].setPosition(Common::Point(142, 92)); } - if (R2_INVENTORY.getObjectScene(22) != 0) { + if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) != 0) { _arrActor[4].postInit(); _arrActor[4].setup(1580, 2, 5); _arrActor[4].setPosition(Common::Point(108, 54)); } - if (R2_INVENTORY.getObjectScene(26) != 0) { + if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) != 0) { _arrActor[5].postInit(); _arrActor[5].setup(1580, 2, 6); _arrActor[5].setPosition(Common::Point(110, 64)); } - if (R2_INVENTORY.getObjectScene(45) != 0) { + if (R2_INVENTORY.getObjectScene(R2_BATTERY) != 0) { _arrActor[6].postInit(); _arrActor[6].setup(1580, 2, 7); _arrActor[6].setPosition(Common::Point(108, 80)); } - if (R2_INVENTORY.getObjectScene(17) != 0) { + if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) != 0) { _arrActor[7].postInit(); _arrActor[7].setup(1580, 2, 8); _arrActor[7].setPosition(Common::Point(111, 92)); @@ -10197,7 +10231,7 @@ void Scene1625::signal() { _actor6.postInit(); warning("_actor6._actorName = \"arm\";"); - R2_INVENTORY.setObjectScene(40, 3); + R2_INVENTORY.setObjectScene(R2_SUPERCONDUCTOR_WIRE, 3); _sceneMode = 14; setAction(&_sequenceManager, this, 1625, &_actor1, &_actor6, NULL); @@ -10644,7 +10678,7 @@ void Scene1700::signal() { Common::Point pt(271, 90); PlayerMover *mover = new PlayerMover(); _actor12.addMover(mover, &pt, NULL); - if (R2_GLOBALS._player._characterIndex == 1) + if (R2_GLOBALS._player._characterIndex == R2_QUINN) setAction(&_sequenceManager, this, 1700, &R2_GLOBALS._player, &_actor8, NULL); else setAction(&_sequenceManager, this, 1701, &R2_GLOBALS._player, &_actor8, NULL); @@ -12755,7 +12789,7 @@ void Scene1900::signal() { R2_GLOBALS._sceneManager.changeScene(1925); break; case 1910: - R2_INVENTORY.setObjectScene(22, 2535); + R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, 2535); R2_GLOBALS._player.disableControl(CURSOR_ARROW); R2_GLOBALS._player._oldCharacterScene[1] = 1900; R2_GLOBALS._player._oldCharacterScene[2] = 1900; @@ -13505,7 +13539,6 @@ void Scene1950::Area1::remove() { _areaActor.remove(); SceneArea::remove(); R2_GLOBALS._insetUp--; - // if (!R2_GLOBALS.getFlag(37)) R2_GLOBALS._sound2.play(278); @@ -13525,7 +13558,7 @@ void Scene1950::Area1::remove() { } void Scene1950::Area1::process(Event &event) { -// This is a copy of Scene1200::LaserPanel::process + // This is a copy of Scene1200::LaserPanel::process if (_field20 != R2_GLOBALS._insetUp) return; @@ -13533,19 +13566,16 @@ void Scene1950::Area1::process(Event &event) { 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); + R2_GLOBALS._events.setCursor(_savedCursorNum); } } 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); + R2_GLOBALS._events.setCursor(_savedCursorNum); remove(); } } @@ -13606,14 +13636,14 @@ bool Scene1950::Actor2::startAction(CursorType action, Event &event) { Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); - R2_INVENTORY.setObjectScene(31, 0); + R2_INVENTORY.setObjectScene(R2_SCRITH_KEY, 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)) + if ((action != CURSOR_USE) || (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) != 1950)) return SceneActor::startAction(action, event); Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene; @@ -13882,7 +13912,7 @@ void Scene1950::Exit6::changeScene() { 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)) { + if ((R2_GLOBALS.getFlag(36)) && (R2_INVENTORY.getObjectScene(R2_SAPPHIRE_BLUE) == 2) && (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2)) { scene->_sceneMode = 1961; Common::Point pt(-20, 160); NpcMover *mover = new NpcMover(); @@ -13890,7 +13920,7 @@ void Scene1950::Exit6::changeScene() { } 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)) + if ((R2_INVENTORY.getObjectScene(R2_SAPPHIRE_BLUE) == 1950) || (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 1950)) SceneItem::display(1950, 34, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); scene->_sceneMode = 0; Common::Point pt(30, 160); @@ -14201,7 +14231,7 @@ void Scene1950::subBDC1E() { switch (R2_GLOBALS._v566A4 - 1) { case 0: _exit7._enabled = true; - if ((R2_INVENTORY.getObjectScene(31) == 0) && (R2_INVENTORY.getObjectScene(34) == 1950)) + if ((R2_INVENTORY.getObjectScene(R2_SCRITH_KEY) == 0) && (R2_INVENTORY.getObjectScene(R2_SAPPHIRE_BLUE) == 1950)) _exit8._enabled = true; R2_GLOBALS._walkRegions.enableRegion(2); R2_GLOBALS._walkRegions.enableRegion(3); @@ -14719,7 +14749,7 @@ void Scene1950::subBE59B() { _field416 = 1; } } - if ((R2_GLOBALS._v566A4 == 1) && (R2_INVENTORY.getObjectScene(31) != 0)) { + if ((R2_GLOBALS._v566A4 == 1) && (R2_INVENTORY.getObjectScene(R2_SCRITH_KEY) != 0)) { _actor2.postInit(); _actor2.setVisage(1948); _actor2.setStrip(3); @@ -14755,7 +14785,7 @@ void Scene1950::subBE59B() { _item2.setDetails(Rect(188, 124, 199, 133), 1950, 27, 28, -1, 2, NULL); - if (R2_INVENTORY.getObjectScene(34) == 1950) { + if (R2_INVENTORY.getObjectScene(R2_SAPPHIRE_BLUE) == 1950) { _actor5.postInit(); _actor5.setVisage(1970); _actor5.setStrip(1); @@ -14786,7 +14816,7 @@ void Scene1950::subBE59B() { _actor3.setPosition(Common::Point(76, 94)); _actor3.fixPriority(25); _actor3.setDetails(1950, 30, -1, -1, 2, (SceneItem *) NULL); - if (R2_INVENTORY.getObjectScene(35) == 2) + if (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2) _actor3.setFrame(2); else _actor3.setFrame(1); @@ -14805,7 +14835,7 @@ void Scene1950::subBE59B() { switch (R2_GLOBALS._v566A5) { case 0: _sceneMode = 1950; - if (R2_INVENTORY.getObjectScene(31) == 0) { + if (R2_INVENTORY.getObjectScene(R2_SCRITH_KEY) == 0) { R2_GLOBALS._v56AAB = 0; R2_GLOBALS._player.enableControl(CURSOR_ARROW); } else { @@ -15020,8 +15050,8 @@ void Scene1950::postInit(SceneObjectList *OwnerList) { _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)) ) + if ( (R2_INVENTORY.getObjectScene(R2_TANNER_MASK) == 0) && (R2_INVENTORY.getObjectScene(R2_PURE_GRAIN_ALCOHOL) == 0) + && (R2_INVENTORY.getObjectScene(R2_SOAKED_FACEMASK) == 0) && (!R2_GLOBALS.getFlag(36)) ) R2_GLOBALS._player.setVisage(22); else R2_GLOBALS._player.setVisage(20); @@ -15124,7 +15154,7 @@ void Scene1950::signal() { _exit8._enabled = true; break; case 1959: - R2_INVENTORY.setObjectScene(46, 0); + R2_INVENTORY.setObjectScene(R2_SOAKED_FACEMASK, 0); R2_GLOBALS._v56AAB = 0; R2_GLOBALS._player.enableControl(CURSOR_ARROW); _exit8._enabled = true; @@ -15155,7 +15185,7 @@ void Scene1950::signal() { _actor5.setDetails(1950, 9, -1, -1, 2, (SceneItem *) NULL); case 1967: { _sceneMode = 0; - R2_INVENTORY.setObjectScene(34, 2); + R2_INVENTORY.setObjectScene(R2_SAPPHIRE_BLUE, 2); _actor5.remove(); if (R2_GLOBALS.getFlag(36)) R2_GLOBALS._player.setVisage(20); @@ -15170,7 +15200,7 @@ void Scene1950::signal() { break; case 1968: R2_GLOBALS._player.disableControl(); - R2_INVENTORY.setObjectScene(35, 2); + R2_INVENTORY.setObjectScene(R2_ANCIENT_SCROLLS, 2); _actor3.setFrame(2); if (R2_GLOBALS.getFlag(36)) R2_GLOBALS._player.setVisage(20); @@ -15190,7 +15220,7 @@ void Scene1950::process(Event &event) { && (R2_GLOBALS._player._uiEnabled) && (R2_GLOBALS._events.getCursor() == R2_LIGHT_BULB) && (R2_GLOBALS._player._bounds.contains(event.mousePos)) - && (R2_INVENTORY.getObjectScene(31) == 0)) { + && (R2_INVENTORY.getObjectScene(R2_SCRITH_KEY) == 0)) { event.handled = true; R2_GLOBALS._player.disableControl(); _exit7._enabled = false; diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 23ebb2c276..f984a6986a 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -75,15 +75,15 @@ public: }; class Scene1100 : public SceneExt { - class Actor16 : public SceneActor { + class Seeker : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor17 : public SceneActor { + class Trooper : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor18 : public SceneActor { + class Chief : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -118,9 +118,9 @@ public: SceneActor _actor15; BackgroundSceneObject _object1; BackgroundSceneObject _object2; - Actor16 _actor16; - Actor17 _actor17; - Actor18 _actor18; + Seeker _seeker; + Trooper _trooper; + Chief _chief; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; SequenceManager _sequenceManager3; @@ -427,26 +427,26 @@ class Scene1550 : public SceneExt { void subA4D14(int frameNumber, int strip); }; - class UnkObj15501 : public SceneActor { + class Junk : public SceneActor { public: int _fieldA4; - int _fieldA6; + int _junkNumber; - UnkObj15501(); + Junk(); void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); }; - class UnkObj15502 : public SceneActor { + class ShipComponent : public SceneActor { public: - int _fieldA4; + int _componentId; - UnkObj15502(); + ShipComponent(); void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); - void subA5CDF(int strip); + void setupShipComponent(int componentId); }; class UnkObj15503 : public SceneActor { @@ -472,7 +472,7 @@ class Scene1550 : public SceneExt { virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; - class Hotspot1 : public NamedHotspot { + class WorkingShip : public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; @@ -482,12 +482,12 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor6 : public SceneActor { + class Wreckage : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor7 : public SceneActor { + class Companion : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -522,7 +522,7 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor14 : public SceneActor1550 { + class Wall : public SceneActor1550 { // Nothing specific found in the original // TODO: check if it's an useless class }; @@ -530,30 +530,30 @@ class Scene1550 : public SceneExt { public: SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - Hotspot1 _item1; - Hotspot1 _item2; + WorkingShip _shipHull; + WorkingShip _item2; Hotspot3 _item3; - SceneActor _actor1; + SceneActor _landingStrut; SceneActor _actor2; SceneActor _actor3; SceneActor _actor4; SceneActor _actor5; - Actor6 _actor6; - Actor7 _actor7; + Wreckage _wreckage; + Companion _companion; 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]; + Junk _junk[8]; + Wall _actor14; + Wall _northWall; // Is also reused for landing strip + Wall _actor16; + Wall _westWall; // Is also reused for left hand space + Wall _eastWall; + Wall _southWall; + ShipComponent _shipComponents[8]; UnkArea1550 _unkArea1; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; @@ -566,7 +566,7 @@ public: Scene1550(); void synchronize(Serializer &s); - void subA2B2F(); + void enterArea(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 9246c4b6a4..432f284890 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -769,6 +769,7 @@ Scene2000::Scene2000(): SceneExt() { } _exitingFlag = false; + _mazePlayerMode = 0; } void Scene2000::postInit(SceneObjectList *OwnerList) { @@ -1116,7 +1117,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { _actor3.postInit(); _actor4.postInit(); - if (R2_INVENTORY.getObjectScene(20) == 2350) { + if (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 2350) { _actor3.hide(); _actor4.hide(); } else { @@ -1176,12 +1177,12 @@ void Scene2350::signal() { break; case 21: R2_GLOBALS._player.disableControl(); - R2_INVENTORY.setObjectScene(36, 1); + R2_INVENTORY.setObjectScene(R2_FLUTE, 1); _sceneMode = 2354; setAction(&_sequenceManager, this, 2354, &R2_GLOBALS._player, NULL); break; case 2354: - R2_INVENTORY.setObjectScene(20, 2350); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 2350); g_globals->_sceneManager.changeScene(2900); break; case 2355: @@ -1534,7 +1535,7 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(108, 160)); - if (R2_INVENTORY.getObjectScene(37) == 2430) { + if (R2_INVENTORY.getObjectScene(R2_GUNPOWDER) == 2430) { _actor2.postInit(); _actor2.setup(2435, 1, 5); _actor2.setPosition(Common::Point(205, 119)); @@ -1542,7 +1543,7 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { _actor2.setDetails(2430, 51, -1, 53, 1, (SceneItem *)NULL); } - if (R2_INVENTORY.getObjectScene(50) == 2435) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) == 2435) { _actor3.postInit(); _actor3.setup(2435, 1, 1); _actor3.setPosition(Common::Point(31, 65)); @@ -1820,7 +1821,7 @@ void Scene2440::postInit(SceneObjectList *OwnerList) { // 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) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2440) { _actor2.postInit(); _actor2.setup(2435, 1, 1); _actor2.setPosition(Common::Point(94, 80)); @@ -1885,7 +1886,7 @@ void Scene2440::signal() { break; case 2440: _actor2.remove(); - R2_INVENTORY.setObjectScene(49, 2); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_2, 2); // No break on purpose default: R2_GLOBALS._player.enableControl(); @@ -2212,7 +2213,7 @@ bool Scene2455::Actor1::startAction(CursorType action, Event &event) { Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; if (action == R2_GLASS_DOME) { - if ((R2_INVENTORY.getObjectScene(49) == 2455) || (R2_INVENTORY.getObjectScene(50) == 2455)) { + if ((R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2455) || (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) == 2455)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2458; scene->_actor2._lookLineNum = 9; @@ -2232,7 +2233,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { switch (action) { case R2_ALCOHOL_LAMP_2: - if (R2_INVENTORY.getObjectScene(50) != 2455) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) != 2455) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); scene->_actor1.setup(2456, 3, 3); @@ -2244,7 +2245,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { } break; case R2_ALCOHOL_LAMP_3: - if (R2_INVENTORY.getObjectScene(49) != 2455) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) != 2455) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); scene->_actor1.setup(2456, 3, 3); @@ -2290,15 +2291,15 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) { - R2_INVENTORY.setObjectScene(29, 2); - R2_INVENTORY.setObjectScene(50, 2); + R2_INVENTORY.setObjectScene(R2_GLASS_DOME, 2); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_3, 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)) { + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2455) { + if ((R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) == 2455) || (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2455)) { _actor1.postInit(); _actor1.setup(2456, 3, 3); _actor1.setPosition(Common::Point(162, 165)); @@ -2312,11 +2313,11 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { } _actor2.postInit(); - if (R2_INVENTORY.getObjectScene(29) == 2455) { + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2455) { _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(R2_ALCOHOL_LAMP_3) != 2455) && (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) != 2455)) _actor2.setup(2455, 1, 1); else _actor2.setup(2456, 1, 1); @@ -2324,7 +2325,7 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { } _actor2.setPosition(Common::Point(162, 165)); _actor2.fixPriority(20); - if (R2_INVENTORY.getObjectScene(29) != 2455) + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) != 2455) _actor2.animate(ANIM_MODE_2, NULL); R2_GLOBALS._player.postInit(); @@ -2356,23 +2357,23 @@ void Scene2455::signal() { g_globals->_sceneManager.changeScene(2425); break; case 11: - R2_INVENTORY.setObjectScene(49, 2455); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_2, 2455); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 12: - R2_INVENTORY.setObjectScene(50, 2455); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_3, 2455); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 2458: - R2_INVENTORY.setObjectScene(29, 2455); + R2_INVENTORY.setObjectScene(R2_GLASS_DOME, 2455); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 2459: _actor3.remove(); - R2_INVENTORY.setObjectScene(31, 2); + R2_INVENTORY.setObjectScene(R2_SCRITH_KEY, 2); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; @@ -2542,7 +2543,7 @@ void Scene2525::postInit(SceneObjectList *OwnerList) { _exit1.setDetails(Rect(86, 155, 228, 168), EXITCURSOR_S, 2000); - if (R2_INVENTORY.getObjectScene(29) == 2525) { + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2525) { _actor3.postInit(); _actor3.setup(2435, 1, 2); _actor3.setPosition(Common::Point(78, 155)); @@ -2615,7 +2616,7 @@ void Scene2525::signal() { break; case 2525: _actor3.remove(); - R2_INVENTORY.setObjectScene(29, 2); + R2_INVENTORY.setObjectScene(R2_GLASS_DOME, 2); R2_GLOBALS._player.enableControl(); break; case 2526: @@ -2698,7 +2699,7 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(108, 160)); - if (R2_INVENTORY.getObjectScene(33) == 2530) { + if (R2_INVENTORY.getObjectScene(R2_PURE_GRAIN_ALCOHOL) == 2530) { _actor2.postInit(); _actor2.setup(2435, 1, 3); _actor2.setPosition(Common::Point(299, 80)); @@ -2766,7 +2767,7 @@ void Scene2530::signal() { g_globals->_sceneManager.changeScene(2000); break; case 2530: - R2_INVENTORY.setObjectScene(33, 2); + R2_INVENTORY.setObjectScene(R2_PURE_GRAIN_ALCOHOL, 2); _actor2.remove(); break; case 2531: @@ -2798,7 +2799,7 @@ bool Scene2535::Actor3::startAction(CursorType action, Event &event) { if (R2_GLOBALS._player._characterIndex == 1) { R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(20) == 2535) { + if (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 2535) { scene->_sceneMode = 2536; scene->setAction(&scene->_sequenceManager, scene, 2536, &R2_GLOBALS._player, &scene->_actor3, NULL); } else { @@ -2846,12 +2847,12 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) { R2_GLOBALS.setFlag(73); - R2_INVENTORY.setObjectScene(20, 2535); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 2535); } _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(210, 160)); - if (R2_INVENTORY.getObjectScene(32) == 2535) { + if (R2_INVENTORY.getObjectScene(R2_TANNER_MASK) == 2535) { _actor4.postInit(); _actor4.setup(2435, 1, 4); _actor4.setPosition(Common::Point(47, 74)); @@ -2859,7 +2860,7 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { _actor4.setDetails(2535, 21, -1, -1, 1, (SceneItem *)NULL); } - if (R2_INVENTORY.getObjectScene(20) == 2535) { + if (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 2535) { _actor3.postInit(); _actor3.setup(2535, 3, 1); _actor3.setPosition(Common::Point(203, 131)); @@ -2867,7 +2868,7 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._walkRegions.enableRegion(6); } - if ((R2_INVENTORY.getObjectScene(20) == 0) && (R2_GLOBALS.getFlag(73))) { + if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 0) && (R2_GLOBALS.getFlag(73))) { _actor3.postInit(); _actor3.setup(2536, 1, 2); _actor3.setPosition(Common::Point(164, 133)); @@ -2933,12 +2934,12 @@ void Scene2535::signal() { g_globals->_sceneManager.changeScene(2000); break; case 2535: - R2_INVENTORY.setObjectScene(32, 2); + R2_INVENTORY.setObjectScene(R2_TANNER_MASK, 2); _actor4.remove(); R2_GLOBALS._player.enableControl(); break; case 2536: - R2_INVENTORY.setObjectScene(20, 0); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 0); R2_GLOBALS._walkRegions.disableRegion(6); if (!R2_GLOBALS.getFlag(73)) { _actor3.remove(); @@ -2958,7 +2959,7 @@ void Scene2535::signal() { break; case 2537: _actor3.remove(); - R2_INVENTORY.setObjectScene(20, 1); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1); R2_GLOBALS._player.enableControl(); break; case 20: @@ -3211,7 +3212,7 @@ void Scene2700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(2, 2); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(36) == 0) + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) R2_GLOBALS._sound1.changeSound(234); if (R2_GLOBALS._sceneManager._previousScene == 2750) { @@ -3452,7 +3453,7 @@ void Scene2700::signal() { } break; case 11: - R2_INVENTORY.setObjectScene(36, 0); + R2_INVENTORY.setObjectScene(R2_FLUTE, 0); R2_GLOBALS._player.disableControl(); _field412 = 0; _sceneMode = 2700; @@ -3854,7 +3855,7 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { _rect2.set(130, 142, 210, 167); _rect3.set(-1, 137, 290, 147); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._sound1.changeSound(235); _actor2.postInit(); _actor2.setup(2751, 1, 1); @@ -3929,7 +3930,7 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_nejSpeaker); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { _actor1.postInit(); _actor1.setup(2752, 5, 1); _actor1.animate(ANIM_MODE_NONE, NULL); @@ -3943,7 +3944,7 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._sceneManager._previousScene == 2700) { - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._player.setVisage(2752); R2_GLOBALS._player.setStrip(6); R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); @@ -4448,7 +4449,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_nejSpeaker); _stripManager.addSpeaker(&_guardSpeaker); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._sound1.fadeSound(237); if (R2_GLOBALS.getFlag(47)) { _item2.setDetails(Rect(76, 45, 155, 90), 2800, 3, -1, -1, 2, NULL); @@ -4469,7 +4470,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(2, 2); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._player.setAction(&_sequenceManager, this, 2800, &R2_GLOBALS._player, NULL); } else if (R2_GLOBALS.getFlag(47)) { R2_GLOBALS._player.setVisage(3110); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 6af2a0cad4..b2958a3d5e 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -378,7 +378,7 @@ bool Scene3150::Item5::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (R2_INVENTORY.getObjectScene(47) != 3150) + if (R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) return SceneHotspot::startAction(action, event); R2_GLOBALS._player.disableControl(); @@ -386,7 +386,7 @@ bool Scene3150::Item5::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager, scene, 3154, &R2_GLOBALS._player, &scene->_actor3, NULL); return true; case R2_SUPERCONDUCTOR_WIRE: - if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_GLOBALS.getFlag(75))) { + if ((R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) && (R2_GLOBALS.getFlag(75))) { R2_GLOBALS._player.disableControl(); scene->_actor3.postInit(); scene->_actor3._effect = 3; @@ -417,7 +417,7 @@ bool Scene3150::Item6::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager, scene, 3158, &R2_GLOBALS._player, &scene->_actor4, NULL); return true; case R2_FOOD_TRAY: - if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_INVENTORY.getObjectScene(40) == 3150) && (R2_GLOBALS.getFlag(75))) { + if ((R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) && (R2_INVENTORY.getObjectScene(R2_SUPERCONDUCTOR_WIRE) == 3150) && (R2_GLOBALS.getFlag(75))) { scene->_actor5.postInit(); scene->_actor5._effect = 6; scene->_actor5._shade = 3; @@ -535,7 +535,7 @@ void Scene3150::Exit2::changeScene() { void Scene3150::postInit(SceneObjectList *OwnerList) { loadScene(3150); if (R2_GLOBALS._sceneManager._previousScene == -1) { - R2_INVENTORY.setObjectScene(35, 2000); + R2_INVENTORY.setObjectScene(R2_ANCIENT_SCROLLS, 2000); R2_GLOBALS._player._oldCharacterScene[1] = 3100; R2_GLOBALS._player._oldCharacterScene[3] = 0; R2_GLOBALS._player._characterIndex = R2_MIRANDA; @@ -583,7 +583,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor7.fixPriority(50); _actor7.setDetails(3150, 17, -1, 19, 1, (SceneItem *)NULL); - if (R2_INVENTORY.getObjectScene(41) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_PILLOW) == 3150) { _actor4.postInit(); if (R2_GLOBALS.getFlag(75)) { if (R2_GLOBALS.getFlag(76)) { @@ -608,13 +608,13 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { } } - if (R2_INVENTORY.getObjectScene(47) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) == 3150) { _actor3.postInit(); _actor3.setup(3152, 7, 1); _actor3.setPosition(Common::Point(73, 83)); } - if (R2_INVENTORY.getObjectScene(40) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_SUPERCONDUCTOR_WIRE) == 3150) { _actor3.postInit(); _actor3.setup(3152, 7, 3); _actor3.setPosition(Common::Point(70, 55)); @@ -623,7 +623,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor3._shade = 5; } - if (R2_INVENTORY.getObjectScene(42) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_FOOD_TRAY) == 3150) { _actor5.postInit(); if (R2_GLOBALS.getFlag(77)) { _actor5.setup(3152, 7, 8); @@ -675,7 +675,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { break; } default: - if ((R2_GLOBALS._v56AA0 == 1) && (R2_INVENTORY.getObjectScene(35) == 2000) && (R2_GLOBALS._player._oldCharacterScene[1] == 3100)) { + if ((R2_GLOBALS._v56AA0 == 1) && (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2000) && (R2_GLOBALS._player._oldCharacterScene[1] == 3100)) { ++R2_GLOBALS._v56AA0; _sceneMode = 3156; _actor1.postInit(); @@ -713,7 +713,7 @@ void Scene3150::signal() { break; case 3151: _actor1.remove(); - R2_INVENTORY.setObjectScene(41, 3); + R2_INVENTORY.setObjectScene(R2_PILLOW, 3); R2_GLOBALS._player.enableControl(); break; case 3153: @@ -726,37 +726,37 @@ void Scene3150::signal() { break; case 3154: _actor3.remove(); - R2_INVENTORY.setObjectScene(47, 3); + R2_INVENTORY.setObjectScene(R2_LIGHT_BULB, 3); R2_GLOBALS._player.enableControl(); break; case 3155: - R2_INVENTORY.setObjectScene(40, 3150); + R2_INVENTORY.setObjectScene(R2_SUPERCONDUCTOR_WIRE, 3150); R2_GLOBALS._player.enableControl(); break; case 3156: _actor5.setDetails(3150, 30, -1, -1, 2, (SceneItem *)NULL); - R2_INVENTORY.setObjectScene(42, 3150); + R2_INVENTORY.setObjectScene(R2_FOOD_TRAY, 3150); R2_GLOBALS._player.enableControl(); break; case 3157: _actor5.remove(); - R2_INVENTORY.setObjectScene(42, 3); + R2_INVENTORY.setObjectScene(R2_FOOD_TRAY, 3); R2_GLOBALS._player.enableControl(); break; case 3158: R2_GLOBALS.setFlag(75); - R2_INVENTORY.setObjectScene(41, 3150); + R2_INVENTORY.setObjectScene(R2_PILLOW, 3150); _actor4.fixPriority(110); _actor4.setDetails(3150, 13, -1, -1, 2, (SceneItem *)NULL); R2_GLOBALS._player.enableControl(); break; case 3159: R2_GLOBALS.setFlag(77); - R2_INVENTORY.setObjectScene(42, 3150); + R2_INVENTORY.setObjectScene(R2_FOOD_TRAY, 3150); R2_GLOBALS._player.enableControl(); break; case 3160: - R2_INVENTORY.setObjectScene(52, 3150); + R2_INVENTORY.setObjectScene(R2_TOOLBOX, 3150); R2_GLOBALS.setFlag(80); R2_GLOBALS._sceneManager.changeScene(1200); break; @@ -1407,7 +1407,7 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _actor13.setPosition(Common::Point(40, 106)); _actor13.setDetails(3260, 18, 1, -1, 1, (SceneItem *)NULL); - if (R2_INVENTORY.getObjectScene(52) == 3260) { + if (R2_INVENTORY.getObjectScene(R2_TOOLBOX) == 3260) { _actor14.postInit(); _actor14.setup(3260, 7, 1); _actor14.setPosition(Common::Point(202, 66)); @@ -1524,8 +1524,8 @@ void Scene3260::signal() { 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); + R2_INVENTORY.setObjectScene(R2_TOOLBOX, 3); + R2_INVENTORY.setObjectScene(R2_LASER_HACKSAW, 3); setAction(&_sequenceManager, this, 3273, &R2_GLOBALS._player, &_actor14, NULL); break; case 3273: @@ -2771,7 +2771,7 @@ void Scene3400::signal() { _actor2.setStrip(6); _actor3.setStrip(3); _actor4.setStrip(1); - R2_INVENTORY.setObjectScene(34, 0); + R2_INVENTORY.setObjectScene(R2_SAPPHIRE_BLUE, 0); _stripManager.start(3307, this); if (R2_GLOBALS._player._characterIndex == 2) { _sceneMode = 3400; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index cd2ff669ff..e7109829b0 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -204,13 +204,12 @@ void VisualSpeaker::setText(const Common::String &msg) { _sceneText._textMode = _textMode; _sceneText.setup(s); - //_sceneText.clone(); - _sceneText.setPosition(_textPos); _sceneText.fixPriority(256); // If subtitles are turned off, don't show the text - if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { + if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && + !(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { _sceneText.hide(); } @@ -360,7 +359,7 @@ void SpeakerChief1100::proc15() { Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor18; + _object2 = &scene->_chief; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1180,6 +1179,7 @@ void SpeakerQuinn300::proc15() { if (R2_GLOBALS._player._characterIndex == 3) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 300); Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_quinn; } @@ -1220,6 +1220,51 @@ void SpeakerQuinn300::proc15() { } } +void SpeakerQuinn500::proc15() { + int v = _speakerMode; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _object2 = &R2_GLOBALS._player; + } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 500); + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + + _object1.postInit(); + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _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 10: + _object1.setup(4021, (v == 1) ? 5 : 7, 1); + break; + + case 1500: + _object1.setup(4021, (v == 1) ? 1 : 3, 1); + break; + + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + void SpeakerQuinn1100::proc15() { int v = _speakerMode; @@ -1230,8 +1275,9 @@ void SpeakerQuinn1100::proc15() { if (R2_GLOBALS._player._characterIndex == 1) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1100); Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor16; + _object2 = &scene->_seeker; } _object2->hide(); @@ -1275,6 +1321,7 @@ void SpeakerQuinn2435::proc15() { if (R2_GLOBALS._player._characterIndex == 1) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; } @@ -1301,6 +1348,7 @@ void SpeakerQuinn2450::proc15() { if (R2_GLOBALS._player._characterIndex == 1) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; } @@ -1948,9 +1996,9 @@ void SpeakerSeeker300::proc15() { int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; - } else { + } else {assert(R2_GLOBALS._sceneManager._sceneNumber == 300); Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_seeker; } @@ -1980,6 +2028,43 @@ void SpeakerSeeker300::proc15() { } } +void SpeakerSeeker500::proc15() { + int v = _speakerMode; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { + _object2 = &R2_GLOBALS._player; + } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 500); + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + _object1.postInit(); + + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + if (v == 1) + _object1.setup(4041, 3, 1); + else + _object1.setup(4041, 1, 1); + + _object1.animate(ANIM_MODE_5, this); + } +} + void SpeakerSeeker1100::proc15() { int v = _speakerMode; @@ -1990,8 +2075,9 @@ void SpeakerSeeker1100::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1100); Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor16; + _object2 = &scene->_seeker; } _object2->hide(); @@ -2046,6 +2132,7 @@ void SpeakerSeeker1900::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1900); Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; } @@ -2076,6 +2163,7 @@ void SpeakerSeeker2435::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; } @@ -2102,6 +2190,7 @@ void SpeakerSeeker2450::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2450); Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; } @@ -2492,9 +2581,9 @@ void SpeakerSocko3200::proc15() { // Classes related to SOLDIER //---------------------------------------------------------------------------- -SpeakerSoldier::SpeakerSoldier(int colour) { +SpeakerSoldier::SpeakerSoldier(int color) { _speakerName = "SOLDIER"; - _color1 = colour; + _color1 = color; _color2 = 0; _speakerMode = 0; _textWidth = 300; @@ -2788,9 +2877,9 @@ void SpeakerTomko3245::proc15() { // Classes related to WEBBSTER //---------------------------------------------------------------------------- -SpeakerWebbster::SpeakerWebbster(int colour) { +SpeakerWebbster::SpeakerWebbster(int color) { _speakerName = "WEBBSTER"; - _color1 = colour; + _color1 = color; _color2 = 0; _speakerMode = 0; _textWidth = 300; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 532e02576c..4dfb500f2d 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -282,6 +282,12 @@ public: virtual void proc15(); }; +class SpeakerQuinn500 : public SpeakerQuinn { +public: + virtual Common::String getClassName() { return "SpeakerQuinn500"; } + virtual void proc15(); +}; + class SpeakerQuinn1100 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn1100"; } @@ -420,6 +426,12 @@ public: virtual void proc15(); }; +class SpeakerSeeker500 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker500"; } + virtual void proc15(); +}; + class SpeakerSeeker1100 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker1100"; } @@ -504,7 +516,7 @@ public: class SpeakerSoldier : public VisualSpeaker { public: - SpeakerSoldier(int colour); + SpeakerSoldier(int color); virtual Common::String getClassName() { return "SpeakerSoldier"; } }; @@ -579,7 +591,7 @@ public: class SpeakerWebbster : public VisualSpeaker { public: - SpeakerWebbster(int colour); + SpeakerWebbster(int color); virtual Common::String getClassName() { return "SpeakerWebbster"; } }; |