diff options
Diffstat (limited to 'engines/tsage/ringworld2/ringworld2_scenes1.cpp')
-rw-r--r-- | engines/tsage/ringworld2/ringworld2_scenes1.cpp | 2608 |
1 files changed, 1375 insertions, 1233 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 6ea53d0852..0941f09677 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -5,7 +5,7 @@ * file distributed with this source distribution. * * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License + * modify it under the terms of the GNU GenWeral Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. @@ -38,7 +38,8 @@ Scene1000::Scene1000(): SceneExt() { R2_GLOBALS._sceneManager._hasPalette = false; R2_GLOBALS._uiElements._active = false; _gameTextSpeaker._displayMode = 9; - _fieldD2E = 0; + _forceCheckAnimationFl = false; + _animCounter = 0; } void Scene1000::postInit(SceneObjectList *OwnerList) { @@ -115,7 +116,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, true, 0); for (int percent = 0; percent < 100; percent += 5) @@ -140,7 +141,7 @@ void Scene1000::signal() { R2_GLOBALS._player.setPosition(Common::Point(160, 100)); R2_GLOBALS._player.show(); - _field412 = 0; + _animCounter = 0; _stripManager.start(29, this); break; @@ -148,7 +149,7 @@ void Scene1000::signal() { if (R2_GLOBALS._speechSubtitles & SPEECH_TEXT) { setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); } else { - if (++_field412 < 3) + if (++_animCounter < 3) _sceneMode = 2; setAction(&_sequenceManager1, this, 2, &R2_GLOBALS._player, NULL); @@ -173,7 +174,7 @@ void Scene1000::signal() { _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -203,7 +204,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -225,7 +226,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -245,7 +246,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -270,7 +271,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -296,7 +297,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -318,7 +319,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -345,7 +346,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -370,7 +371,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -393,7 +394,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -411,7 +412,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -438,7 +439,7 @@ void Scene1000::signal() { R2_GLOBALS._sceneManager._hasPalette = false; _animationPlayer.dispatch(); - _fieldD2E = 1; + _forceCheckAnimationFl = true; R2_GLOBALS._scenePalette.fade((const byte *)&black, 1, 0); for (int percent = 0; percent < 100; percent += 5) R2_GLOBALS._scenePalette.fade((const byte *)&black, true, percent); @@ -454,9 +455,9 @@ void Scene1000::signal() { } void Scene1000::dispatch() { - if (_fieldD2E) { + if (_forceCheckAnimationFl) { if (_animationPlayer.isCompleted()) { - _fieldD2E = 0; + _forceCheckAnimationFl = false; _animationPlayer.close(); _animationPlayer.remove(); @@ -661,18 +662,18 @@ void Scene1020::dispatch() { * *--------------------------------------------------------------------------*/ Scene1100::Scene1100() { - _field412 = 0; - _field414 = 0; + _nextStripNum = 0; + _paletteRefreshStatus = 0; } void Scene1100::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); - s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_nextStripNum); + s.syncAsSint16LE(_paletteRefreshStatus); } -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,24 +681,24 @@ bool Scene1100::Actor16::startAction(CursorType action, Event &event) { if (R2_GLOBALS.getFlag(52)) { R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._player._characterIndex == 1) - scene->_field412 = 327; + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + scene->_nextStripNum = 327; else - scene->_field412 = 328; + scene->_nextStripNum = 328; scene->_sceneMode = 53; scene->setAction(&scene->_sequenceManager1, scene, 1122, &R2_GLOBALS._player, NULL); } else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 55; if (R2_GLOBALS._v565AE >= 3) { - if (R2_GLOBALS._player._characterIndex == 1) + 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,11 +753,11 @@ 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))) { - scene->_field412 = 0; + scene->_nextStripNum = 0; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 53; scene->setAction(&scene->_sequenceManager1, scene, 1122, &R2_GLOBALS._player, NULL); @@ -778,7 +779,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._v5589E.right = 200; } - if (R2_GLOBALS._player._characterScene[1] == 1100) + if (R2_GLOBALS._player._characterScene[R2_QUINN] == 1100) R2_GLOBALS._sceneManager._previousScene = 1100; if (R2_GLOBALS._sceneManager._previousScene == -1) { @@ -814,38 +815,38 @@ 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; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1100; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1100; _actor2.setPosition(Common::Point(150, 30)); R2_GLOBALS._sound1.play(93); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); R2_GLOBALS._player.disableControl(); - _actor16.postInit(); - _actor16.hide(); - if (R2_GLOBALS._player._characterIndex == 1) - _actor16.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + _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); @@ -859,7 +860,7 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); } else if (R2_GLOBALS._sceneManager._previousScene == 1000) { _actor2.setPosition(Common::Point(50, 30)); - _field414 = 0; + _paletteRefreshStatus = 0; _palette1.loadPalette(1101); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.disableControl(); @@ -872,25 +873,25 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveRate = 30; R2_GLOBALS._player._moveDiff = Common::Point(16, 2); - _object1.setup2(1104, 2, 1, 175, 125, 102, 1); + _rightLandslide.setup2(1104, 2, 1, 175, 125, 102, 1); _object2.setup2(1102, 5, 1, 216, 167, 1, 0); - _actor12.postInit(); - _actor12.setup(1113, 2, 1); - _actor12.setPosition(Common::Point(67, 151)); - _actor12.fixPriority(255); + _leftImpacts.postInit(); + _leftImpacts.setup(1113, 2, 1); + _leftImpacts.setPosition(Common::Point(67, 151)); + _leftImpacts.fixPriority(255); - _actor3.postInit(); - _actor3.setup(1102, 6, 1); - _actor3._moveRate = 30; - _actor3._moveDiff.x = 2; + _shipFormation.postInit(); + _shipFormation.setup(1102, 6, 1); + _shipFormation._moveRate = 30; + _shipFormation._moveDiff.x = 2; - _actor4.postInit(); - _actor4.setup(1102, 6, 2); - _actor4._moveRate = 30; - _actor4._moveDiff.x = 2; - _actor4._effect = 5; - _actor4._field9C = _field312; + _shipFormationShadow.postInit(); + _shipFormationShadow.setup(1102, 6, 2); + _shipFormationShadow._moveRate = 30; + _shipFormationShadow._moveDiff.x = 2; + _shipFormationShadow._effect = 5; + _shipFormationShadow._field9C = _field312; R2_GLOBALS._sound1.play(86); @@ -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); @@ -992,30 +993,30 @@ void Scene1100::remove() { void Scene1100::signal() { switch (_sceneMode++) { case 0: - _actor3.setPosition(Common::Point(350, 20)); + _shipFormation.setPosition(Common::Point(350, 20)); setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL); break; case 1:{ Common::Point pt(-150, 20); NpcMover *mover = new NpcMover(); - _actor3.addMover(mover, &pt, this); - _actor4.setPosition(Common::Point(350, 55)); + _shipFormation.addMover(mover, &pt, this); + _shipFormationShadow.setPosition(Common::Point(350, 55)); Common::Point pt2(-150, 55); NpcMover *mover2 = new NpcMover(); - _actor4.addMover(mover2, &pt2, NULL); + _shipFormationShadow.addMover(mover2, &pt2, NULL); } break; case 2: - _actor3.remove(); - _actor4.remove(); - _actor5.postInit(); - _actor6.postInit(); - _actor7.postInit(); - _actor8.postInit(); - _actor9.postInit(); - _actor10.postInit(); - setAction(&_sequenceManager1, this, 1102, &_actor5, &_actor6, &_actor7, &_actor8, &_actor9, &_actor10, NULL); + _shipFormation.remove(); + _shipFormationShadow.remove(); + _shotImpact1.postInit(); + _shotImpact2.postInit(); + _shotImpact3.postInit(); + _shotImpact4.postInit(); + _shotImpact5.postInit(); + _laserShot.postInit(); + setAction(&_sequenceManager1, this, 1102, &_shotImpact1, &_shotImpact2, &_shotImpact3, &_shotImpact4, &_shotImpact5, &_laserShot, NULL); break; case 3: { R2_GLOBALS._sound2.play(84); @@ -1026,26 +1027,26 @@ 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, &_laserShot, NULL); break; case 5: - _actor13.postInit(); - _actor13._effect = 6; - _actor13.setup(1103, 3, 1); - _actor13._moveRate = 30; + _runningGuy1.postInit(); + _runningGuy1._effect = 6; + _runningGuy1.setup(1103, 3, 1); + _runningGuy1._moveRate = 30; - _actor14.postInit(); - _actor14._effect = 6; - _actor14.setup(1103, 4, 1); - _actor4._moveRate = 25; + _runningGuy2.postInit(); + _runningGuy2._effect = 6; + _runningGuy2.setup(1103, 4, 1); + _runningGuy2._moveRate = 25; - _actor13.setAction(&_sequenceManager2, this, 1109, &_actor13, &_actor14, NULL); + _runningGuy1.setAction(&_sequenceManager2, this, 1109, &_runningGuy1, &_runningGuy2, NULL); break; case 6: { - _actor13.remove(); - _actor14.remove(); + _runningGuy1.remove(); + _runningGuy2.remove(); R2_GLOBALS._player.setPosition(Common::Point(-50, 136)); R2_GLOBALS._sound2.play(84); Common::Point pt(350, 236); @@ -1054,29 +1055,30 @@ void Scene1100::signal() { } break; case 7: - setAction(&_sequenceManager1, this, 1103, &_actor18, &_actor10); + setAction(&_sequenceManager1, this, 1103, &_chief, &_laserShot, NULL); break; case 8: R2_GLOBALS._player._effect = 0; - _actor11.postInit(); - setAction(&_sequenceManager1, this, 1105, &R2_GLOBALS._player, &_actor10, &_actor11, &_actor18, NULL); + _animation.postInit(); + setAction(&_sequenceManager1, this, 1105, &R2_GLOBALS._player, &_laserShot, &_animation, &_chief, NULL); break; case 9: - _object1.copySceneToBackground(); + _rightLandslide.copySceneToBackground(); - _actor15.postInit(); - _actor15.setup(1103, 2, 1); - _actor15._moveRate = 30; - _actor15.setAction(&_sequenceManager3, this, 1107, &_actor15, NULL); + _runningGuy3.postInit(); + _runningGuy3.setup(1103, 2, 1); + _runningGuy3._moveRate = 30; + _runningGuy3.setAction(&_sequenceManager3, this, 1107, &_runningGuy3, NULL); break; case 10: - _actor13.postInit(); - _actor13.setup(1103, 1, 1); - _actor13._moveRate = 15; - _actor13.setAction(&_sequenceManager2, this, 1108, &_actor13, NULL); + _runningGuy1.postInit(); + _runningGuy1.setup(1103, 1, 1); + _runningGuy1._moveRate = 15; + _runningGuy1.setAction(&_sequenceManager2, this, 1108, &_runningGuy1, NULL); break; case 11: { - setAction(&_sequenceManager1, this, 1106, &_actor11, &_actor10, &_actor12, NULL); + setAction(&_sequenceManager1, this, 1106, &_animation, &_laserShot, &_leftImpacts, NULL); + R2_GLOBALS._player._effect = 5; R2_GLOBALS._player.setup(1102, 3, 2); R2_GLOBALS._player.setPosition(Common::Point(-50, 131)); @@ -1090,19 +1092,19 @@ 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)); + _animation.setup(1100, 2, 1); + _animation.setPosition(Common::Point(408, 121)); - _actor10.setup(1100, 3, 5); - _actor10.setPosition(Common::Point(409, 121)); + _laserShot.setup(1100, 3, 5); + _laserShot.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); + setAction(&_sequenceManager1, this, 1100, &_animation, &_laserShot, NULL); break; case 15: R2_GLOBALS._sceneManager.changeScene(1000); @@ -1115,14 +1117,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,74 +1138,77 @@ 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: _sceneMode = 54; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); - if (_field412 == 0) { + if (_nextStripNum == 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); } } else { - _stripManager.start3(_field412, this, _stripManager._lookupList); + _stripManager.start3(_nextStripNum, this, _stripManager._lookupList); } 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; @@ -1212,8 +1217,8 @@ void Scene1100::signal() { R2_GLOBALS._player._canWalk = false; break; case 99: - R2_GLOBALS._player._characterScene[1] = 300; - R2_GLOBALS._player._characterScene[2] = 300; + R2_GLOBALS._player._characterScene[R2_QUINN] = 300; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 300; R2_GLOBALS._player._characterIndex = R2_QUINN; R2_GLOBALS._sceneManager.changeScene(300); break; @@ -1244,9 +1249,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; @@ -1265,37 +1270,37 @@ void Scene1100::signal() { } void Scene1100::dispatch() { - if ((g_globals->_sceneObjects->contains(&_actor10)) && (_actor10._visage == 1102) && (_actor10._strip == 4) && (_actor10._frame == 1) && (_actor10._flags & OBJFLAG_HIDING)) { - if (_field414 == 1) { - _field414 = 2; + if ((g_globals->_sceneObjects->contains(&_laserShot)) && (_laserShot._visage == 1102) && (_laserShot._strip == 4) && (_laserShot._frame == 1) && (_laserShot._flags & OBJFLAG_HIDING)) { + if (_paletteRefreshStatus == 1) { + _paletteRefreshStatus = 2; R2_GLOBALS._scenePalette.refresh(); } } else { - if (_field414 == 2) + if (_paletteRefreshStatus == 2) R2_GLOBALS._scenePalette.refresh(); - _field414 = 1; + _paletteRefreshStatus = 1; } Scene::dispatch(); - if (R2_GLOBALS._player._bounds.contains(_actor13._position)) - _actor13._shade = 3; + if (R2_GLOBALS._player._bounds.contains(_runningGuy1._position)) + _runningGuy1._shade = 3; else - _actor13._shade = 0; + _runningGuy1._shade = 0; - if (R2_GLOBALS._player._bounds.contains(_actor14._position)) - _actor14._shade = 3; + if (R2_GLOBALS._player._bounds.contains(_runningGuy2._position)) + _runningGuy2._shade = 3; else - _actor14._shade = 0; + _runningGuy2._shade = 0; - if (R2_GLOBALS._player._bounds.contains(_actor15._position)) - _actor15._shade = 3; + if (R2_GLOBALS._player._bounds.contains(_runningGuy3._position)) + _runningGuy3._shade = 3; else - _actor15._shade = 0; + _runningGuy3._shade = 0; } 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 +5978,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 +5989,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 +7016,7 @@ void Scene1500::signal() { } break; case 24: - R2_GLOBALS._sceneManager.changeScene(300); + R2_GLOBALS._sceneManager.changeScene(1550); break; default: break; @@ -7169,21 +7177,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 +7245,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 +7284,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,47 +7380,48 @@ 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) { - case 0: + setup(1517, _componentId, 1); + + switch (_componentId) { + case 1: if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) == 0) setFrame(5); setPosition(Common::Point(287, 85)); break; - case 1: + case 2: if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) == 0) setFrame(5); setPosition(Common::Point(248, 100)); break; - case 2: - if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 0) + case 3: + if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 0) setFrame(5); setPosition(Common::Point(217, 85)); break; - case 3: - if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE)) + case 4: + if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 0) setFrame(5); setPosition(Common::Point(161, 121)); break; - case 4: - if (R2_INVENTORY.getObjectScene(R2_IGNITOR)) + case 5: + if (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 0) setFrame(5); setPosition(Common::Point(117, 121)); break; - case 5: - if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL)) + case 6: + if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) == 0) setFrame(5); setPosition(Common::Point(111, 85)); break; - case 6: - if (R2_INVENTORY.getObjectScene(R2_BATTERY)) + case 7: + if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 0) setFrame(5); setPosition(Common::Point(95, 84)); break; - case 7: { + case 8: { setup(1516, 1, 1); setPosition(Common::Point(201, 45)); Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; @@ -7424,6 +7434,9 @@ void Scene1550::UnkObj15502::subA5CDF(int strip) { default: break; } + + fixPriority(92); + setDetails(1550, 70, -1, -1, 2, (SceneItem *)NULL); } Scene1550::UnkObj15503::UnkObj15503() { @@ -7510,19 +7523,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 +7580,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 +7621,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 +7638,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 +7659,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 +7675,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 +7690,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,23 +7770,26 @@ 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; - R2_GLOBALS._player._characterScene[2] = 1550; + if ((R2_GLOBALS._player._characterScene[R2_QUINN] != 1550) && (R2_GLOBALS._player._characterScene[R2_QUINN] != 1580)) { + R2_GLOBALS._player._characterScene[R2_QUINN] = 1550; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1550; } _stripManager.setColors(60, 255); @@ -7783,14 +7800,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 +7817,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 +7832,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 +7857,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 +7895,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 +7936,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 +7951,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 +8000,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 +8037,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 +8049,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 +8065,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 +8135,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 +8143,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 +8151,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 +8171,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 +8179,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 +8193,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 +8206,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 +8248,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 +8284,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 +8308,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 +8332,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 +8360,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 +8398,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 +8588,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { } -void Scene1550::subA2B2F() { +void Scene1550::enterArea() { Rect tmpRect; _field419 = 0; _field415 = 0; @@ -8568,19 +8596,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 +8617,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 +8645,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 +8653,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 +8667,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 +8681,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 +8704,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 +8722,7 @@ void Scene1550::subA2B2F() { break; case 5: varA = 1553; - _actor15.subA4D14(6, 0); + _northWall.subA4D14(6, 0); break; default: break; @@ -8702,14 +8731,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 +8751,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 +8782,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 +8795,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 +8858,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 +8937,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 +8995,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 +9024,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 +9092,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 +9115,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 +9143,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 +9198,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 +9222,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) { - 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.setPosition(Common::Point(k5A72E[k5A76D[_field419 - 1550]], k5A73F[k5A76D[_field419 - 1550]] + 8)); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + if (R2_GLOBALS._player._characterScene[R2_SEEKER] == 1580) { + _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]); + if (R2_GLOBALS._player._characterScene[R2_QUINN] == 1580) { + _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 +9676,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 +9695,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 +9704,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 +9724,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 +9744,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 +9790,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 +9822,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 +9863,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 +9872,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 +9883,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 +9901,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 +9916,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 +9925,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 +9934,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 +9948,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) != 1580) { _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)); @@ -9978,17 +10016,8 @@ void Scene1580::signal() { * Scene 1625 - Miranda being questioned * *--------------------------------------------------------------------------*/ -Scene1625::Scene1625() { - _field412 = 0; -} -void Scene1625::synchronize(Serializer &s) { - SceneExt::synchronize(s); - - s.syncAsSint16LE(_field412); -} - -bool Scene1625::Actor7::startAction(CursorType action, Event &event) { +bool Scene1625::Wire::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); @@ -9997,10 +10026,20 @@ bool Scene1625::Actor7::startAction(CursorType action, Event &event) { scene->_sceneMode = 1631; scene->_actor3.postInit(); - scene->setAction(&scene->_sequenceManager, scene, 1631, &scene->_actor3, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1631, &scene->_actor3, &scene->_wire, NULL); return true; } +Scene1625::Scene1625() { + _field412 = 0; +} + +void Scene1625::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); +} + void Scene1625::postInit(SceneObjectList *OwnerList) { loadScene(1625); R2_GLOBALS._player._characterIndex = R2_MIRANDA; @@ -10011,23 +10050,24 @@ void Scene1625::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_soldierSpeaker); R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); - _actor7.postInit(); - _actor7.setup(1626, 2, 1); - _actor7.setPosition(Common::Point(206, 133)); - _actor7.setDetails(1625, 0, -1, -1, 1, (SceneItem *) NULL); + _wire.postInit(); + _wire.setup(1626, 2, 1); + _wire.setPosition(Common::Point(206, 133)); + _wire.setDetails(1625, 0, -1, -1, 1, (SceneItem *) NULL); _actor5.postInit(); _actor5.setup(1625, 8, 1); _actor5.setPosition(Common::Point(190, 131)); _actor5.setDetails(1625, 6, -1, 2, 1, (SceneItem *) NULL); - if (R2_GLOBALS._player._oldCharacterScene[3] == 1625) { + if (R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] == 1625) { if (!R2_GLOBALS.getFlag(83)) { - _actor4.postInit(); - _actor4.setup(1626, 4, 1); - _actor4.setPosition(Common::Point(96, 166)); - _actor4.setDetails(1625, -1, -1, -1, 1, (SceneItem *) NULL); + _glass.postInit(); + _glass.setup(1626, 4, 1); + _glass.setPosition(Common::Point(96, 166)); + _glass.setDetails(1625, -1, -1, -1, 1, (SceneItem *) NULL); } R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; @@ -10044,8 +10084,8 @@ void Scene1625::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(245); _item1.setDetails(Rect(0, 0, 320, 200), 1625, 12, -1, -1, 1, NULL); - R2_GLOBALS._player._oldCharacterScene[3] = 1625; - R2_GLOBALS._player._characterScene[3] = 1625; + R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 1625; + R2_GLOBALS._player._characterScene[R2_MIRANDA] = 1625; } void Scene1625::remove() { @@ -10057,70 +10097,69 @@ void Scene1625::signal() { switch (_sceneMode) { case 10: R2_GLOBALS._player.disableControl(); - _actor4.postInit(); - _actor4.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); + _glass.postInit(); + _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); _sceneMode = 1626; - setAction(&_sequenceManager, this, 1626, &_actor2, &_actor4, NULL); + setAction(&_sequenceManager, this, 1626, &_tealHead, &_glass, NULL); break; case 12: - // TODO: check if OK_BTN_STRING is required MessageDialog::show(DONE_MSG, OK_BTN_STRING); break; case 14: - _actor2.postInit(); - _actor2.setup(1627, 1, 1); - _actor2.setPosition(Common::Point(68, 68)); + _tealHead.postInit(); + _tealHead.setup(1627, 1, 1); + _tealHead.setPosition(Common::Point(68, 68)); _sceneMode = 99; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); _stripManager.start(831, this); break; case 99: R2_GLOBALS._player.disableControl(); - switch (_stripManager._field2E8) { - case 0: + switch (_stripManager._exitMode) { + case 1: _sceneMode = 1627; - setAction(&_sequenceManager, this, 1627, &_actor3, &_actor4, NULL); + setAction(&_sequenceManager, this, 1627, &_actor3, &_glass, NULL); break; - case 1: + case 2: _sceneMode = 1629; - setAction(&_sequenceManager, this, 1629, &_actor2, &_actor5, NULL); + setAction(&_sequenceManager, this, 1629, &_tealHead, &_actor5, NULL); break; - case 3: - R2_GLOBALS._player._oldCharacterScene[3] = 3150; - R2_GLOBALS._player._characterScene[3] = 3150; + case 4: + R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 3150; + R2_GLOBALS._player._characterScene[R2_MIRANDA] = 3150; R2_GLOBALS._player._characterIndex = R2_QUINN; - R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._characterScene[1]); + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._characterScene[R2_QUINN]); break; - case 4: + case 5: _sceneMode = 1628; - _actor2.remove(); - setAction(&_sequenceManager, this, 1628, &_actor3, &_actor4, NULL); + _tealHead.remove(); + setAction(&_sequenceManager, this, 1628, &_actor3, &_glass, NULL); break; - case 5: - _actor4.postInit(); - _actor4.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); + case 6: + _glass.postInit(); + _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); _sceneMode = 1632; - setAction(&_sequenceManager, this, 1632, &_actor4, NULL); + setAction(&_sequenceManager, this, 1632, &_glass, NULL); break; - case 6: + case 7: _sceneMode = 1633; - setAction(&_sequenceManager, this, 1633, &_actor4, NULL); + setAction(&_sequenceManager, this, 1633, &_glass, NULL); break; - case 7: + case 8: _sceneMode = 1635; setAction(&_sequenceManager, this, 1635, &_actor3, &_actor5, NULL); break; - case 8: - _actor4.postInit(); - _actor4.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); + case 9: + _glass.postInit(); + _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL); _sceneMode = 1634; setAction(&_sequenceManager, this, 1634, &_actor3, &_actor5, NULL); break; - case 2: + case 3: // No break on purpose default: _sceneMode = 1630; - _actor2.postInit(); + _tealHead.remove(); setAction(&_sequenceManager, this, 1630, &_actor1, &_actor6, NULL); break; } @@ -10128,17 +10167,17 @@ void Scene1625::signal() { _stripManager._field2E8 = 0; break; case 1625: - _actor2.postInit(); - _actor2.setup(1627, 1, 1); - _actor2.setPosition(Common::Point(68, 68)); + _tealHead.postInit(); + _tealHead.setup(1627, 1, 1); + _tealHead.setPosition(Common::Point(68, 68)); _sceneMode = 10; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); _stripManager.start(800, this); break; case 1626: - _actor2.setup(1627, 1, 1); - _actor2.setPosition(Common::Point(68, 68)); - _actor2.show(); + _tealHead.setup(1627, 1, 1); + _tealHead.setPosition(Common::Point(68, 68)); + _tealHead.show(); _actor3.postInit(); _actor3.setup(1627, 3, 1); @@ -10159,9 +10198,9 @@ void Scene1625::signal() { break; case 1628: R2_GLOBALS.setFlag(83); - _actor2.postInit(); - _actor2.setup(1627, 1, 1); - _actor2.setPosition(Common::Point(68, 68)); + _tealHead.postInit(); + _tealHead.setup(1627, 1, 1); + _tealHead.setPosition(Common::Point(68, 68)); _actor3.setup(1627, 3, 1); _actor3.setPosition(Common::Point(196, 65)); @@ -10172,9 +10211,9 @@ void Scene1625::signal() { _stripManager.start(834, this); break; case 1629: - _actor2.setup(1627, 1, 1); - _actor2.setPosition(Common::Point(68, 68)); - _actor2.show(); + _tealHead.setup(1627, 1, 1); + _tealHead.setPosition(Common::Point(68, 68)); + _tealHead.show(); _sceneMode = 99; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -10189,30 +10228,29 @@ void Scene1625::signal() { _actor3.setPosition(Common::Point(196, 65)); _actor3.show(); - _actor7.remove(); + _wire.remove(); _actor1.postInit(); _actor1.fixPriority(10); _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); break; case 1632: - _actor2.setup(1627, 1, 1); - _actor2.setPosition(Common::Point(68, 68)); - _actor2.show(); + _tealHead.setup(1627, 1, 1); + _tealHead.setPosition(Common::Point(68, 68)); + _tealHead.show(); _sceneMode = 99; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); _stripManager.start(835, this); break; case 1633: - _actor4.remove(); + _glass.remove(); _sceneMode = 99; R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); _stripManager.start(818, this); @@ -10244,9 +10282,10 @@ void Scene1625::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 1700 - + * Scene 1700 - Rim * *--------------------------------------------------------------------------*/ + Scene1700::Scene1700() { _field77A = 0; _field77C = 0; @@ -10265,7 +10304,7 @@ bool Scene1700::Item2::startAction(CursorType action, Event &event) { return SceneHotspot::startAction(action, event); } -bool Scene1700::Actor11::startAction(CursorType action, Event &event) { +bool Scene1700::RimTransport::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); @@ -10293,7 +10332,7 @@ bool Scene1700::Actor12::startAction(CursorType action, Event &event) { return true; } -void Scene1700::Exit1::changeScene() { +void Scene1700::NorthExit::changeScene() { Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); @@ -10305,7 +10344,7 @@ void Scene1700::Exit1::changeScene() { R2_GLOBALS._player.addMover(mover, &pt, scene); } -void Scene1700::Exit2::changeScene() { +void Scene1700::SouthExit::changeScene() { Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); @@ -10317,7 +10356,7 @@ void Scene1700::Exit2::changeScene() { R2_GLOBALS._player.addMover(mover, &pt, scene); } -void Scene1700::Exit3::changeScene() { +void Scene1700::WestExit::changeScene() { Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); @@ -10329,20 +10368,20 @@ void Scene1700::Exit3::changeScene() { R2_GLOBALS._player.addMover(mover, &pt, scene); } -void Scene1700::subAF3F8() { +void Scene1700::enterArea() { Rect tmpRect; R2_GLOBALS._walkRegions.load(1700); - _actor3.remove(); - _actor4.remove(); - _actor5.remove(); - _actor6.remove(); - _actor7.remove(); - _actor8.remove(); - _actor11.remove(); - + _slabWest.remove(); + _slabEast.remove(); + _slabShadowWest.remove(); + _slabShadowEast.remove(); + _westPlatform.remove(); + _rimTransportDoor.remove(); + _rimTransport.remove(); + if (_sceneMode != 40) { - _actor9.remove(); + _ledgeHopper.remove(); _actor10.remove(); } @@ -10358,68 +10397,72 @@ void Scene1700::subAF3F8() { warning("set_pane_p(_paneNumber);"); - if ((_sceneMode != 40) && (R2_GLOBALS._v565F6 != 0)){ - _actor9.postInit(); - _actor9.setup(1701, 1, 1); - _actor9.setPosition(Common::Point(220, 137)); - _actor9.setDetails(1700, 6, -1, -1, 2, (SceneItem *) NULL); + if (_sceneMode != 40 && R2_GLOBALS._rimLocation == 0) { + // Crashed ledge hopper + _ledgeHopper.postInit(); + _ledgeHopper.setup(1701, 1, 1); + _ledgeHopper.setPosition(Common::Point(220, 137)); + _ledgeHopper.setDetails(1700, 6, -1, -1, 2, (SceneItem *) NULL); R2_GLOBALS._walkRegions.enableRegion(2); R2_GLOBALS._walkRegions.enableRegion(12); } - if ((R2_GLOBALS._v565F6 + 2) % 4 == 0) { - _actor3.postInit(); - _actor3.setup(1700, 1, 1); - _actor3.setPosition(Common::Point(222, 82)); - _actor3.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); + if ((R2_GLOBALS._rimLocation + 2) % 4 == 0) { + // The slabs forming the bottom of the regular rings the rim transport travels through + _slabWest.postInit(); + _slabWest.setup(1700, 1, 1); + _slabWest.setPosition(Common::Point(222, 82)); + _slabWest.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); - _actor5.postInit(); - _actor5.setup(1700, 2, 1); - _actor5.setPosition(Common::Point(177, 82)); - _actor5.fixPriority(0); + _slabShadowWest.postInit(); + _slabShadowWest.setup(1700, 2, 1); + _slabShadowWest.setPosition(Common::Point(177, 82)); + _slabShadowWest.fixPriority(0); - _actor6.postInit(); - _actor6.setup(1700, 2, 2); - _actor6.setPosition(Common::Point(332, 96)); - _actor6.fixPriority(0); + _slabShadowEast.postInit(); + _slabShadowEast.setup(1700, 2, 2); + _slabShadowEast.setPosition(Common::Point(332, 96)); + _slabShadowEast.fixPriority(0); - _actor4.postInit(); - _actor4.setup(1700, 1, 2); - _actor4.setPosition(Common::Point(424, 84)); + _slabEast.postInit(); + _slabEast.setup(1700, 1, 2); + _slabEast.setPosition(Common::Point(424, 84)); R2_GLOBALS._walkRegions.enableRegion(11); } - if ((R2_GLOBALS._v565F6 + 399) % 800 == 0) { - _actor7.postInit(); - _actor7.setup(1700, 3, 2); - _actor7.setPosition(Common::Point(51, 141)); - _actor7.fixPriority(0); - _actor7.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); + if ((R2_GLOBALS._rimLocation + 399) % 800 == 0) { + // Enable west exit to lift + _westPlatform.postInit(); + _westPlatform.setup(1700, 3, 2); + _westPlatform.setPosition(Common::Point(51, 141)); + _westPlatform.fixPriority(0); + _westPlatform.setDetails(100, -1, -1, -1, 2, (SceneItem *) NULL); - _exit3._enabled = true; + _westExit._enabled = true; } else { R2_GLOBALS._walkRegions.enableRegion(1); - _exit3._enabled = false; + _westExit._enabled = false; } - if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._v565F6 == 25) || (R2_GLOBALS._v565F6 == -3))) - || ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._v565F6 == R2_GLOBALS._v565FA)) + if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._rimLocation == 25) || (R2_GLOBALS._rimLocation == -3))) + || ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._rimLocation == R2_GLOBALS._rimTransportLocation)) ) { - R2_GLOBALS._v565FA = R2_GLOBALS._v565F6; + // Rim transport vechile located + R2_GLOBALS._rimTransportLocation = R2_GLOBALS._rimLocation; if (!R2_GLOBALS.getFlag(15)) _field77C = 1; - _actor11.postInit(); - _actor11.setup(1700, 3, 1); - _actor11.setPosition(Common::Point(338, 150)); - _actor11.setDetails(1700, 9, -1, -1, 2, (SceneItem *) NULL); - _actor11.fixPriority(15); + _rimTransport.postInit(); + _rimTransport.setup(1700, 3, 1); + _rimTransport.setPosition(Common::Point(338, 150)); + _rimTransport.setDetails(1700, 9, -1, -1, 2, (SceneItem *) NULL); + _rimTransport.fixPriority(15); - _actor8.postInit(); - _actor8.setup(1700, 4, 1); - _actor8.setPosition(Common::Point(312, 106)); - _actor8.fixPriority(130); + _rimTransportDoor.postInit(); + _rimTransportDoor.setup(1700, 4, 1); + _rimTransportDoor.setPosition(Common::Point(312, 106)); + _rimTransportDoor.fixPriority(130); } } @@ -10433,12 +10476,9 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - _field77A = 0; - _field77C = 0; - - _exit1.setDetails(Rect(94, 0, 319, 12), EXITCURSOR_N, 1700); - _exit2.setDetails(Rect(0, 161, 319, 168), EXITCURSOR_S, 1700); - _exit3.setDetails(Rect(0, 0, 2, 138), EXITCURSOR_W, 1800); + _northExit.setDetails(Rect(94, 0, 319, 12), EXITCURSOR_N, 1700); + _southExit.setDetails(Rect(0, 161, 319, 168), EXITCURSOR_S, 1700); + _westExit.setDetails(Rect(0, 0, 12, 138), EXITCURSOR_W, 1800); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.setPosition(Common::Point(0, 0)); @@ -10503,14 +10543,14 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { warning("_actor10._actorName = \"hatch\";"); _actor10.hide(); - _actor9.postInit(); - _actor9.setup(1701, 1, 1); - _actor9.setPosition(Common::Point(220, 137)); - _actor9.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL); + _ledgeHopper.postInit(); + _ledgeHopper.setup(1701, 1, 1); + _ledgeHopper.setPosition(Common::Point(220, 137)); + _ledgeHopper.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL); _actor1.hide(); _actor2.hide(); - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_WALK); _stripManager.start(539, this); _sceneMode = 40; break; @@ -10557,13 +10597,13 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL); break; } - R2_GLOBALS._player._characterScene[1] = 1700; - R2_GLOBALS._player._characterScene[2] = 1700; - R2_GLOBALS._player._oldCharacterScene[1] = 1700; - R2_GLOBALS._player._oldCharacterScene[2] = 1700; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1700; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1700; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1700; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1700; R2_GLOBALS._v558B6.set(20, 0, 320, 200); - subAF3F8(); + enterArea(); _item1.setDetails(1, 1700, 3, -1, -1); _item2.setDetails(Rect(0, 0, 480, 200), 1700, 0, -1, -1, 1, NULL); } @@ -10577,9 +10617,9 @@ void Scene1700::signal() { switch (_sceneMode) { case 1: { _sceneMode = 3; - if ((R2_GLOBALS._v565F6 < 2400) && (R2_GLOBALS._v565F6 >= 0)) - ++R2_GLOBALS._v565F6; - subAF3F8(); + if (R2_GLOBALS._rimLocation < 2400) + ++R2_GLOBALS._rimLocation; + enterArea(); R2_GLOBALS._player.setPosition(Common::Point(235 - (((((235 - R2_GLOBALS._player._position.x) * 100) / 103) * 167) / 100), 170)); Common::Point pt(R2_GLOBALS._player._position.x, 160); NpcMover *mover = new NpcMover(); @@ -10602,9 +10642,9 @@ void Scene1700::signal() { break; case 2: { _sceneMode = 3; - if ((R2_GLOBALS._v565F6 > -2400) && (R2_GLOBALS._v565F6 < 0)) - R2_GLOBALS._v565F6--; - subAF3F8(); + if (R2_GLOBALS._rimLocation > -2400) + --R2_GLOBALS._rimLocation; + enterArea(); R2_GLOBALS._player.setPosition(Common::Point(235 - (((((235 - R2_GLOBALS._player._position.x) * 100) / 167) * 103) / 100), 0)); Common::Point pt(R2_GLOBALS._player._position.x, 10); NpcMover *mover = new NpcMover(); @@ -10627,12 +10667,12 @@ void Scene1700::signal() { break; case 3: if (_field77C == 0) { - R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_WALK); } else { R2_GLOBALS.setFlag(15); _field77C = 0; _sceneMode = 31; - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_WALK); if (R2_GLOBALS._player._characterIndex == R2_QUINN) _stripManager.start(542, this); else @@ -10644,10 +10684,10 @@ void Scene1700::signal() { Common::Point pt(271, 90); PlayerMover *mover = new PlayerMover(); _actor12.addMover(mover, &pt, NULL); - if (R2_GLOBALS._player._characterIndex == 1) - setAction(&_sequenceManager, this, 1700, &R2_GLOBALS._player, &_actor8, NULL); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) + setAction(&_sequenceManager, this, 1700, &R2_GLOBALS._player, &_rimTransportDoor, NULL); else - setAction(&_sequenceManager, this, 1701, &R2_GLOBALS._player, &_actor8, NULL); + setAction(&_sequenceManager, this, 1701, &R2_GLOBALS._player, &_rimTransportDoor, NULL); } break; case 5: @@ -10661,13 +10701,13 @@ void Scene1700::signal() { R2_GLOBALS._player._strip = 1; _actor12.setObjectWrapper(new SceneObjectWrapper()); _actor12._strip = 1; - R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_WALK); R2_GLOBALS._walkRegions.enableRegion(14); break; case 8: R2_GLOBALS._player._strip = 2; _actor12._strip = 1; - R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_WALK); R2_GLOBALS._walkRegions.enableRegion(12); break; case 30: @@ -10686,7 +10726,7 @@ void Scene1700::signal() { case 40: R2_GLOBALS._player.disableControl(); _sceneMode = 1704; - setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_actor12, &_actor10, &_actor9, &_actor1, &_actor2, NULL); + setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_actor12, &_actor10, &_ledgeHopper, &_actor1, &_actor2, NULL); break; case 50: if (R2_GLOBALS._player._characterIndex == R2_QUINN) @@ -10702,7 +10742,7 @@ void Scene1700::signal() { R2_GLOBALS._walkRegions.enableRegion(2); R2_GLOBALS._walkRegions.enableRegion(12); R2_GLOBALS._player.fixPriority(-1); - R2_GLOBALS._player.enableControl(CURSOR_ARROW); + R2_GLOBALS._player.enableControl(CURSOR_WALK); break; default: R2_GLOBALS._player.enableControl(); @@ -10711,162 +10751,171 @@ void Scene1700::signal() { } /*-------------------------------------------------------------------------- - * Scene 1750 - + * Scene 1750 - Maintaiance Vechile * *--------------------------------------------------------------------------*/ -Scene1750::Actor4::Actor4() { - _fieldA4 = 0; - _fieldA6 = 0; - _fieldA8 = 0; - _fieldAA = 0; - _fieldAC = 0; - _fieldAE = 0; + +Scene1750::Button::Button() { + _buttonId = 0; } -void Scene1750::Actor4::synchronize(Serializer &s) { +void Scene1750::Button::synchronize(Serializer &s) { SceneActor::synchronize(s); - s.syncAsSint16LE(_fieldA4); - s.syncAsSint16LE(_fieldA6); - s.syncAsSint16LE(_fieldA8); - s.syncAsSint16LE(_fieldAA); - s.syncAsSint16LE(_fieldAC); - s.syncAsSint16LE(_fieldAE); + s.syncAsSint16LE(_buttonId); } -Scene1750::Actor5::Actor5() { - _fieldA4 = 0; -} +bool Scene1750::Button::startAction(CursorType action, Event &event) { + if (action != CURSOR_USE) + return SceneActor::startAction(action, event); -void Scene1750::Actor5::synchronize(Serializer &s) { - SceneActor::synchronize(s); + Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene; - s.syncAsSint16LE(_fieldA4); + switch (_buttonId) { + case 1: + // Forward button + show(); + scene->_backwardButton.hide(); + if (scene->_speed < 0) + scene->_speed = -scene->_speed; + scene->_direction = 1; + break; + case 2: + // Backwards button + show(); + scene->_forwardButton.hide(); + if (scene->_speed > 0) + scene->_speed = -scene->_speed; + scene->_direction = -1; + break; + case 3: + // Exit button + if (scene->_rotation->_idxChange == 0) { + show(); + R2_GLOBALS._sceneManager.changeScene(1700); + } else { + scene->_speed = 0; + scene->_speedSlider._moveRate = 20; + scene->_forwardButton._moveDiff.y = 1; + Common::Point pt(286, 143); + NpcMover *mover = new NpcMover(); + scene->_speedSlider.addMover(mover, &pt, NULL); + } + default: + break; + } + + return true; } -Scene1750::Scene1750() { - _field412 = 0; - _field413 = 0; - _field415 = 0; - _field417 = 0; - _field419 = 0; - _field41B = 0; - _field41D = 0; +/*------------------------------------------------------------------------*/ + +Scene1750::SpeedSlider::SpeedSlider() { + _incrAmount = 0; + _xp = 0; + _ys = 0; + _height = 0; + _thumbHeight = 0; + _mouseDown = false; } -void Scene1750::synchronize(Serializer &s) { - SceneExt::synchronize(s); - SYNC_POINTER(_rotation); +void Scene1750::SpeedSlider::synchronize(Serializer &s) { + SceneActor::synchronize(s); - s.syncAsSint16LE(_field412); - s.syncAsSint16LE(_field413); - s.syncAsSint16LE(_field415); - s.syncAsSint16LE(_field417); - s.syncAsSint16LE(_field419); - s.syncAsSint16LE(_field41B); - s.syncAsSint16LE(_field41D); + s.syncAsSint16LE(_incrAmount); + s.syncAsSint16LE(_xp); + s.syncAsSint16LE(_ys); + s.syncAsSint16LE(_height); + s.syncAsSint16LE(_thumbHeight); + s.syncAsSint16LE(_mouseDown); } -void Scene1750::Actor4::subB1A76(int arg1, int arg2, int arg3, int arg4, int arg5) { - _fieldA4 = arg1; - _fieldAE = 0; - _fieldA6 = arg2; - _fieldA8 = arg3; - _fieldAA = arg4; - _fieldAC = arg5; +void Scene1750::SpeedSlider::setupSlider(int incrAmount, int xp, int ys, int height, int thumbHeight) { + _mouseDown = false; + _incrAmount = incrAmount; + _xp = xp; + _ys = ys; + _height = height; + _thumbHeight = thumbHeight; postInit(); setup(1750, 1, 1); fixPriority(255); - setPosition(Common::Point(_fieldA6, _fieldA8 + ((_fieldAA * (arg1 - 1)) / (_fieldAC - 1)))); + setPosition(Common::Point(_xp, _ys + ((_height * (incrAmount - 1)) / (_thumbHeight - 1)))); } -void Scene1750::Actor4::subB1B27() { +void Scene1750::SpeedSlider::calculateSlider() { Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene; - int tmpVar = (_fieldAA / (_fieldAC - 1)) / 2; - int tmpVar2 = ((_position.y - _fieldA8 + tmpVar) * _fieldAC) / (_fieldAA + 2 * tmpVar); + int tmpVar = (_height / (_thumbHeight - 1)) / 2; + int tmpVar2 = ((_position.y - _ys + tmpVar) * _thumbHeight) / (_height + 2 * tmpVar); - setPosition(Common::Point(_fieldA6, _fieldA8 + ((_fieldAA * tmpVar2) / (_fieldAC - 1)))); - scene->_field415 = scene->_field412 * tmpVar2; + setPosition(Common::Point(_xp, _ys + ((_height * tmpVar2) / (_thumbHeight - 1)))); + scene->_speed = scene->_direction * tmpVar2; } -void Scene1750::Actor4::remove() { +void Scene1750::SpeedSlider::remove() { // Function kept to match IDA. Could be removed. SceneActor::remove(); } -void Scene1750::Actor4::process(Event &event) { - if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos))) { - _fieldAE = 1; +void Scene1750::SpeedSlider::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && + (_bounds.contains(event.mousePos))) { + _mouseDown = true; event.eventType = EVENT_NONE; } - if ((event.eventType == EVENT_BUTTON_UP) && (_fieldAE != 0)) { - _fieldAE = 0; + if ((event.eventType == EVENT_BUTTON_UP) && _mouseDown) { + _mouseDown = false; event.handled = true; addMover(NULL); - subB1B27(); + calculateSlider(); } - if (_fieldAE != 0) { + if (_mouseDown) { event.handled = true; - if (event.mousePos.y >= _fieldA8) { - if (_fieldA8 + _fieldAA >= event.mousePos.y) - setPosition(Common::Point(_fieldA6, event.mousePos.y)); + if (event.mousePos.y >= _ys) { + if (_ys + _height >= event.mousePos.y) + setPosition(Common::Point(_xp, event.mousePos.y)); else - setPosition(Common::Point(_fieldA6, _fieldA8 + _fieldAA)); + setPosition(Common::Point(_xp, _ys + _height)); } else { - setPosition(Common::Point(_fieldA6, _fieldA8)); + setPosition(Common::Point(_xp, _ys)); } } } -bool Scene1750::Actor4::startAction(CursorType action, Event &event) { +bool Scene1750::SpeedSlider::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) return SceneActor::startAction(action, event); return false; } -bool Scene1750::Actor5::startAction(CursorType action, Event &event) { - if (action != CURSOR_USE) - return SceneActor::startAction(action, event); +/*------------------------------------------------------------------------*/ - Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene; +Scene1750::Scene1750() { + _direction = 0; + _field413 = 0; + _speed = 0; + _field417 = 0; + _field419 = 0; + _field41B = 0; + _field41D = 0; +} - switch (_fieldA4) { - case 1: - show(); - scene->_actor6.hide(); - if (scene->_field415 < 0) - scene->_field415 ^= 0xFFFE; - scene->_field412 = 1; - break; - case 2: - show(); - scene->_actor5.hide(); - if (scene->_field415 > 0) - scene->_field415 ^= 0xFFFE; - scene->_field412 = -1; - break; - case 3: - if (scene->_rotation->_idxChange == 0) { - show(); - R2_GLOBALS._sceneManager.changeScene(1700); - } else { - scene->_field415 = 0; - scene->_actor4._moveRate = 20; - scene->_actor5._moveDiff.y = 1; - Common::Point pt(286, 143); - NpcMover *mover = new NpcMover(); - scene->_actor4.addMover(mover, &pt, NULL); - } - default: - break; - } +void Scene1750::synchronize(Serializer &s) { + SceneExt::synchronize(s); + SYNC_POINTER(_rotation); - return true; + s.syncAsSint16LE(_direction); + s.syncAsSint16LE(_field413); + s.syncAsSint16LE(_speed); + s.syncAsSint16LE(_field417); + s.syncAsSint16LE(_field419); + s.syncAsSint16LE(_field41B); + s.syncAsSint16LE(_field41D); } void Scene1750::postInit(SceneObjectList *OwnerList) { @@ -10876,17 +10925,17 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._v5589E.set(0, 0, 320, 200); SceneExt::postInit(); - R2_GLOBALS._player._characterScene[1] = 1750; - R2_GLOBALS._player._characterScene[2] = 1750; - R2_GLOBALS._player._oldCharacterScene[1] = 1750; - R2_GLOBALS._player._oldCharacterScene[2] = 1750; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1750; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1750; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1750; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1750; _rotation = R2_GLOBALS._scenePalette.addRotation(224, 254, 1); _rotation->setDelay(0); _rotation->_idxChange = 0; _rotation->_countdown = 2; - switch ((R2_GLOBALS._v565F6 + 2) % 4) { + switch ((R2_GLOBALS._rimLocation + 2) % 4) { case 0: _rotation->_currIndex = 247; break; @@ -10932,7 +10981,7 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { _actor1.postInit(); _actor1.setup(1750, 2, 1); - _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._v565F6 % 800) * 4) - 1440)); + _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._rimLocation % 800) * 4) - 1440)); _actor1.fixPriority(8); _actor2.postInit(); @@ -10947,51 +10996,49 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { else _actor2.setPosition(Common::Point(148, (tmpVar * 7) + 122)); - _actor4.subB1A76(1, 286, 143, 41, 15); - _actor4.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL); - - _actor5.postInit(); - _actor5._fieldA4 = 1; - _actor5.setup(1750, 1, 2); - _actor5.setPosition(Common::Point(192, 140)); - _actor5.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); - - _actor6.postInit(); - _actor6._fieldA4 = 2; - _actor6.setup(1750, 1, 3); - _actor6.setPosition(Common::Point(192, 163)); - _actor6.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); - _actor6.hide(); - - _actor7.postInit(); - _actor7._fieldA4 = 3; - _actor7.setup(1750, 1, 5); - _actor7.setPosition(Common::Point(230, 183)); - _actor7.setDetails(1750, 27, 1, -1, 1, (SceneItem *) NULL); - - _field412 = 1; + _speedSlider.setupSlider(1, 286, 143, 41, 15); + _speedSlider.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL); + + _forwardButton.postInit(); + _forwardButton._buttonId = 1; + _forwardButton.setup(1750, 1, 2); + _forwardButton.setPosition(Common::Point(192, 140)); + _forwardButton.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); + + _backwardButton.postInit(); + _backwardButton._buttonId = 2; + _backwardButton.setup(1750, 1, 3); + _backwardButton.setPosition(Common::Point(192, 163)); + _backwardButton.setDetails(1750, 18, 1, -1, 1, (SceneItem *) NULL); + _backwardButton.hide(); + + _exitButton.postInit(); + _exitButton._buttonId = 3; + _exitButton.setup(1750, 1, 5); + _exitButton.setPosition(Common::Point(230, 183)); + _exitButton.setDetails(1750, 27, 1, -1, 1, (SceneItem *) NULL); + + _direction = 1; // Forward by default _field417 = 0; _field413 = 0; - _field415 = 0; + _speed = 0; _field419 = ((_rotation->_currIndex - 218) / 4) % 4; - _item2.setDetails(Rect(129, 112, 155, 175), 1750, 21, -1, -1, 1, NULL); - _item3.setDetails(Rect(93, 122, 126, 172), 1750, 15, -1, -1, 1, NULL); - _item4.setDetails(Rect(3, 3, 157, 99), 1750, 9, -1, -1, 1, NULL); - _item5.setDetails(Rect(162, 3, 316, 99), 1750, 12, -1, -1, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 1750, 6, 1, -1, 1, NULL); + _redLights.setDetails(Rect(129, 112, 155, 175), 1750, 21, -1, -1, 1, NULL); + _greenLights.setDetails(Rect(93, 122, 126, 172), 1750, 15, -1, -1, 1, NULL); + _frontView.setDetails(Rect(3, 3, 157, 99), 1750, 9, -1, -1, 1, NULL); + _rearView.setDetails(Rect(162, 3, 316, 99), 1750, 12, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 1750, 6, 1, -1, 1, NULL); } void Scene1750::remove() { - _rotation->remove(); - - if (R2_GLOBALS._v565F6 == 2400) - R2_GLOBALS._v565F6 = 2399; + if (R2_GLOBALS._rimLocation == 2400) + R2_GLOBALS._rimLocation = 2399; - if (R2_GLOBALS._v565F6 == -2400) - R2_GLOBALS._v565F6 = -2399; + if (R2_GLOBALS._rimLocation == -2400) + R2_GLOBALS._rimLocation = -2399; - R2_GLOBALS._v565FA = R2_GLOBALS._v565F6; + R2_GLOBALS._rimTransportLocation = R2_GLOBALS._rimLocation; SceneExt::remove(); R2_GLOBALS._sound1.fadeOut2(NULL); @@ -11007,26 +11054,95 @@ void Scene1750::signal() { void Scene1750::process(Event &event) { Scene::process(event); if (!event.handled) - _actor4.process(event); + _speedSlider.process(event); } -void Scene1750::dispatch() {} +void Scene1750::dispatch() { + if (_rotation) { + if (!_field417 && (_speed != _field413)) { + if (_field413 >= _speed) + --_field413; + else + ++_field413; + + _field417 = 21 - ABS(_field413); + } + + if (_field417 == 1) { + if (_field413 == 0) { + _actor3.show(); + _rotation->_idxChange = 0; + } else { + if (_rotation->_idxChange == 0) + _actor3.hide(); + + if (_field413 < -12) { + _rotation->setDelay(15 - ABS(_field413)); + _rotation->_idxChange = -2; + } else if (_field413 < 0) { + _rotation->setDelay(10 - ABS(_field413)); + _rotation->_idxChange = -1; + } else if (_field413 < 11) { + _rotation->setDelay(10 - _field413); + _rotation->_idxChange = 1; + } else { + _rotation->setDelay(15 - _field413); + _rotation->_idxChange = 2; + } + } + } + + if (_field417) + --_field417; + + _field41B = _field419; + _field419 = ((_rotation->_currIndex - 218) / 4) / 4; + + if ((_field41B + 1) == _field419 || (_field41B - 3) == _field419) { + if (R2_GLOBALS._rimLocation < 2400) { + ++R2_GLOBALS._rimLocation; + } + } + + if ((_field41B - 1) == _field419 || (_field41B + 3) == _field419) { + if (R2_GLOBALS._rimLocation > -2400) { + --R2_GLOBALS._rimLocation; + } + } + + if (_rotation->_currIndex != _field41D) { + _field41D = _rotation->_currIndex; + _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + + ((R2_GLOBALS._rimLocation % 800) * 4) - 1440)); + } + } + + int v = ABS(_actor1._position.y - 158) / 100; + if (v < 8) { + _actor2.show(); + _actor2.setPosition(Common::Point((_actor1._position.y <= 158) ? 137 : 148, + v * 7 + 122)); + } else { + _actor2.hide(); + } +} /*-------------------------------------------------------------------------- - * Scene 1800 - + * Scene 1800 - Rim Lift Exterior * *--------------------------------------------------------------------------*/ + Scene1800::Scene1800() { - _field412 = 0; + _locationMode = 0; } void Scene1800::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_locationMode); } -bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { +bool Scene1800::Background::startAction(CursorType action, Event &event) { if ((action != R2_COM_SCANNER) && (action != R2_COM_SCANNER_2)) return false; @@ -11035,7 +11151,7 @@ bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - if (R2_GLOBALS._v565F6 == 1201) { + if (R2_GLOBALS._rimLocation == 1201) { scene->_stripManager.start(548, this); } else if (R2_GLOBALS.getFlag(66)) { return false; @@ -11043,7 +11159,7 @@ bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { scene->_stripManager.start(546, this); } } else { - if (R2_GLOBALS._v565F6 == 1201) { + if (R2_GLOBALS._rimLocation == 1201) { scene->_stripManager.start(549, this); } else if (R2_GLOBALS.getFlag(66)) { return false; @@ -11056,7 +11172,7 @@ bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) { return true; } -bool Scene1800::Actor6::startAction(CursorType action, Event &event) { +bool Scene1800::Lever::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); @@ -11072,31 +11188,34 @@ bool Scene1800::Actor6::startAction(CursorType action, Event &event) { if (_frame == 1) { R2_GLOBALS.setFlag(64); scene->_sceneMode = 1810; - scene->setAction(&scene->_sequenceManager, scene, 1810, &R2_GLOBALS._player, &scene->_actor6, &scene->_actor4, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1810, &R2_GLOBALS._player, &scene->_lever, &scene->_leftStaircase, &scene->_rightStaircase, NULL); } else { R2_GLOBALS.clearFlag(64); scene->_sceneMode = 1811; - scene->setAction(&scene->_sequenceManager, scene, 1811, &R2_GLOBALS._player, &scene->_actor6, &scene->_actor4, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1811, &R2_GLOBALS._player, &scene->_lever, &scene->_leftStaircase, &scene->_rightStaircase, NULL); } return true; } -bool Scene1800::Actor7::startAction(CursorType action, Event &event) { +bool Scene1800::Doors::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { + // Seeker trying to force open the door R2_GLOBALS._player.disableControl(); - if (scene->_field412 >= 2) { + if (scene->_locationMode >= 2) { if (R2_GLOBALS.getFlag(14)) { + // Allow door to close scene->_sceneMode = 1809; - scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_doors, NULL); R2_GLOBALS.clearFlag(14); } else { + // Force open door scene->_sceneMode = 1808; - scene->setAction(&scene->_sequenceManager, scene, 1808, &R2_GLOBALS._player, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1808, &R2_GLOBALS._player, &scene->_doors, NULL); R2_GLOBALS.setFlag(14); } } else { @@ -11106,6 +11225,7 @@ bool Scene1800::Actor7::startAction(CursorType action, Event &event) { } else if (R2_GLOBALS.getFlag(14)) { return SceneActor::startAction(action, event); } else { + // Quinn trying to force open doors R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1812; scene->setAction(&scene->_sequenceManager, scene, 1812, &R2_GLOBALS._player, NULL); @@ -11114,40 +11234,40 @@ bool Scene1800::Actor7::startAction(CursorType action, Event &event) { return true; } -bool Scene1800::Actor8::startAction(CursorType action, Event &event) { +bool Scene1800::PassengerDoor::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; if (_position.x < 160) { - if (scene->_actor4._frame == 1) { + if (scene->_leftStaircase._frame == 1) { return SceneActor::startAction(action, event); } else { R2_GLOBALS.setFlag(29); R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS.getFlag(14)) { - scene->_sceneMode = 1804; - scene->setAction(&scene->_sequenceManager, scene, 1804, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor8, NULL); - } else { scene->_sceneMode = 1; - scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_companion, &scene->_doors, NULL); R2_GLOBALS.clearFlag(14); + } else { + scene->_sceneMode = 1804; + scene->setAction(&scene->_sequenceManager, scene, 1804, &R2_GLOBALS._player, &scene->_companion, &scene->_leftDoor, NULL); } } else { if (R2_GLOBALS.getFlag(14)) { scene->_sceneMode = 1; - scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_doors, NULL); R2_GLOBALS.clearFlag(14); } else { scene->_sceneMode = 1805; - scene->setAction(&scene->_sequenceManager, scene, 1805, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor8, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1805, &R2_GLOBALS._player, &scene->_companion, &scene->_leftDoor, NULL); } } } } else { - if (scene->_actor4._frame == 1) { + if (scene->_leftStaircase._frame == 1) { return SceneActor::startAction(action, event); } else { R2_GLOBALS.clearFlag(29); @@ -11155,20 +11275,20 @@ bool Scene1800::Actor8::startAction(CursorType action, Event &event) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS.getFlag(14)) { scene->_sceneMode = 2; - scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_companion, &scene->_doors, NULL); R2_GLOBALS.clearFlag(14); } else { scene->_sceneMode = 1806; - scene->setAction(&scene->_sequenceManager, scene, 1806, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor9, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1806, &R2_GLOBALS._player, &scene->_companion, &scene->_rightDoor, NULL); } } else { if (R2_GLOBALS.getFlag(14)) { scene->_sceneMode = 2; - scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_doors, NULL); R2_GLOBALS.clearFlag(14); } else { scene->_sceneMode = 1807; - scene->setAction(&scene->_sequenceManager, scene, 1807, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor9, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1807, &R2_GLOBALS._player, &scene->_companion, &scene->_rightDoor, NULL); } } } @@ -11186,16 +11306,16 @@ void Scene1800::Exit1::changeScene() { if (R2_GLOBALS.getFlag(14)) { scene->_sceneMode = 3; if (R2_GLOBALS._player._characterIndex == R2_QUINN) - scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_companion, &scene->_doors, NULL); else - scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_actor2, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_doors, NULL); R2_GLOBALS.clearFlag(14); } else { scene->_sceneMode = 1802; if (R2_GLOBALS._player._characterIndex == R2_QUINN) - scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_companion, NULL); else - scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_companion, NULL); } } @@ -11207,95 +11327,98 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_seekerSpeaker); if (R2_GLOBALS._sceneManager._previousScene == -1) - R2_GLOBALS._v565F6 = 1201; + R2_GLOBALS._rimLocation = 1201; - if (R2_GLOBALS._v565F6 == 1201) - _field412 = 2; + // Set the mode based on whether this is the "correct" lift or not + if (R2_GLOBALS._rimLocation == 1201) + _locationMode = 2; else - _field412 = 0; + _locationMode = 0; scalePalette(65, 65, 65); _exit1.setDetails(Rect(0, 160, 319, 168), EXITCURSOR_S, 1800); - _item5.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL); - - _actor6.postInit(); - _actor6.setup(1801, 4, 1); - _actor6.setPosition(Common::Point(170, 24)); - _actor6.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL); - - _actor7.postInit(); - _actor7.setup(1801, 3, 1); - _actor7.setPosition(Common::Point(160, 139)); - _actor7.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL); - - _actor8.postInit(); - _actor8.setup(1800, 1, 1); - _actor8.setPosition(Common::Point(110, 78)); - _actor8.fixPriority(135); - _actor8.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); - - _actor9.postInit(); - _actor9.setup(1800, 2, 1); - _actor9.setPosition(Common::Point(209, 78)); - _actor9.fixPriority(135); - _actor9.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); - - _actor4.postInit(); - if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64))) - _actor4.setup(1801, 2, 1); + _background.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL); + + _lever.postInit(); + _lever.setup(1801, 4, 1); + _lever.setPosition(Common::Point(170, 124)); + _lever.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL); + + _doors.postInit(); + _doors.setup(1801, 3, 1); + _doors.setPosition(Common::Point(160, 139)); + _doors.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL); + + _leftDoor.postInit(); + _leftDoor.setup(1800, 1, 1); + _leftDoor.setPosition(Common::Point(110, 78)); + _leftDoor.fixPriority(135); + _leftDoor.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); + + _rightDoor.postInit(); + _rightDoor.setup(1800, 2, 1); + _rightDoor.setPosition(Common::Point(209, 78)); + _rightDoor.fixPriority(135); + _rightDoor.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL); + + _leftStaircase.postInit(); + if ((_locationMode != 1) && (_locationMode != 3) && (!R2_GLOBALS.getFlag(64))) + _leftStaircase.setup(1801, 2, 1); else - _actor4.setup(1801, 2, 10); - _actor4.setPosition(Common::Point(76, 142)); - _actor4.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); + _leftStaircase.setup(1801, 2, 10); + _leftStaircase.setPosition(Common::Point(76, 142)); + _leftStaircase.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); - _actor5.postInit(); - if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64))) - _actor5.setup(1801, 1, 1); + _rightStaircase.postInit(); + if ((_locationMode != 1) && (_locationMode != 3) && (!R2_GLOBALS.getFlag(64))) + _rightStaircase.setup(1801, 1, 1); else - _actor5.setup(1801, 1, 10); - _actor5.setPosition(Common::Point(243, 142)); - _actor5.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); + _rightStaircase.setup(1801, 1, 10); + _rightStaircase.setPosition(Common::Point(243, 142)); + _rightStaircase.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + // Standard Quinn setup + R2_GLOBALS._player.setVisage(1503); + R2_GLOBALS._player._moveDiff = Common::Point(2, 2); + } else { + // Seeker setup dependent on whether he's holding the doors or not if (R2_GLOBALS.getFlag(14)) { R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); R2_GLOBALS._player.setObjectWrapper(NULL); R2_GLOBALS._player.setup(1801, 5, 12); R2_GLOBALS._player.setPosition(Common::Point(160, 139)); R2_GLOBALS._walkRegions.enableRegion(9); - _actor7.hide(); + _doors.hide(); } else { R2_GLOBALS._player.setVisage(1507); } R2_GLOBALS._player._moveDiff = Common::Point(4, 2); - } else { - R2_GLOBALS._player.setVisage(1503); - R2_GLOBALS._player._moveDiff = Common::Point(2, 2); } - _actor2.postInit(); - _actor2.animate(ANIM_MODE_1, NULL); - _actor2.setObjectWrapper(new SceneObjectWrapper()); + _companion.postInit(); + _companion.animate(ANIM_MODE_1, NULL); + _companion.setObjectWrapper(new SceneObjectWrapper()); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS.getFlag(14)) { - _actor2.animate(ANIM_MODE_NONE, NULL); - _actor2.setObjectWrapper(NULL); - _actor2.setup(1801, 5, 12); + _companion.animate(ANIM_MODE_NONE, NULL); + _companion.setObjectWrapper(NULL); + _companion.setup(1801, 5, 12); R2_GLOBALS._walkRegions.enableRegion(9); - _actor7.hide(); + _doors.hide(); } else { - _actor2.setup(1507, 1, 1); - _actor2.setPosition(Common::Point(180, 160)); + _companion.setup(1507, 1, 1); + _companion.setPosition(Common::Point(180, 160)); } - _actor2.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); - _actor2._moveDiff = Common::Point(4, 2); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + _companion._moveDiff = Common::Point(4, 2); } else { - _actor2.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); - _actor2.setVisage(1503); - _actor2._moveDiff = Common::Point(2, 2); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + _companion.setVisage(1503); + _companion._moveDiff = Common::Point(2, 2); } if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) { @@ -11303,11 +11426,11 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setPosition(Common::Point(114, 150)); R2_GLOBALS._player.setStrip(5); if (R2_GLOBALS.getFlag(14)) { - _actor2.setPosition(Common::Point(160, 139)); + _companion.setPosition(Common::Point(160, 139)); R2_GLOBALS._walkRegions.enableRegion(8); } else { - _actor2.setPosition(Common::Point(209, 150)); - _actor2.setStrip(6); + _companion.setPosition(Common::Point(209, 150)); + _companion.setStrip(6); R2_GLOBALS._walkRegions.enableRegion(8); } } else { @@ -11318,18 +11441,18 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setPosition(Common::Point(209, 150)); R2_GLOBALS._player.setStrip(6); } - _actor2.setPosition(Common::Point(114, 150)); - _actor2.setStrip(5); + _companion.setPosition(Common::Point(114, 150)); + _companion.setStrip(5); R2_GLOBALS._walkRegions.enableRegion(10); R2_GLOBALS._walkRegions.enableRegion(11); } } else { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setPosition(Common::Point(140, 160)); - _actor2.setPosition(Common::Point(180, 160)); + _companion.setPosition(Common::Point(180, 160)); } else { R2_GLOBALS._player.setPosition(Common::Point(180, 160)); - _actor2.setPosition(Common::Point(140, 160)); + _companion.setPosition(Common::Point(140, 160)); } } @@ -11355,10 +11478,10 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { _actor3._effect = 5; _actor3._field9C = _field312; - _actor2._linkedActor = &_actor3; + _companion._linkedActor = &_actor3; - R2_GLOBALS._player._characterScene[1] = 1800; - R2_GLOBALS._player._characterScene[2] = 1800; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1800; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1800; _item2.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL); _item1.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL); @@ -11380,32 +11503,32 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS.getFlag(29)) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _sceneMode = 1814; - setAction(&_sequenceManager, this, 1814, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + setAction(&_sequenceManager, this, 1814, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL); } else { _sceneMode = 1815; - setAction(&_sequenceManager, this, 1815, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + setAction(&_sequenceManager, this, 1815, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL); } } else { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _sceneMode = 1816; - setAction(&_sequenceManager, this, 1816, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + setAction(&_sequenceManager, this, 1816, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL); } else { _sceneMode = 1817; - setAction(&_sequenceManager, this, 1817, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + setAction(&_sequenceManager, this, 1817, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL); } } } else { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _sceneMode = 1800; - setAction(&_sequenceManager, this, 1800, &R2_GLOBALS._player, &_actor2, NULL); + setAction(&_sequenceManager, this, 1800, &R2_GLOBALS._player, &_companion, NULL); } else { _sceneMode = 1801; - setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_actor2, NULL); + setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_companion, NULL); } } - R2_GLOBALS._player._oldCharacterScene[1] = 1800; - R2_GLOBALS._player._oldCharacterScene[2] = 1800; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1800; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1800; } void Scene1800::signal() { @@ -11413,27 +11536,27 @@ void Scene1800::signal() { case 1: if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _sceneMode = 1804; - setAction(&_sequenceManager, this, 1804, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + setAction(&_sequenceManager, this, 1804, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL); } else { _sceneMode = 1805; - setAction(&_sequenceManager, this, 1805, &R2_GLOBALS._player, &_actor2, &_actor8, NULL); + setAction(&_sequenceManager, this, 1805, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL); } break; case 2: if (R2_GLOBALS._player._characterIndex == R2_QUINN) { _sceneMode = 1806; - setAction(&_sequenceManager, this, 1806, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + setAction(&_sequenceManager, this, 1806, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL); } else { _sceneMode = 1807; - setAction(&_sequenceManager, this, 1807, &R2_GLOBALS._player, &_actor2, &_actor9, NULL); + setAction(&_sequenceManager, this, 1807, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL); } break; case 3: _sceneMode = 1802; if (R2_GLOBALS._player._characterIndex == R2_QUINN) - setAction(&_sequenceManager, this, 1802, &R2_GLOBALS._player, &_actor2, NULL); + setAction(&_sequenceManager, this, 1802, &R2_GLOBALS._player, &_companion, NULL); else - setAction(&_sequenceManager, this, 1803, &R2_GLOBALS._player, &_actor2, NULL); + setAction(&_sequenceManager, this, 1803, &R2_GLOBALS._player, &_companion, NULL); break; case 10: // No break on purpose @@ -11503,7 +11626,7 @@ void Scene1800::signal() { break; case 1808: _sceneMode = 12; - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_WALK); _stripManager.start(553, this); break; case 1812: @@ -11537,18 +11660,11 @@ void Scene1800::saveCharacter(int characterIndex) { } /*-------------------------------------------------------------------------- - * Scene 1850 - + * Scene 1850 - Rim Lift Interior * *--------------------------------------------------------------------------*/ -Scene1850::Scene1850() { - warning("STUBBED: Scene1850()"); -} - -void Scene1850::synchronize(Serializer &s) { - warning("STUBBED: Scene1850::synchronize()"); -} -bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { +bool Scene1850::Button::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneHotspot::startAction(action, event); @@ -11566,9 +11682,9 @@ bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { scene->_sceneMode = 1860; if (R2_GLOBALS.getFlag(32)) - scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_robot, NULL); else - scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_robot, NULL); R2_GLOBALS.clearFlag(30); } else { @@ -11583,21 +11699,21 @@ bool Scene1850::Hotspot2::startAction(CursorType action, Event &event) { return true; } -bool Scene1850::Actor5::startAction(CursorType action, Event &event) { +bool Scene1850::Robot::startAction(CursorType action, Event &event) { Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: - if ((R2_GLOBALS._player._characterIndex != R2_SEEKER) || (R2_GLOBALS.getFlag(33)) || (R2_GLOBALS.getFlag(30))) + if ((R2_GLOBALS._player._characterIndex != R2_SEEKER) || R2_GLOBALS.getFlag(33) || R2_GLOBALS.getFlag(30)) return SceneActor::startAction(action, event); R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1857; if (R2_GLOBALS.getFlag(32)) - scene->setAction(&scene->_sequenceManager1, scene, 1858, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1858, &R2_GLOBALS._player, &scene->_robot, NULL); else - scene->setAction(&scene->_sequenceManager1, scene, 1857, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1857, &R2_GLOBALS._player, &scene->_robot, NULL); R2_GLOBALS.setFlag(30); return true; @@ -11616,7 +11732,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 30; - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_WALK); scene->_stripManager.start(558, scene); return true; @@ -11636,8 +11752,8 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { return true; } else if (R2_GLOBALS.getFlag(70)) { R2_GLOBALS._player.disableControl(); - scene->_sceneMode = 30; - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + scene->_sceneMode = 20; + R2_GLOBALS._events.setCursor(CURSOR_WALK); scene->_stripManager.start(557, scene); R2_GLOBALS.setFlag(69); @@ -11653,7 +11769,7 @@ bool Scene1850::Actor5::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1878; - scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, &scene->_actor5, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, &scene->_robot, &scene->_actor2, NULL); } return true; @@ -11693,23 +11809,23 @@ bool Scene1850::Actor6::startAction(CursorType action, Event &event) { scene->_sceneMode = 1860; if (R2_GLOBALS.getFlag(32)) { - scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_robot, NULL); } else { - scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_robot, NULL); } } else { scene->_sceneMode = 11; if (_position.x >= 160) { - scene->setAction(&scene->_sequenceManager1, scene, 1866, &R2_GLOBALS._player, &scene->_actor7, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1866, &R2_GLOBALS._player, &scene->_rightDoor, NULL); } else { - scene->setAction(&scene->_sequenceManager1, scene, 1865, &R2_GLOBALS._player, &scene->_actor6, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1865, &R2_GLOBALS._player, &scene->_leftDoor, NULL); } } return true; } -bool Scene1850::Actor8::startAction(CursorType action, Event &event) { +bool Scene1850::DisplayScreen::startAction(CursorType action, Event &event) { if ((action != CURSOR_USE) || (_position.y != 120)) return SceneHotspot::startAction(action, event); @@ -11727,6 +11843,28 @@ bool Scene1850::Actor8::startAction(CursorType action, Event &event) { return true; } +/*------------------------------------------------------------------------*/ + +Scene1850::Scene1850() { + _field412 = 0; + _field414 = 0; + _field416 = 0; + _field418 = 0; + _field41E = 0; +} + +void Scene1850::synchronize(Serializer &s) { + SceneExt::synchronize(s); + + s.syncAsSint16LE(_field412); + s.syncAsSint16LE(_field414); + s.syncAsSint16LE(_field416); + s.syncAsSint16LE(_field418); + s.syncAsSint16LE(_field41E); + s.syncAsSint16LE(_field41A.x); + s.syncAsSint16LE(_field41A.y); +} + void Scene1850::postInit(SceneObjectList *OwnerList) { loadScene(1850); @@ -11755,62 +11893,62 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { _field41E = 0; _field41A = Common::Point(0, 0); - R2_GLOBALS._player._characterScene[1] = 1850; - R2_GLOBALS._player._characterScene[2] = 1850; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1850; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1850; - _item2.setDetails(Rect(101, 56, 111, 63), 1850, 19, -1, -1, 1, NULL); + _button.setDetails(Rect(101, 56, 111, 63), 1850, 19, -1, -1, 1, NULL); - _actor6.postInit(); - _actor6.setup(1850, 3, 1); - _actor6.setPosition(Common::Point(66, 102)); - _actor6.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL); + _leftDoor.postInit(); + _leftDoor.setup(1850, 3, 1); + _leftDoor.setPosition(Common::Point(66, 102)); + _leftDoor.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL); - _actor7.postInit(); - _actor7.setup(1850, 2, 1); - _actor7.setPosition(Common::Point(253, 102)); - _actor7.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL); + _rightDoor.postInit(); + _rightDoor.setup(1850, 2, 1); + _rightDoor.setPosition(Common::Point(253, 102)); + _rightDoor.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL); R2_GLOBALS._walkRegions.enableRegion(1); - _actor5.postInit(); + _robot.postInit(); if (R2_GLOBALS.getFlag(34)) { R2_GLOBALS._walkRegions.enableRegion(2); - _actor5.setup(1851, 4, 3); + _robot.setup(1851, 4, 3); } else if (R2_GLOBALS.getFlag(30)) { - _actor5.setup(1851, 2, 2); + _robot.setup(1851, 2, 2); } else { R2_GLOBALS._walkRegions.enableRegion(5); if (R2_GLOBALS.getFlag(33)) { R2_GLOBALS._walkRegions.enableRegion(2); - _actor5.setup(1851, 1, 3); + _robot.setup(1851, 1, 3); } else { - _actor5.setup(1851, 2, 1); + _robot.setup(1851, 2, 1); } } - _actor5.setPosition(Common::Point(219, 130)); - _actor5.fixPriority(114); - _actor5.setDetails(1850, -1, -1, -1, 1, (SceneItem *) NULL); + _robot.setPosition(Common::Point(219, 130)); + _robot.fixPriority(114); + _robot.setDetails(1850, -1, -1, -1, 1, (SceneItem *) NULL); R2_GLOBALS._player.postInit(); - _actor1.postInit(); + _companion.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL); } else { - _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL); } if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) { R2_GLOBALS._player._effect = 6; - _actor1._effect = 6; + _companion._effect = 6; if (R2_GLOBALS.getFlag(31)) { R2_GLOBALS._player._shade = 0; - _actor1._shade = 0; + _companion._shade = 0; } else { R2_GLOBALS._player._shade = 6; - _actor1._shade = 6; + _companion._shade = 6; } if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { @@ -11824,7 +11962,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { _actor2.setPosition(Common::Point(179, 113)); - if ((_actor5._strip == 1) && (_actor5._frame == 3)){ + if ((_robot._strip == 1) && (_robot._frame == 3)){ _actor2.hide(); } @@ -11834,7 +11972,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS.getFlag(32)) { R2_GLOBALS._player.setVisage(1511); - _actor1.setVisage(1508); + _companion.setVisage(1508); _actor3.postInit(); _actor3.setup(1853, 3, 1); @@ -11873,12 +12011,12 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { } } else { R2_GLOBALS._player.setVisage(1500); - _actor1.setVisage(1505); + _companion.setVisage(1505); } } else { // Not Quinn if (R2_GLOBALS.getFlag(32)) { R2_GLOBALS._player.setVisage(1508); - _actor1.setVisage(1511); + _companion.setVisage(1511); _actor3.postInit(); _actor3.setup(1853, 3, 1); @@ -11917,7 +12055,7 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { } } else { R2_GLOBALS._player.setVisage(1505); - _actor1.setVisage(1500); + _companion.setVisage(1500); } } @@ -11925,25 +12063,25 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setStrip(3); R2_GLOBALS._player.setPosition(Common::Point(80, 114)); - _actor1.animate(ANIM_MODE_1, NULL); - _actor1.setObjectWrapper(new SceneObjectWrapper()); - _actor1.setStrip(3); - _actor1.setPosition(Common::Point(180, 96)); + _companion.animate(ANIM_MODE_1, NULL); + _companion.setObjectWrapper(new SceneObjectWrapper()); + _companion.setStrip(3); + _companion.setPosition(Common::Point(180, 96)); if (R2_GLOBALS.getFlag(30)) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor1.animate(ANIM_MODE_NONE, NULL); - _actor1.setObjectWrapper(NULL); + _companion.animate(ANIM_MODE_NONE, NULL); + _companion.setObjectWrapper(NULL); if (R2_GLOBALS.getFlag(32)) { - _actor1.setup(1854, 1, 3); + _companion.setup(1854, 1, 3); } else { - _actor1.setup(1854, 2, 3); + _companion.setup(1854, 2, 3); } - _actor1.setPosition(Common::Point(164, 106)); + _companion.setPosition(Common::Point(164, 106)); } else { - _actor1.animate(ANIM_MODE_NONE, NULL); - _actor1.setObjectWrapper(NULL); + _companion.animate(ANIM_MODE_NONE, NULL); + _companion.setObjectWrapper(NULL); if (R2_GLOBALS.getFlag(32)) { R2_GLOBALS._player.setup(1854, 1, 3); } else { @@ -11957,57 +12095,57 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.enableControl(); } else { // R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850 R2_GLOBALS._player._effect = 1; - _actor1._effect = 1; + _companion._effect = 1; R2_GLOBALS._player.disableControl(); _sceneMode = 10; if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS.getFlag(29)) { - setAction(&_sequenceManager1, this, 1863, &R2_GLOBALS._player, &_actor1, &_actor7, NULL); + setAction(&_sequenceManager1, this, 1863, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL); } else { - setAction(&_sequenceManager1, this, 1861, &R2_GLOBALS._player, &_actor1, &_actor6, NULL); + setAction(&_sequenceManager1, this, 1861, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL); } } else { if (R2_GLOBALS.getFlag(29)) { - setAction(&_sequenceManager1, this, 1864, &R2_GLOBALS._player, &_actor1, &_actor7, NULL); + setAction(&_sequenceManager1, this, 1864, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL); } else { - setAction(&_sequenceManager1, this, 1862, &R2_GLOBALS._player, &_actor1, &_actor6, NULL); + setAction(&_sequenceManager1, this, 1862, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL); } } } if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player._moveDiff = Common::Point(3, 2); - _actor1._moveDiff = Common::Point(5, 3); + _companion._moveDiff = Common::Point(5, 3); } else { R2_GLOBALS._player._moveDiff = Common::Point(5, 3); - _actor1._moveDiff = Common::Point(3, 2); + _companion._moveDiff = Common::Point(3, 2); } - _actor8.postInit(); - _actor8.setup(1850, 1, 1); + _displayScreen.postInit(); + _displayScreen.setup(1850, 1, 1); if (R2_GLOBALS.getFlag(62)) { - _actor8.setPosition(Common::Point(159, 120)); + _displayScreen.setPosition(Common::Point(159, 120)); } else { - _actor8.setPosition(Common::Point(159, 184)); + _displayScreen.setPosition(Common::Point(159, 184)); } - _actor8.fixPriority(113); + _displayScreen.fixPriority(113); if (R2_GLOBALS.getFlag(34)) { - _actor8.setDetails(1850, 25, -1, -1, 4, &_actor5); + _displayScreen.setDetails(1850, 25, -1, -1, 4, &_robot); } else { - _actor8.setDetails(1850, 25, -1, -1, 2, (SceneItem *) NULL); + _displayScreen.setDetails(1850, 25, -1, -1, 2, (SceneItem *) NULL); } if (!R2_GLOBALS.getFlag(62)) { - _actor8.hide(); + _displayScreen.hide(); } - _item1.setDetails(Rect(0, 0, 320, 200), 1850, 16, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 1850, 16, -1, -1, 1, NULL); - R2_GLOBALS._player._oldCharacterScene[1] = 1850; - R2_GLOBALS._player._oldCharacterScene[2] = 1850; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1850; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1850; } void Scene1850::remove() { @@ -12026,8 +12164,8 @@ void Scene1850::signal() { R2_GLOBALS._player._effect = 6; R2_GLOBALS._player._shade = 6; - _actor1._effect = 6; - _actor1._shade = 6; + _companion._effect = 6; + _companion._shade = 6; R2_GLOBALS._walkRegions.enableRegion(5); @@ -12049,7 +12187,7 @@ void Scene1850::signal() { break; case 16: _sceneMode = 1870; - setAction(&_sequenceManager1, this, 1870, &R2_GLOBALS._player, &_actor1, &_actor3, &_actor4, NULL); + setAction(&_sequenceManager1, this, 1870, &R2_GLOBALS._player, &_companion, &_actor3, &_actor4, NULL); break; case 20: R2_GLOBALS._player.enableControl(CURSOR_TALK); @@ -12057,7 +12195,7 @@ void Scene1850::signal() { case 21: R2_GLOBALS._player.disableControl(); _sceneMode = 1877; - setAction(&_sequenceManager1, this, 1877, &R2_GLOBALS._player, &_actor1, &_actor5, NULL); + setAction(&_sequenceManager1, this, 1877, &R2_GLOBALS._player, &_companion, &_robot, NULL); break; case 30: R2_GLOBALS._player.disableControl(); @@ -12079,14 +12217,14 @@ void Scene1850::signal() { _field418 = 1; if (R2_GLOBALS.getFlag(30)) { - _actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL); + _displayScreen.setAction(&_sequenceManager2, NULL, 1867, &_displayScreen, NULL); } else if (R2_GLOBALS.getFlag(34)) { if (R2_GLOBALS.getFlag(62)) { R2_GLOBALS.clearFlag(62); - _actor8.setAction(&_sequenceManager2, this, 1851, &_actor8, NULL); + _displayScreen.setAction(&_sequenceManager2, this, 1851, &_displayScreen, NULL); } else { R2_GLOBALS.setFlag(62); - _actor8.setAction(&_sequenceManager2, this, 1850, &_actor8, NULL); + _displayScreen.setAction(&_sequenceManager2, this, 1850, &_displayScreen, NULL); } } else if (R2_GLOBALS.getFlag(33)) { R2_GLOBALS.setFlag(62); @@ -12094,13 +12232,13 @@ void Scene1850::signal() { R2_GLOBALS._walkRegions.enableRegion(2); _actor2.postInit(); - _actor2.setDetails(1850, 6, -1, -1, 5, &_actor5); + _actor2.setDetails(1850, 6, -1, -1, 5, &_robot); _sceneMode = 1879; - _actor8.setAction(&_sequenceManager2, this, 1879, &_actor5, &_actor8, &_actor2, NULL); + _displayScreen.setAction(&_sequenceManager2, this, 1879, &_robot, &_displayScreen, &_actor2, NULL); } else { - _actor8.setAction(&_sequenceManager2, NULL, 1867, &_actor8, NULL); + _displayScreen.setAction(&_sequenceManager2, NULL, 1867, &_displayScreen, NULL); } if (R2_GLOBALS.getFlag(34)) @@ -12149,7 +12287,7 @@ void Scene1850::signal() { case 1858: R2_GLOBALS._player.disableControl(); _sceneMode = 1859; - setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_actor5, NULL); + setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_robot, NULL); R2_GLOBALS.clearFlag(30); break; case 1859: @@ -12179,12 +12317,11 @@ void Scene1850::signal() { break; case 2: _sceneMode = 11; - setAction(&_sequenceManager1, this, 1865, &R2_GLOBALS._player, &_actor6, NULL); + setAction(&_sequenceManager1, this, 1865, &R2_GLOBALS._player, &_leftDoor, NULL); break; case 3: - warning("_field41E == 3"); _sceneMode = 11; - setAction(&_sequenceManager1, this, 1866, &R2_GLOBALS._player, &_actor7, NULL); + setAction(&_sequenceManager1, this, 1866, &R2_GLOBALS._player, &_rightDoor, NULL); break; default: break; @@ -12234,7 +12371,7 @@ void Scene1850::signal() { R2_GLOBALS.clearFlag(30); _sceneMode = 15; setAction(&_sequenceManager1, this, 1869, &R2_GLOBALS._player, &_actor3, NULL); - setAction(&_sequenceManager2, this, 1868, &_actor1, &_actor4, NULL); + _companion.setAction(&_sequenceManager2, this, 1868, &_companion, &_actor4, NULL); break; case 1878: R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1850); @@ -12265,9 +12402,9 @@ void Scene1850::process(Event &event) { R2_GLOBALS._player.disableControl(); _sceneMode = 1860; if (R2_GLOBALS.getFlag(32)) { - setAction(&_sequenceManager1, this, 1860, &R2_GLOBALS._player, &_actor5, NULL); + setAction(&_sequenceManager1, this, 1860, &R2_GLOBALS._player, &_robot, NULL); } else { - setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_actor5, NULL); + setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_robot, NULL); } R2_GLOBALS.clearFlag(32); event.handled = true; @@ -12289,8 +12426,8 @@ void Scene1850::dispatch() { } R2_GLOBALS._player._flags |= OBJFLAG_PANES; - _actor1._shade = R2_GLOBALS._player._shade; - _actor1._flags |= OBJFLAG_PANES; + _companion._shade = R2_GLOBALS._player._shade; + _companion._flags |= OBJFLAG_PANES; _actor3._shade = R2_GLOBALS._player._shade; _actor3._flags |= OBJFLAG_PANES; @@ -12300,46 +12437,47 @@ void Scene1850::dispatch() { } if (R2_GLOBALS.getFlag(32)) { - _actor3.setPosition(Common::Point(_actor8._position.x - 37, _actor8._position.y - 71)); - _actor4.setPosition(Common::Point(_actor8._position.x - 20, _actor8._position.y - 73)); + _actor3.setPosition(Common::Point(_displayScreen._position.x - 37, _displayScreen._position.y - 71)); + _actor4.setPosition(Common::Point(_displayScreen._position.x - 20, _displayScreen._position.y - 73)); } if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { - _actor2.setPosition(Common::Point(_actor8._position.x + 20, _actor8._position.y - 71)); + _actor2.setPosition(Common::Point(_displayScreen._position.x + 20, _displayScreen._position.y - 71)); } Scene::dispatch(); } /*-------------------------------------------------------------------------- - * Scene 1875 - + * Scene 1875 - Rim Lift Computer * *--------------------------------------------------------------------------*/ -Scene1875::Actor1875::Actor1875() { - _fieldA4 = 0; - _fieldA6 = 0; + +Scene1875::Button::Button() { + _buttonId = 0; + _buttonDown = false; } -void Scene1875::Actor1875::synchronize(Serializer &s) { +void Scene1875::Button::synchronize(Serializer &s) { SceneActor::synchronize(s); - s.syncAsSint16LE(_fieldA4); - s.syncAsSint16LE(_fieldA6); + s.syncAsSint16LE(_buttonId); + s.syncAsSint16LE(_buttonDown); } -void Scene1875::Actor1875::subB84AB() { +void Scene1875::Button::doButtonPress() { Scene1875 *scene = (Scene1875 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._sound1.play(227); int newFrameNumber; - switch (_fieldA4) { + switch (_buttonId) { case 3: - if ((scene->_actor1._frame == 1) && (scene->_actor4._strip == 2)) { + if ((scene->_actor1._frame == 1) && (scene->_button1._strip == 2)) { R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); scene->_sceneMode = 10; - scene->_stripManager.start(576, this); + scene->_stripManager.start(576, scene); } else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1890; @@ -12364,32 +12502,32 @@ void Scene1875::Actor1875::subB84AB() { } } -void Scene1875::Actor1875::subB8271(int indx) { +void Scene1875::Button::initButton(int buttonId) { postInit(); - _fieldA4 = indx; - _fieldA6 = 0; + _buttonId = buttonId; + _buttonDown = false; setVisage(1855); - if (_fieldA4 == 1) + if (_buttonId == 1) setStrip(2); else setStrip(1); - setFrame(_fieldA4); - switch (_fieldA4 - 1) { - case 0: + setFrame(_buttonId); + switch (_buttonId) { + case 1: setPosition(Common::Point(20, 144)); break; - case 1: + case 2: setPosition(Common::Point(82, 144)); break; - case 2: + case 3: setPosition(Common::Point(136, 144)); break; - case 3: + case 4: setPosition(Common::Point(237, 144)); break; - case 4: + case 5: setPosition(Common::Point(299, 144)); break; default: @@ -12399,36 +12537,37 @@ void Scene1875::Actor1875::subB8271(int indx) { setDetails(1875, 6, 1, -1, 2, (SceneItem *) NULL); } -void Scene1875::Actor1875::process(Event &event) { - if ((R2_GLOBALS._player._uiEnabled) || (event.handled)) +void Scene1875::Button::process(Event &event) { + if (!R2_GLOBALS._player._uiEnabled || event.handled) return; Scene1875 *scene = (Scene1875 *)R2_GLOBALS._sceneManager._scene; - if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == R2_STEPPING_DISKS) && (_bounds.contains(event.mousePos)) && (_fieldA6 == 0)) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) + && (_bounds.contains(event.mousePos)) && !_buttonDown) { setStrip(2); - switch (_fieldA4) { + switch (_buttonId) { case 1: R2_GLOBALS._sound2.play(227); - scene->_actor5.setStrip(1); + scene->_button2.setStrip(1); break; case 2: R2_GLOBALS._sound2.play(227); - scene->_actor4.setStrip(1); + scene->_button1.setStrip(1); break; default: break; } - _fieldA6 = 1; + _buttonDown = true; event.handled = true; } - if ((event.eventType == EVENT_BUTTON_UP) && (_fieldA6 != 0)) { - if ((_fieldA4 == 3) || (_fieldA4 == 4) || (_fieldA4 == 5)) { + if ((event.eventType == EVENT_BUTTON_UP) && _buttonDown) { + if ((_buttonId == 3) || (_buttonId == 4) || (_buttonId == 5)) { setStrip(1); - subB84AB(); + doButtonPress(); } - _fieldA6 = 0; + _buttonDown = false; event.handled = true; } } @@ -12437,32 +12576,36 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { loadScene(1875); SceneExt::postInit(); - R2_GLOBALS._player._characterScene[1] = 1875; - R2_GLOBALS._player._characterScene[2] = 1875; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1875; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1875; _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - _actor4.subB8271(1); - _actor5.subB8271(2); - _actor6.subB8271(3); - _actor7.subB8271(4); - _actor8.subB8271(5); + _button1.initButton(1); + _button2.initButton(2); + _button3.initButton(3); + _button4.initButton(4); + _button5.initButton(5); _actor1.postInit(); _actor1.setup(1855, 4, 1); _actor1.setPosition(Common::Point(160, 116)); R2_GLOBALS._player.postInit(); + R2_GLOBALS._player.hide(); + if (R2_GLOBALS._sceneManager._previousScene == 1625) { R2_GLOBALS._sound1.play(122); R2_GLOBALS._player.disableControl(); _sceneMode = 11; _actor2.postInit(); setAction(&_sequenceManager, this, 1892, &_actor2, NULL); - } else if (R2_GLOBALS._sceneManager._previousScene == 3150) { - R2_GLOBALS._sound1.play(116); } else { + if (R2_GLOBALS._sceneManager._previousScene == 3150) { + R2_GLOBALS._sound1.play(116); + } + R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; } @@ -12470,10 +12613,10 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { _item2.setDetails(Rect(43, 14, 275, 122), 1875, 9, 1, -1, 1, NULL); _item1.setDetails(Rect(0, 0, 320, 200), 1875, 3, -1, -1, 1, NULL); - R2_GLOBALS._player._characterScene[1] = 1875; - R2_GLOBALS._player._characterScene[2] = 1875; - R2_GLOBALS._player._oldCharacterScene[1] = 1875; - R2_GLOBALS._player._oldCharacterScene[2] = 1875; + R2_GLOBALS._player._characterScene[R2_QUINN] = 1875; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1875; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1875; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1875; } void Scene1875::signal() { @@ -12512,18 +12655,19 @@ void Scene1875::signal() { void Scene1875::process(Event &event) { Scene::process(event); - _actor4.process(event); - _actor5.process(event); - _actor6.process(event); - _actor7.process(event); - _actor8.process(event); + _button1.process(event); + _button2.process(event); + _button3.process(event); + _button4.process(event); + _button5.process(event); } /*-------------------------------------------------------------------------- - * Scene 1900 - + * Scene 1900 - Spill Mountains Elevator Exit * *--------------------------------------------------------------------------*/ -bool Scene1900::Actor2::startAction(CursorType action, Event &event) { + +bool Scene1900::LiftDoor::startAction(CursorType action, Event &event) { Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) @@ -12540,17 +12684,17 @@ bool Scene1900::Actor2::startAction(CursorType action, Event &event) { if (_position.x >= 160) { scene->_sceneMode = 1905; - scene->setAction(&scene->_sequenceManager1, scene, 1905, &R2_GLOBALS._player, &scene->_actor3, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1905, &R2_GLOBALS._player, &scene->_rightDoor, NULL); } else { R2_GLOBALS.setFlag(29); scene->_sceneMode = 1904; - scene->setAction(&scene->_sequenceManager1, scene, 1904, &R2_GLOBALS._player, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1904, &R2_GLOBALS._player, &scene->_leftDoor, NULL); } return true; } -void Scene1900::Exit1::changeScene() { +void Scene1900::WestExit::changeScene() { Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(CURSOR_ARROW); @@ -12561,7 +12705,7 @@ void Scene1900::Exit1::changeScene() { R2_GLOBALS._player.addMover(mover, &pt, scene); } -void Scene1900::Exit2::changeScene() { +void Scene1900::EastExit::changeScene() { Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(CURSOR_ARROW); @@ -12581,7 +12725,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == -1) { R2_GLOBALS._sceneManager._previousScene = 1925; R2_GLOBALS._player._characterIndex = R2_SEEKER; - R2_GLOBALS._player._oldCharacterScene[2] = 1925; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1925; } if (R2_GLOBALS._sceneManager._previousScene != 1875) @@ -12591,11 +12735,11 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { _stripManager.setFontNumber(3); _stripManager.addSpeaker(&_seekerSpeaker); - _exit1.setDetails(Rect(0, 105, 14, 145), R2_COM_SCANNER, 2000); - _exit1.setDest(Common::Point(14, 135)); + _westExit.setDetails(Rect(0, 105, 14, 145), EXITCURSOR_W, 2000); + _westExit.setDest(Common::Point(14, 135)); - _exit2.setDetails(Rect(305, 105, 320, 145), R2_SPENT_POWER_CAPSULE, 2000); - _exit2.setDest(Common::Point(315, 135)); + _eastExit.setDetails(Rect(305, 105, 320, 145), EXITCURSOR_E, 2000); + _eastExit.setDest(Common::Point(315, 135)); R2_GLOBALS._player.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) @@ -12612,24 +12756,24 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene != 1925) R2_GLOBALS.clearFlag(29); - _actor2.postInit(); - _actor2.setup(1901, 1, 1); - _actor2.setPosition(Common::Point(95, 109)); - _actor2.fixPriority(100); + _leftDoor.postInit(); + _leftDoor.setup(1901, 1, 1); + _leftDoor.setPosition(Common::Point(95, 109)); + _leftDoor.fixPriority(100); if (R2_GLOBALS._player._characterIndex == R2_QUINN) - _actor2.setDetails(1900, 0, 1, 2, 1, (SceneItem *) NULL); + _leftDoor.setDetails(1900, 0, 1, 2, 1, (SceneItem *) NULL); else - _actor2.setDetails(1900, 0, 1, -1, 1, (SceneItem *) NULL); + _leftDoor.setDetails(1900, 0, 1, -1, 1, (SceneItem *) NULL); - _actor3.postInit(); - _actor3.setup(1901, 2, 1); - _actor3.setPosition(Common::Point(225, 109)); - _actor3.fixPriority(100); + _rightDoor.postInit(); + _rightDoor.setup(1901, 2, 1); + _rightDoor.setPosition(Common::Point(225, 109)); + _rightDoor.fixPriority(100); if (R2_GLOBALS._player._characterIndex == R2_QUINN) - _actor3.setDetails(1900, 0, 1, 2, 1, (SceneItem *) NULL); + _rightDoor.setDetails(1900, 0, 1, 2, 1, (SceneItem *) NULL); else - _actor3.setDetails(1900, 0, 1, -1, 1, (SceneItem *) NULL); + _rightDoor.setDetails(1900, 0, 1, -1, 1, (SceneItem *) NULL); if (R2_GLOBALS._sceneManager._previousScene != 1875) { _object1.postInit(); @@ -12647,26 +12791,26 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterIndex = R2_QUINN; _actor1.postInit(); _sceneMode = 20; - R2_GLOBALS._player.setAction(&_sequenceManager1, NULL, 1901, &R2_GLOBALS._player, &_actor2, NULL); - _actor1.setAction(&_sequenceManager2, this, 1900, &_actor1, &_actor3, NULL); + R2_GLOBALS._player.setAction(&_sequenceManager1, NULL, 1901, &R2_GLOBALS._player, &_leftDoor, NULL); + _actor1.setAction(&_sequenceManager2, this, 1900, &_actor1, &_rightDoor, NULL); } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1925) { if (R2_GLOBALS.getFlag(29)) { R2_GLOBALS.clearFlag(29); - _actor2.hide(); + _leftDoor.hide(); R2_GLOBALS._player.setStrip(6); R2_GLOBALS._player.setPosition(Common::Point(90, 106)); _sceneMode = 1906; - setAction(&_sequenceManager1, this, 1906, &R2_GLOBALS._player, &_actor2, NULL); + setAction(&_sequenceManager1, this, 1906, &R2_GLOBALS._player, &_leftDoor, NULL); } else { - _actor3.hide(); + _rightDoor.hide(); R2_GLOBALS._player.setStrip(5); R2_GLOBALS._player.setPosition(Common::Point(230, 106)); _sceneMode = 1907; - setAction(&_sequenceManager1, this, 1907, &R2_GLOBALS._player, &_actor3, NULL); + setAction(&_sequenceManager1, this, 1907, &R2_GLOBALS._player, &_rightDoor, NULL); } - if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { _actor1.postInit(); _actor1.setPosition(Common::Point(30, 110)); R2_GLOBALS._walkRegions.enableRegion(1); @@ -12674,21 +12818,23 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { _actor1.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); } R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1900; - } else if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { - _actor1.postInit(); - _actor1.setPosition(Common::Point(30, 110)); - R2_GLOBALS._walkRegions.enableRegion(1); - if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor1.setup(20, 3, 1); - _actor1.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); - } else { - _actor1.setup(2008, 3, 1); - _actor1.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); + } else { + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { + _actor1.postInit(); + _actor1.setPosition(Common::Point(30, 110)); + R2_GLOBALS._walkRegions.enableRegion(1); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _actor1.setup(20, 3, 1); + _actor1.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); + } else { + _actor1.setup(2008, 3, 1); + _actor1.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); + } } if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - if (R2_GLOBALS._v56605[1] == 5) { + if (R2_GLOBALS._spillLocation[R2_QUINN] == 5) { _sceneMode = 1902; setAction(&_sequenceManager1, this, 1902, &R2_GLOBALS._player, NULL); } else { @@ -12696,7 +12842,7 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { setAction(&_sequenceManager1, this, 1903, &R2_GLOBALS._player, NULL); } } else { - if (R2_GLOBALS._v56605[2] == 5) { + if (R2_GLOBALS._spillLocation[R2_SEEKER] == 5) { _sceneMode = 1908; setAction(&_sequenceManager1, this, 1908, &R2_GLOBALS._player, NULL); } else { @@ -12711,8 +12857,8 @@ void Scene1900::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1900; } - _item2.setDetails(Rect(77, 2, 240, 103), 1900, 6, -1, -1, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 1900, 3, -1, -1, 1, NULL); + _elevator.setDetails(Rect(77, 2, 240, 103), 1900, 6, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 1900, 3, -1, -1, 1, NULL); } void Scene1900::remove() { @@ -12723,16 +12869,16 @@ void Scene1900::remove() { void Scene1900::signal() { switch (_sceneMode) { case 10: - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 5; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 5; R2_GLOBALS._sceneManager.changeScene(2000); break; case 11: - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 6; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 6; R2_GLOBALS._sceneManager.changeScene(2000); break; case 20: ++_sceneMode; - R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); + R2_GLOBALS._events.setCursor(CURSOR_WALK); _stripManager.start(1300, this); break; case 21: @@ -12755,10 +12901,10 @@ void Scene1900::signal() { R2_GLOBALS._sceneManager.changeScene(1925); break; case 1910: - R2_INVENTORY.setObjectScene(22, 2535); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 2535); R2_GLOBALS._player.disableControl(CURSOR_ARROW); - R2_GLOBALS._player._oldCharacterScene[1] = 1900; - R2_GLOBALS._player._oldCharacterScene[2] = 1900; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1900; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1900; R2_GLOBALS._sceneManager.changeScene(2450); break; case 1906: @@ -12985,7 +13131,7 @@ void Scene1925::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(220); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.disableControl(); - R2_GLOBALS._player._characterScene[2] = 1925; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1925; R2_GLOBALS._player._characterIndex = R2_SEEKER; switch (R2_GLOBALS._scene1925CurrLevel) { case -2: @@ -13044,7 +13190,7 @@ void Scene1925::postInit(SceneObjectList *OwnerList) { void Scene1925::remove() { R2_GLOBALS._sound1.fadeOut2(NULL); - R2_GLOBALS._player._oldCharacterScene[2] = 1925; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1925; SceneExt::remove(); } @@ -13252,7 +13398,7 @@ void Scene1945::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; - R2_GLOBALS._player._characterScene[2] = 1945; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 1945; R2_GLOBALS._player._characterIndex = R2_SEEKER; _exitUp.setDetails(Rect(128, 0, 186, 10), EXITCURSOR_N, 1945); @@ -13505,7 +13651,6 @@ void Scene1950::Area1::remove() { _areaActor.remove(); SceneArea::remove(); R2_GLOBALS._insetUp--; - // if (!R2_GLOBALS.getFlag(37)) R2_GLOBALS._sound2.play(278); @@ -13525,7 +13670,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 +13678,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 +13748,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 +14024,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 +14032,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 +14343,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 +14861,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 +14897,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 +14928,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 +14947,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 +15162,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 +15266,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 +15297,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 +15312,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 +15332,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; |