diff options
Diffstat (limited to 'engines/tsage')
28 files changed, 2725 insertions, 2252 deletions
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp index 3aef18f4f0..63f84d25e1 100644 --- a/engines/tsage/blue_force/blueforce_logic.cpp +++ b/engines/tsage/blue_force/blueforce_logic.cpp @@ -678,7 +678,7 @@ void FocusObject::process(Event &event) { BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor()); if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && - (event.btnState == 3)) { + (event.btnState == BTNSHIFT_RIGHT)) { BF_GLOBALS._events.setCursor(CURSOR_USE); event.handled = true; } diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp index 95598babc6..f1f00599e0 100644 --- a/engines/tsage/blue_force/blueforce_scenes0.cpp +++ b/engines/tsage/blue_force/blueforce_scenes0.cpp @@ -888,6 +888,7 @@ void Scene60::Action1::signal() { break; case 4: remove(); + break; case 5: setDelay(120); break; diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp index 9f1e9ce36e..d26e34ae23 100644 --- a/engines/tsage/blue_force/blueforce_scenes1.cpp +++ b/engines/tsage/blue_force/blueforce_scenes1.cpp @@ -2649,7 +2649,7 @@ void Scene160::Action2::signal() { } void Scene160::Action2::process(Event &event) { - if ((event.handled) || (event.eventType == 5)) + if ((event.handled) || ((event.eventType != EVENT_BUTTON_DOWN) && (event.eventType != EVENT_KEYPRESS))) return; if (_actionIndex == 25) { @@ -3237,7 +3237,7 @@ void Scene190::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._player.postInit(); BF_GLOBALS._player.disableControl(); - // Initialise objects + // Initialize objects _door.postInit(); _door.setVisage(190); _door.setStrip(1); diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp index abadc4300a..0cf487daa9 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.cpp +++ b/engines/tsage/blue_force/blueforce_scenes5.cpp @@ -1220,7 +1220,7 @@ void Scene560::SafeInset::process(Event &event) { } if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && - (event.btnState == 3)) { + (event.btnState == BTNSHIFT_RIGHT)) { BF_GLOBALS._events.setCursor(CURSOR_USE); event.handled = true; } @@ -1459,7 +1459,7 @@ void Scene560::postInit(SceneObjectList *OwnerList) { _lamp.setDetails(Rect(197, 43, 214, 56), 560, 7, 19, 30, 1, NULL); _item4.setDetails(Rect(121, 18, 156, 54), 560, 8, 20, 31, 1, NULL); _trophy.setDetails(Rect(259, 52, 275, 63), 560, 10, 22, 33, 1, NULL); - _watercolours.setDetails(Rect(214, 48, 239, 64), 560, 12, 24, 35, 1, NULL); + _waterColors.setDetails(Rect(214, 48, 239, 64), 560, 12, 24, 35, 1, NULL); _fileCabinets.setDetails(Rect(0, 47, 49, 100), 560, 14, 26, 37, 1, NULL); _certificate.setDetails(Rect(280, 51, 292, 62), 560, 11, 23, 34, 1, NULL); _bookcase.setDetails(Rect(176, 0, 319, 103), 560, 9, 21, 32, 1, NULL); diff --git a/engines/tsage/blue_force/blueforce_scenes5.h b/engines/tsage/blue_force/blueforce_scenes5.h index 73d323fc54..56bf20c93b 100644 --- a/engines/tsage/blue_force/blueforce_scenes5.h +++ b/engines/tsage/blue_force/blueforce_scenes5.h @@ -225,7 +225,7 @@ public: NamedObject _object6; PicturePart _picture1, _picture2, _picture3, _picture4; Computer _computer; - NamedHotspot _chair, _lamp, _item4, _trophy, _watercolours, _fileCabinets; + NamedHotspot _chair, _lamp, _item4, _trophy, _waterColors, _fileCabinets; NamedHotspot _certificate, _bookcase, _desk, _carpet, _item12, _office; ASound _sound1; bool _field380; diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp index 5a60cd7c5e..9a20788b6a 100644 --- a/engines/tsage/blue_force/blueforce_scenes8.cpp +++ b/engines/tsage/blue_force/blueforce_scenes8.cpp @@ -1984,7 +1984,7 @@ void Scene840::BoatKeysInset::process(Event &event) { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); - if ((event.eventType == EVENT_BUTTON_DOWN) && (cursorId == CURSOR_WALK) && (event.btnState == 3)) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (cursorId == CURSOR_WALK) && (event.btnState == BTNSHIFT_RIGHT)) { BF_GLOBALS._events.setCursor(CURSOR_USE); event.handled = true; } diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp index 753a835389..9828ca71d4 100644 --- a/engines/tsage/converse.cpp +++ b/engines/tsage/converse.cpp @@ -707,7 +707,7 @@ void StripManager::synchronize(Serializer &s) { for (int i = 0; i < arrSize; ++i) _obj44List[i].synchronize(s); - // Synhcronise script data + // Synchronize script data int scriptSize = _script.size(); s.syncAsUint16LE(scriptSize); if (s.isLoading()) @@ -754,6 +754,9 @@ void StripManager::remove() { if (_onEnd) _onEnd(); + if (g_vm->getGameID() == GType_Ringworld2) + _endHandler = NULL; + Action::remove(); } @@ -855,6 +858,11 @@ void StripManager::signal() { ++obj44Idx; if (_obj44List[obj44Idx]._field16[0]) { + // WORKAROUND: The _lookupList isn't always correctly initialized. But it always + // seems to be set to the R2_GLOBALS._stripManager_lookupList, so manually set it + if (!_lookupList) + _lookupList = R2_GLOBALS._stripManager_lookupList; + int f16Index = _lookupList[_obj44List[obj44Idx]._field16[0] - 1]; listId = _obj44List[obj44Idx]._field16[f16Index]; @@ -865,13 +873,16 @@ void StripManager::signal() { choiceStr = (const char *)&_script[0] + _obj44List[obj44Idx]._list[listIdx]._scriptOffset; } else { - for (int listIdx = 0; listIdx < OBJ0A_LIST_SIZE; ++listIdx) { + for (int listIdx = idx; listIdx < (OBJ0A_LIST_SIZE - 1); ++listIdx) { obj44._list[listIdx]._id = obj44._list[listIdx + 1]._id; obj44._list[listIdx]._scriptOffset = obj44._list[listIdx + 1]._scriptOffset; if (!obj44._list[listIdx + 1]._id) obj44._list[listIdx]._id = 0; } + + --idx; + continue; } } } diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 6b4e2963a5..055005808c 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1179,7 +1179,7 @@ void PaletteRotation::signal() { int count = _end - _currIndex; g_system->getPaletteManager()->setPalette((const byte *)&_palette[_currIndex * 3], _start, count); - if (count2) { + if (count2 > 0) { g_system->getPaletteManager()->setPalette((const byte *)&_palette[_start * 3], _start + count, count2); } } @@ -2111,8 +2111,13 @@ int SceneObject::getFrameCount() { void SceneObject::animEnded() { _animateMode = ANIM_MODE_NONE; - if (_endAction) - _endAction->signal(); + if (_endAction) { + Action *endAction = _endAction; + if (g_vm->getGameID() == GType_Ringworld2) + _endAction = NULL; + + endAction->signal(); + } } int SceneObject::changeFrame() { @@ -3262,6 +3267,7 @@ void Player::postInit(SceneObjectList *OwnerList) { _moveDiff.y = 2; _effect = 1; _shade = 0; + _linkedActor = NULL; setObjectWrapper(new SceneObjectWrapper()); setPosition(_characterPos[_characterIndex]); @@ -3992,7 +3998,7 @@ int WalkRegions::indexOf(const Common::Point &pt, const Common::List<int> *index } void WalkRegions::synchronize(Serializer &s) { - // Synchronise the list of disabled regions as a list of values terminated with a '-1' + // Synchronize the list of disabled regions as a list of values terminated with a '-1' int regionId = 0; if (s.isLoading()) { _disabledRegions.clear(); @@ -4242,9 +4248,10 @@ void SceneHandler::process(Event &event) { // Scan the item list to find one the mouse is within SynchronizedList<SceneItem *>::iterator i; for (i = g_globals->_sceneItems.begin(); i != g_globals->_sceneItems.end(); ++i) { - if ((*i)->contains(event.mousePos)) { + SceneItem *item = *i; + if (item->contains(event.mousePos)) { // Pass the action to the item - bool handled = (*i)->startAction(g_globals->_events.getCursor(), event); + bool handled = item->startAction(g_globals->_events.getCursor(), event); if (!handled) // Item wasn't handled, keep scanning continue; diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 5ca531fdb9..ac6ce0bf8e 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -113,7 +113,7 @@ bool EventsClass::getEvent(Event &evt, int eventMask) { case Common::EVENT_RBUTTONUP: case Common::EVENT_MBUTTONUP: evt.eventType = EVENT_BUTTON_UP; - evt.btnState = 0; + evt.btnState = BTNSHIFT_LEFT; break; case Common::EVENT_KEYDOWN: evt.eventType = EVENT_KEYPRESS; diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 5c4fa967e5..3ca54d67a9 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -26,6 +26,7 @@ #include "tsage/ringworld/ringworld_demo.h" #include "tsage/ringworld/ringworld_logic.h" #include "tsage/ringworld2/ringworld2_logic.h" +#include "tsage/staticres.h" namespace TsAGE { @@ -380,6 +381,9 @@ void Ringworld2Globals::reset() { if (!_scannerDialog) _scannerDialog = new ScannerDialog(); + // Default to Quinn as the active character + T2_GLOBALS._player._characterIndex = R2_QUINN; + // Reset the inventory R2_INVENTORY.reset(); T2_GLOBALS._uiElements.updateInventory(); @@ -389,7 +393,7 @@ void Ringworld2Globals::reset() { _scrollFollower = &_player; // Reset fields - Common::fill(&_fadePaletteMap[0][0], &_fadePaletteMap[10][256], 0); + Common::fill(&_fadePaletteMap[0][0], &_fadePaletteMap[9][256], 0); Common::fill(&_paletteMap[0], &_paletteMap[4096], 0); _fadePaletteFlag = false; @@ -404,25 +408,24 @@ void Ringworld2Globals::reset() { _v565E7 = 0; _v565E9 = -5; _v565EB = 26; - _v565F5 = 0; - _v565F6 = 0; - _v565F8 = 0; - _v565FA = 0; + _foodCount = 0; + _rimLocation = 0; + _rimTransportLocation = 0; _v565AE = 0; - _v56605[0] = 0; - _v56605[1] = 3; - _v56605[2] = 5; - _v56605[3] = 1; - _v56605[4] = 2; - _v56605[5] = 5; - _v56605[6] = 9; - _v56605[7] = 14; - _v56605[8] = 15; - _v56605[9] = 18; - _v56605[10] = 20; - _v56605[11] = 25; - _v56605[12] = 27; - _v56605[13] = 31; + _spillLocation[0] = 0; + _spillLocation[1] = 3; + _spillLocation[R2_SEEKER] = 5; + _spillLocation[3] = 1; + _spillLocation[4] = 2; + _spillLocation[5] = 5; + _spillLocation[6] = 9; + _spillLocation[7] = 14; + _spillLocation[8] = 15; + _spillLocation[9] = 18; + _spillLocation[10] = 20; + _spillLocation[11] = 25; + _spillLocation[12] = 27; + _spillLocation[13] = 31; for (int i = 0; i < 18; i++) { _v56613[(i * 4) ] = 1; @@ -449,7 +452,7 @@ void Ringworld2Globals::reset() { _v56613[(17 * 4) + 1] = 1; _v566A6 = 3800; - _v566A3 = 2; + _landerSuitNumber = 2; _v566A4 = 1; _v566A5 = 0; _v566A8 = 5; @@ -475,15 +478,12 @@ void Ringworld2Globals::reset() { _v5780E = 0; _v57810 = 0; _v57C2C = 0; - _v565EC[0] = 0; - _v565EC[1] = 27; - _v565EC[2] = 27; - _v565EC[3] = 4; - _v565EC[4] = 4; + _s1550PlayerArea[R2_QUINN] = Common::Point(27, 4); + _s1550PlayerArea[R2_SEEKER] = Common::Point(27, 4); Common::fill(&_scannerFrequencies[0], &_scannerFrequencies[MAX_CHARACTERS], 1); _speechSubtitles = SPEECH_VOICE | SPEECH_TEXT; _insetUp = 0; - _frameEdgeColour = 2; + _frameEdgeColor = 2; Common::fill(&_stripManager_lookupList[0], &_stripManager_lookupList[12], 0); _stripManager_lookupList[0] = 1; _stripManager_lookupList[1] = 1; @@ -496,10 +496,14 @@ void Ringworld2Globals::reset() { _stripManager_lookupList[10] = 1; _stripManager_lookupList[11] = 1; + // Reset junk/component data in scene 1550 + Common::copy(&scene1550JunkLocationsDefault[0], &scene1550JunkLocationsDefault[508], + &_scene1550JunkLocations[0]); + // Reset fields stored in the player class _player._characterIndex = R2_QUINN; - _player._characterScene[1] = 100; - _player._characterScene[2] = 300; + _player._characterScene[R2_QUINN] = 100; + _player._characterScene[R2_SEEKER] = 300; _player._characterScene[3] = 300; } @@ -519,11 +523,10 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v565E7); s.syncAsSint16LE(_v565E9); s.syncAsSint16LE(_v565EB); - s.syncAsSint16LE(_v565F5); - s.syncAsSint16LE(_v565F6); - s.syncAsSint16LE(_v565F8); - s.syncAsSint16LE(_v565FA); - s.syncAsSint16LE(_v566A3); + s.syncAsSint16LE(_foodCount); + s.syncAsSint32LE(_rimLocation); + s.syncAsSint16LE(_rimTransportLocation); + s.syncAsSint16LE(_landerSuitNumber); s.syncAsSint16LE(_v566A6); s.syncAsSint16LE(_v56A93); s.syncAsSint16LE(_scene1925CurrLevel); // _v56A9C @@ -539,8 +542,12 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsSint16LE(_v57C2C); s.syncAsSint16LE(_speechSubtitles); - for (i = 0; i < 5; i++) - s.syncAsByte(_v565EC[i]); + byte temp; + s.syncAsByte(temp); + s.syncAsByte(_s1550PlayerArea[R2_QUINN].x); + s.syncAsByte(_s1550PlayerArea[R2_SEEKER].x); + s.syncAsByte(_s1550PlayerArea[R2_QUINN].y); + s.syncAsByte(_s1550PlayerArea[R2_SEEKER].y); for (i = 0; i < MAX_CHARACTERS; ++i) s.syncAsByte(_scannerFrequencies[i]); @@ -558,7 +565,7 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_v56AA8); for (i = 0; i < 14; ++i) - s.syncAsByte(_v56605[i]); + s.syncAsByte(_spillLocation[i]); for (i = 0; i < 1000; ++i) s.syncAsByte(_v566AB[i]); s.syncAsByte(_v56A99); @@ -566,7 +573,10 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_stripManager_lookupList[i]); s.syncAsSint16LE(_insetUp); - s.syncAsByte(_frameEdgeColour); + s.syncAsByte(_frameEdgeColor); + + for (i = 0; i < 508; i += 4) + s.syncAsByte(_scene1550JunkLocations[i + 2]); } } // end of namespace Ringworld2 diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index ed27ff0556..9d4de26b91 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -242,11 +242,6 @@ namespace Ringworld2 { #define SPEECH_TEXT 1 #define SPEECH_VOICE 2 -#define k5A78C 15 -#define k5A78D 16 -#define k5A790 18 -#define k5A791 17 - class ScannerDialog; class Ringworld2Globals: public TsAGE2Globals { @@ -258,7 +253,7 @@ public: byte _fadePaletteMap[10][256]; byte _paletteMap[4096]; int _insetUp; - int _frameEdgeColour; // _v421e + int _frameEdgeColor; // _v421e Rect _v5589E; Rect _v558B6; int _v558C2; @@ -269,18 +264,17 @@ public: int _v565E7; int _v565E9; int _v565EB; - int _v565F5; - int _v565F6; - int _v565F8; - int _v565FA; + int _foodCount; + int _rimLocation; + int _rimTransportLocation; int _v5657C; byte _v565AE; - byte _v56605[14]; + byte _spillLocation[14]; int _v56613[76]; byte _v566A4; byte _v566A5; int _v566A6; - byte _v566A3; + byte _landerSuitNumber; byte _v566A8; byte _v566A9; byte _v566AA; @@ -304,9 +298,10 @@ public: int _v57810; int _v57C2C; int _speechSubtitles; - byte _v565EC[5]; + Common::Point _s1550PlayerArea[3]; // only used for Quinn and Seeker byte _scannerFrequencies[4]; byte _stripManager_lookupList[12]; + byte _scene1550JunkLocations[508]; ScannerDialog *_scannerDialog; Ringworld2Globals(); diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 1815c3d751..2395cc67ed 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -806,20 +806,20 @@ void GfxElement::drawFrame() { *((byte *)surface.getBasePtr(tempRect.right - 1, tempRect.bottom - 1)) = 0; // Inner frame border - surface.hLine(tempRect.left + 2, tempRect.top + 1, tempRect.right - 2, R2_GLOBALS._frameEdgeColour); - surface.hLine(tempRect.left + 2, tempRect.bottom - 1, tempRect.right - 2, R2_GLOBALS._frameEdgeColour); - surface.vLine(tempRect.left + 1, tempRect.top + 2, tempRect.bottom - 2, R2_GLOBALS._frameEdgeColour); - surface.vLine(tempRect.right - 1, tempRect.top + 2, tempRect.bottom - 2, R2_GLOBALS._frameEdgeColour); - *((byte *)surface.getBasePtr(tempRect.left + 2, tempRect.top + 2)) = R2_GLOBALS._frameEdgeColour; - *((byte *)surface.getBasePtr(tempRect.right - 2, tempRect.top + 2)) = R2_GLOBALS._frameEdgeColour; - *((byte *)surface.getBasePtr(tempRect.left + 2, tempRect.bottom - 2)) = R2_GLOBALS._frameEdgeColour; - *((byte *)surface.getBasePtr(tempRect.right - 2, tempRect.bottom - 2)) = R2_GLOBALS._frameEdgeColour; + surface.hLine(tempRect.left + 2, tempRect.top + 1, tempRect.right - 2, R2_GLOBALS._frameEdgeColor); + surface.hLine(tempRect.left + 2, tempRect.bottom - 1, tempRect.right - 2, R2_GLOBALS._frameEdgeColor); + surface.vLine(tempRect.left + 1, tempRect.top + 2, tempRect.bottom - 2, R2_GLOBALS._frameEdgeColor); + surface.vLine(tempRect.right - 1, tempRect.top + 2, tempRect.bottom - 2, R2_GLOBALS._frameEdgeColor); + *((byte *)surface.getBasePtr(tempRect.left + 2, tempRect.top + 2)) = R2_GLOBALS._frameEdgeColor; + *((byte *)surface.getBasePtr(tempRect.right - 2, tempRect.top + 2)) = R2_GLOBALS._frameEdgeColor; + *((byte *)surface.getBasePtr(tempRect.left + 2, tempRect.bottom - 2)) = R2_GLOBALS._frameEdgeColor; + *((byte *)surface.getBasePtr(tempRect.right - 2, tempRect.bottom - 2)) = R2_GLOBALS._frameEdgeColor; gfxManager.unlockSurface(); gfxManager.getSurface().addDirtyRect(tempRect); } else { - // Fill dialog content with specified background colour + // Fill dialog content with specified background color gfxManager.fillRect(tempRect, _colors.background); --tempRect.bottom; --tempRect.right; diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp index 57fdef6405..663697d94d 100644 --- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp +++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp @@ -234,9 +234,9 @@ void CharacterDialog::show() { SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene; scene->saveCharacter(oldCharacter); - // Play a transition sound as the character is changed + // Play the correctfrequency, if any, of the character being switched to's scanner device if (R2_GLOBALS._player._characterScene[0] != 300) { - switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex] - 1) { case 0: R2_GLOBALS._sound4.stop(); break; @@ -256,7 +256,7 @@ void CharacterDialog::show() { break; } } else if (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex] > 1) { - switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._scannerFrequencies[R2_GLOBALS._player._characterIndex] - 1) { case 2: R2_GLOBALS._sound4.play(45); break; @@ -272,8 +272,8 @@ void CharacterDialog::show() { default: break; } - } else if ((R2_GLOBALS._player._characterScene[1] == 300) && (R2_GLOBALS._scannerFrequencies[1] != 1)) { - switch (R2_GLOBALS._scannerFrequencies[1]) { + } else if ((R2_GLOBALS._player._characterScene[R2_QUINN] == 300) && (R2_GLOBALS._scannerFrequencies[1] != 1)) { + switch (R2_GLOBALS._scannerFrequencies[1] - 1) { case 2: R2_GLOBALS._sound4.play(45); break; @@ -289,12 +289,12 @@ void CharacterDialog::show() { default: break; } - } else if (R2_GLOBALS._player._characterScene[2] != 300) { + } else if (R2_GLOBALS._player._characterScene[R2_SEEKER] != 300) { R2_GLOBALS._sound4.stop(); } else if (R2_GLOBALS._scannerFrequencies[2] == 1) { R2_GLOBALS._sound4.stop(); } else { - switch (R2_GLOBALS._scannerFrequencies[1]) { + switch (R2_GLOBALS._scannerFrequencies[1] - 1) { case 2: R2_GLOBALS._sound4.play(45); break; diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index f1f9f9fe5a..98e455b41b 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -133,6 +133,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Cutscene - Elevator return new Scene1530(); case 1550: + // Spaceport return new Scene1550(); case 1575: return new Scene1575(); @@ -143,16 +144,22 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { // Miranda being questioned return new Scene1625(); case 1700: + // Rim return new Scene1700(); case 1750: + // Rim Transport Vechile return new Scene1750(); case 1800: + // Rim Lift Exterior return new Scene1800(); case 1850: + // Rim Lift Interior return new Scene1850(); case 1875: + // Rim Lift Computer return new Scene1875(); case 1900: + // Spill Mountains Elevator Exit return new Scene1900(); case 1925: return new Scene1925(); @@ -163,49 +170,49 @@ Scene *Ringworld2Game::createScene(int sceneNumber) { /* Scene group #2 */ // case 2000: - // Ice Maze + // Spill Mountains return new Scene2000(); case 2350: - // Ice Maze: Balloon Launch Platform + // Spill Mountains: Balloon Launch Platform return new Scene2350(); case 2400: - // Ice Maze: Large empty room + // Spill Mountains: Large empty room return new Scene2400(); case 2425: - // Ice Maze: The Hall of Records + // Spill Mountains: The Hall of Records return new Scene2425(); case 2430: - // Ice Maze: Bedroom + // Spill Mountains: Bedroom return new Scene2430(); case 2435: - // Ice Maze: Throne room + // Spill Mountains: Throne room return new Scene2435(); case 2440: - // Ice Maze: Another bedroom + // Spill Mountains: Another bedroom return new Scene2440(); case 2445: - // Ice Maze: + // Spill Mountains: return new Scene2445(); case 2450: - // Ice Maze: Another bedroom + // Spill Mountains: Another bedroom return new Scene2450(); case 2455: - // Ice Maze: Inside crevasse + // Spill Mountains: Inside crevasse return new Scene2455(); case 2500: - // Ice Maze: Large Cave + // Spill Mountains: Large Cave return new Scene2500(); case 2525: - // Ice Maze: Furnace room + // Spill Mountains: Furnace room return new Scene2525(); case 2530: - // Ice Maze: Well + // Spill Mountains: Well return new Scene2530(); case 2535: - // Ice Maze: Tannery + // Spill Mountains: Tannery return new Scene2535(); case 2600: - // Ice Maze: Exit + // Spill Mountains: Exit return new Scene2600(); case 2700: // Forest Maze @@ -318,11 +325,10 @@ SceneExt::SceneExt(): Scene() { for (int i = 0; i < 256; i++) _field312[i] = 0; - _field372 = _field37A = 0; + _savedPlayerEnabled = false; _savedUiEnabled = false; _savedCanWalk = false; - _focusObject = NULL; // WORKAROUND: In the original, playing animations don't reset the global _animationCtr // counter as scene changes unless the playing animation explicitly finishes. For now, @@ -331,13 +337,20 @@ SceneExt::SceneExt(): Scene() { R2_GLOBALS._animationCtr = 0; } +void SceneExt::synchronize(Serializer &s) { + Scene::synchronize(s); + + s.syncBytes(&_field312[0], 256); + _sceneAreas.synchronize(s); +} + void SceneExt::postInit(SceneObjectList *OwnerList) { Scene::postInit(OwnerList); // Exclude the bottom area of the screen to allow room for the UI T2_GLOBALS._interfaceY = UI_INTERFACE_Y; - // Initialise fields + // Initialize fields _action = NULL; _field12 = 0; _sceneMode = 0; @@ -358,6 +371,7 @@ void SceneExt::postInit(SceneObjectList *OwnerList) { void SceneExt::remove() { _sceneAreas.clear(); Scene::remove(); + R2_GLOBALS._uiElements._active = true; } void SceneExt::process(Event &event) { @@ -382,27 +396,6 @@ void SceneExt::dispatch() { Scene::dispatch(); } -void SceneExt::loadScene(int sceneNum) { - Scene::loadScene(sceneNum); - - _v51C34.top = 0; - _v51C34.bottom = 300; - - int prevScene = R2_GLOBALS._sceneManager._previousScene; - int sceneNumber = R2_GLOBALS._sceneManager._sceneNumber; - - if (((prevScene == -1) && (sceneNumber != 180) && (sceneNumber != 205) && (sceneNumber != 50)) || - (sceneNumber == 50) || ((prevScene == 205) && (sceneNumber == 100)) || - ((prevScene == 180) && (sceneNumber == 100))) { - // TODO: sub_17875 - R2_GLOBALS._uiElements._active = true; - R2_GLOBALS._uiElements.show(); - } else { - // Update the user interface - R2_GLOBALS._uiElements.updateInventory(); - } -} - bool SceneExt::display(CursorType action, Event &event) { switch (action) { case CURSOR_CROSSHAIRS: @@ -464,7 +457,6 @@ void SceneExt::fadeOut() { void SceneExt::startStrip() { SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene; - scene->_field372 = 1; scene->_savedPlayerEnabled = R2_GLOBALS._player._enabled; if (scene->_savedPlayerEnabled) { @@ -480,7 +472,6 @@ void SceneExt::startStrip() { void SceneExt::endStrip() { SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene; - scene->_field372 = 0; if (scene->_savedPlayerEnabled) { R2_GLOBALS._player.enableControl(); @@ -620,7 +611,7 @@ void SceneHandlerExt::postLoad(int priorSceneBeforeLoad, int currentSceneBeforeL R2_GLOBALS._gfxColors.foreground = 59; R2_GLOBALS._fontColors.background = 4; R2_GLOBALS._fontColors.foreground = 15; - R2_GLOBALS._frameEdgeColour = 2; + R2_GLOBALS._frameEdgeColor = 2; R2_GLOBALS._scenePalette.loadPalette(0); R2_GLOBALS._scenePalette.setEntry(255, 0xff, 0xff, 0xff); @@ -664,7 +655,7 @@ void SceneHandlerExt::setupPaletteMaps() { break; } - // Scan for the palette index with the closest matching colour + // Scan for the palette index with the closest matching color int threshold = 769; int foundIndex = -1; for (int pIndex2 = 223; pIndex2 >= 0; --pIndex2) { @@ -970,7 +961,8 @@ void Ringworld2InvObjectList::setObjectScene(int objectNum, int sceneNumber) { R2_GLOBALS._events.setCursor(CURSOR_USE); // Update the user interface if necessary - T2_GLOBALS._uiElements.updateInventory(); + T2_GLOBALS._uiElements.updateInventory( + (sceneNumber == R2_GLOBALS._player._characterIndex) ? objectNum : 0); } /** @@ -1324,7 +1316,7 @@ GfxSurface SceneActor::getFrame() { /*--------------------------------------------------------------------------*/ -SceneArea::SceneArea(): EventHandler() { +SceneArea::SceneArea(): SceneItem() { _enabled = true; _insideArea = false; _savedCursorNum = CURSOR_NONE; @@ -1337,8 +1329,8 @@ void SceneArea::synchronize(Serializer &s) { _bounds.synchronize(s); s.syncAsSint16LE(_enabled); s.syncAsSint16LE(_insideArea); - s.syncAsSint16LE(_cursorNum); - s.syncAsSint16LE(_savedCursorNum); + s.syncAsSint32LE(_cursorNum); + s.syncAsSint32LE(_savedCursorNum); s.syncAsSint16LE(_cursorState); } @@ -1428,6 +1420,7 @@ void SceneExit::process(Event &event) { /*--------------------------------------------------------------------------*/ void SceneAreaObject::remove() { + R2_GLOBALS._sceneItems.remove(this); _object1.remove(); SceneArea::remove(); --R2_GLOBALS._insetUp; @@ -1437,19 +1430,22 @@ void SceneAreaObject::process(Event &event) { if (_insetCount == R2_GLOBALS._insetUp) { CursorType cursor = R2_GLOBALS._events.getCursor(); - if (_bounds.contains(event.mousePos)) { + if (_object1._bounds.contains(event.mousePos)) { // Cursor moving in bounded area if (cursor == _cursorNum) { R2_GLOBALS._events.setCursor(_savedCursorNum); } } else if (event.mousePos.y < 168) { - if (_cursorNum != cursor) + if (_cursorNum != cursor) { // Cursor moved outside bounded area - R2_GLOBALS._events.setCursor(_savedCursorNum); - + _savedCursorNum = R2_GLOBALS._events.getCursor(); + R2_GLOBALS._events.setCursor(CURSOR_INVALID); + } + if (event.eventType == EVENT_BUTTON_DOWN) { - R2_GLOBALS._events.setCursor(_savedCursorNum); event.handled = true; + R2_GLOBALS._events.setCursor(_savedCursorNum); + remove(); } } } @@ -1469,7 +1465,7 @@ void SceneAreaObject::setDetails(int visage, int strip, int frameNumber, const C } void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { - ((SceneHotspot *)(this))->setDetails(resNum, lookLineNum, talkLineNum, useLineNum, + _object1.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *)NULL); } @@ -1881,7 +1877,7 @@ bool AnimationPlayer::load(int animId, Action *endAction) { default: // ANIMPALMODE_CURR_PALETTE - // Use the closest matching colours in the currently active palette to those specified in the animation + // Use the closest matching colors in the currently active palette to those specified in the animation for (int idx = _subData._palStart; idx < (_subData._palStart + _subData._palSize); ++idx) { byte r = _subData._palData[idx * 3]; byte g = _subData._palData[idx * 3 + 1]; @@ -2269,21 +2265,21 @@ void ScannerDialog::Button::reset() { scanner._obj5.postInit(); scanner._obj5.setup(4, 4, 1); - scanner._obj5.setPosition(Common::Point(R2_GLOBALS._v565EC[1] + 145, - R2_GLOBALS._v565EC[3] + 59)); + scanner._obj5.setPosition(Common::Point(R2_GLOBALS._s1550PlayerArea[R2_QUINN].x + 145, + R2_GLOBALS._s1550PlayerArea[R2_QUINN].y + 59)); scanner._obj5.fixPriority(257); scanner._obj6.postInit(); scanner._obj6.setup(4, 4, 2); - scanner._obj6.setPosition(Common::Point(R2_GLOBALS._v565EC[2] + 145, - R2_GLOBALS._v565EC[4] + 59)); + scanner._obj6.setPosition(Common::Point(R2_GLOBALS._s1550PlayerArea[R2_SEEKER].x + 145, + R2_GLOBALS._s1550PlayerArea[R2_SEEKER].y + 59)); scanner._obj6.fixPriority(257); break; case 1700: case 1800: - if (R2_GLOBALS._v565F8 < 0 || (R2_GLOBALS._v565F8 == 0 && R2_GLOBALS._v565F6 < 1201)) + if (R2_GLOBALS._rimLocation < 1201) scanner._obj4.setup(4, 3, 3); - else if (R2_GLOBALS._v565F8 > 0 || (R2_GLOBALS._v565F8 == 0 && R2_GLOBALS._v565F6 < 1201)) + else if (R2_GLOBALS._rimLocation < 1201) scanner._obj4.setup(4, 3, 4); else scanner._obj4.setup(4, 3, 5); @@ -2416,7 +2412,7 @@ void ScannerDialog::remove() { switch (R2_GLOBALS._sceneManager._sceneNumber) { case 1550: case 1700: - R2_GLOBALS._events.setCursor(R2_GLOBALS._player._canWalk ? CURSOR_ARROW : CURSOR_USE); + R2_GLOBALS._events.setCursor(R2_GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE); break; case 3800: case 3900: { diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index 1b4b7fca1f..c7e36fc5f0 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -42,9 +42,8 @@ public: static Scene *createScene(int sceneNumber); }; -class SceneArea: public EventHandler { +class SceneArea: public SceneItem { public: - Rect _bounds; bool _enabled; bool _insideArea; CursorType _cursorNum; @@ -54,9 +53,12 @@ public: SceneArea(); void setDetails(const Rect &bounds, CursorType cursor); + virtual Common::String getClassName() { return "SceneArea"; } virtual void synchronize(Serializer &s); virtual void remove(); virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event) { return false; } + virtual void doAction(int action) {} }; class SceneExit: public SceneArea { @@ -80,26 +82,21 @@ private: static void endStrip(); public: byte _field312[256]; - int _field372; bool _savedPlayerEnabled; bool _savedUiEnabled; bool _savedCanWalk; - int _field37A; - SceneObject *_focusObject; Visage _cursorVisage; SynchronizedList<EventHandler *> _sceneAreas; - - Rect _v51C34; public: SceneExt(); virtual Common::String getClassName() { return "SceneExt"; } + virtual void synchronize(Serializer &s); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); virtual void process(Event &event); virtual void dispatch(); - virtual void loadScene(int sceneNum); virtual void refreshBackground(int xAmount, int yAmount); virtual void saveCharacter(int characterIndex); virtual void restore() {} diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index 8d35fc7222..40e17b6ed9 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -392,11 +392,11 @@ void Scene100::dispatch() { * *--------------------------------------------------------------------------*/ -bool Scene125::Object5::startAction(CursorType action, Event &event) { +bool Scene125::Food::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) return true; - else - return SceneActor::startAction(action, event); + + return SceneActor::startAction(action, event); } /*--------------------------------------------------------------------------*/ @@ -577,7 +577,7 @@ bool Scene125::DiskSlot::startAction(CursorType action, Event &event) { Scene125 *scene = (Scene125 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldCharacterScene[1]) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldCharacterScene[R2_QUINN]) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 126; scene->setAction(&scene->_sequenceManager, scene, 126, &scene->_infoDisk, NULL); @@ -619,21 +619,21 @@ void Scene125::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene != 125) // Save the prior scene to return to when the console is turned off - R2_GLOBALS._player._oldCharacterScene[1] = R2_GLOBALS._sceneManager._previousScene; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = R2_GLOBALS._sceneManager._previousScene; R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldCharacterScene[1]) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == R2_GLOBALS._player._oldCharacterScene[R2_QUINN]) { _infoDisk.postInit(); _infoDisk.setup(160, 3, 5); _infoDisk.setPosition(Common::Point(47, 167)); } - _object6.postInit(); - _object6.setup(162, 1, 1); - _object6.setPosition(Common::Point(214, 168)); + _foodDispenser.postInit(); + _foodDispenser.setup(162, 1, 1); + _foodDispenser.setPosition(Common::Point(214, 168)); _diskSlot.setDetails(Rect(27, 145, 81, 159), 126, 9, -1, -1, 1, NULL); _item3.setDetails(Rect(144, 119, 286, 167), 126, 6, 7, 8, 1, NULL); @@ -656,8 +656,8 @@ void Scene125::signal() { _icon4.postInit(); _icon4._sceneRegionId = 5; - _sceneMode = 2; setAction(&_sequenceManager, this, 127, &_icon1, &_icon2, &_icon3, &_icon4, &R2_GLOBALS._player, NULL); + _sceneMode = 2; break; case 2: _icon1.setup(160, 1, 1); @@ -698,7 +698,7 @@ void Scene125::signal() { _icon6._sceneRegionId = 8; consoleAction(5); - R2_GLOBALS._player.enableControl(); + R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 10: @@ -781,7 +781,7 @@ void Scene125::signal() { } break; case 125: - R2_INVENTORY.setObjectScene(R2_OPTO_DISK, R2_GLOBALS._player._oldCharacterScene[1]); + R2_INVENTORY.setObjectScene(R2_OPTO_DISK, R2_GLOBALS._player._oldCharacterScene[R2_QUINN]); R2_GLOBALS._player.enableControl(); break; case 126: @@ -883,7 +883,7 @@ void Scene125::consoleAction(int id) { _icon2.setIcon(23); break; case 6: - R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldCharacterScene[1]); + R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._player._oldCharacterScene[R2_QUINN]); break; case 7: if (_consoleMode == 11) @@ -946,7 +946,7 @@ void Scene125::consoleAction(int id) { break; case 13: consoleAction(2); - if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != R2_GLOBALS._player._oldCharacterScene[1]) { + if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) != R2_GLOBALS._player._oldCharacterScene[R2_QUINN]) { SceneItem::display2(126, 17); } else { R2_GLOBALS._player.disableControl(); @@ -971,14 +971,17 @@ void Scene125::consoleAction(int id) { case 15: consoleAction(3); - if (R2_GLOBALS._v565F5 < 3) { + if (R2_GLOBALS._foodCount < 3) { R2_GLOBALS._player.disableControl(); - _object5.postInit(); - _object5.setup(162, 2, 2); - _object5.setPosition(Common::Point(216, UI_INTERFACE_Y)); + _food.postInit(); + _food.setup(162, 2, 2); + _food.setPosition(Common::Point(216, UI_INTERFACE_Y)); - R2_GLOBALS._v565F5 += 2; - } else if (R2_GLOBALS._v565F5 == 3) { + R2_GLOBALS._foodCount += 2; + + _sceneMode = 128; + this->setAction(&_sequenceManager, this, 128, &_foodDispenser, &_food, NULL); + } else if (R2_GLOBALS._foodCount == 3) { SceneItem::display2(126, 13); } else { SceneItem::display2(126, 14); @@ -987,13 +990,16 @@ void Scene125::consoleAction(int id) { case 16: consoleAction(3); - if (R2_GLOBALS._v565F5 < 4) { + if (R2_GLOBALS._foodCount < 4) { R2_GLOBALS._player.disableControl(); - _object5.postInit(); - _object5.setup(162, 2, 3); - _object5.setPosition(Common::Point(218, UI_INTERFACE_Y)); + _food.postInit(); + _food.setup(162, 2, 3); + _food.setPosition(Common::Point(218, UI_INTERFACE_Y)); - ++R2_GLOBALS._v565F5; + ++R2_GLOBALS._foodCount; + + _sceneMode = 128; + this->setAction(&_sequenceManager, this, 128, &_foodDispenser, &_food, NULL); } else { SceneItem::display2(126, 15); } @@ -1001,13 +1007,16 @@ void Scene125::consoleAction(int id) { case 17: consoleAction(3); - if (R2_GLOBALS._v565F5 < 4) { + if (R2_GLOBALS._foodCount < 4) { R2_GLOBALS._player.disableControl(); - _object5.postInit(); - _object5.setup(162, 2, 1); - _object5.setPosition(Common::Point(215, UI_INTERFACE_Y)); + _food.postInit(); + _food.setup(162, 2, 1); + _food.setPosition(Common::Point(215, UI_INTERFACE_Y)); - ++R2_GLOBALS._v565F5; + ++R2_GLOBALS._foodCount; + + _sceneMode = 128; + this->setAction(&_sequenceManager, this, 128, &_foodDispenser, &_food, NULL); } else { SceneItem::display2(126, 16); } @@ -1924,7 +1933,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.foreground = 4; R2_GLOBALS._gfxColors.background = 3; R2_GLOBALS._fontColors.background = 3; - R2_GLOBALS._frameEdgeColour = 3; + R2_GLOBALS._frameEdgeColor = 3; break; case 1: @@ -1933,7 +1942,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.foreground = 25; R2_GLOBALS._gfxColors.background = 43; R2_GLOBALS._fontColors.background = 48; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; case 2: @@ -1943,7 +1952,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.background = 136; R2_GLOBALS._fontColors.background = 48; R2_GLOBALS._fontColors.foreground = 253; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; case 3: @@ -1952,7 +1961,7 @@ void Scene180::restore() { R2_GLOBALS._gfxColors.foreground = 84; R2_GLOBALS._gfxColors.background = 118; R2_GLOBALS._fontColors.background = 47; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; case 14: @@ -1962,7 +1971,7 @@ void Scene180::restore() { R2_GLOBALS._fontColors.foreground = 38; R2_GLOBALS._gfxColors.foreground = 192; R2_GLOBALS._gfxColors.background = 30; - R2_GLOBALS._frameEdgeColour = 48; + R2_GLOBALS._frameEdgeColor = 48; break; default: @@ -2026,7 +2035,7 @@ void Scene200::EastExit::changeScene() { Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; _enabled = false; - R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.disableControl(CURSOR_WALK); scene->_sceneMode = 206; scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); } @@ -2035,7 +2044,7 @@ void Scene200::WestExit::changeScene() { Scene200 *scene = (Scene200 *)R2_GLOBALS._sceneManager._scene; _enabled = false; - R2_GLOBALS._player.disableControl(); + R2_GLOBALS._player.disableControl(CURSOR_WALK); scene->_sceneMode = 208; scene->setAction(&scene->_sequenceManager, scene, 208, &R2_GLOBALS._player, NULL); } @@ -2480,14 +2489,13 @@ void Scene205::handleText() { *--------------------------------------------------------------------------*/ Scene250::Button::Button(): SceneActor() { - _floorNumber = _v2 = 0; + _floorNumber = 0; } void Scene250::Button::synchronize(Serializer &s) { SceneActor::synchronize(s); s.syncAsSint16LE(_floorNumber); - s.syncAsSint16LE(_v2); } bool Scene250::Button::startAction(CursorType action, Event &event) { @@ -2495,7 +2503,7 @@ bool Scene250::Button::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (scene->_field414) { + if (scene->_destButtonY) { SceneItem::display2(250, 15); } else { switch (_floorNumber) { @@ -2546,7 +2554,6 @@ bool Scene250::Button::startAction(CursorType action, Event &event) { void Scene250::Button::setFloor(int floorNumber) { SceneActor::postInit(); _floorNumber = floorNumber; - _v2 = 0; if (_floorNumber <= 9) { SceneObject::setup(250, 1, 4); @@ -2571,17 +2578,18 @@ void Scene250::Button::setFloor(int floorNumber) { /*--------------------------------------------------------------------------*/ Scene250::Scene250(): SceneExt() { - _field412 = _field414 = _field416 = _field418 = _field41A = 0; + _currButtonY = _destButtonY = _elevatorSpeed = 0; + _skippingFl = _skippableFl = false; } void Scene250::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); - s.syncAsSint16LE(_field414); - s.syncAsSint16LE(_field416); - s.syncAsSint16LE(_field418); - s.syncAsSint16LE(_field41A); + s.syncAsSint16LE(_currButtonY); + s.syncAsSint16LE(_destButtonY); + s.syncAsSint16LE(_elevatorSpeed); + s.syncAsSint16LE(_skippableFl); + s.syncAsSint16LE(_skippingFl); } void Scene250::postInit(SceneObjectList *OwnerList) { @@ -2623,28 +2631,28 @@ void Scene250::postInit(SceneObjectList *OwnerList) { switch (R2_GLOBALS._sceneManager._previousScene) { case 200: - _field412 = 55; + _currButtonY = 55; break; case 300: - _field412 = 43; + _currButtonY = 43; break; case 700: - _field412 = 139; + _currButtonY = 139; break; case 850: - _field412 = 91; + _currButtonY = 91; break; default: R2_GLOBALS._sceneManager._previousScene = 200; - _field412 = 55; + _currButtonY = 55; break; } - _currentFloor.setPosition(Common::Point(111, _field412)); + _currentFloor.setPosition(Common::Point(111, _currButtonY)); } void Scene250::signal() { - if (_field41A) + if (_skippingFl) _sceneMode = 20; switch (_sceneMode) { @@ -2655,20 +2663,24 @@ void Scene250::signal() { R2_GLOBALS._player.setPosition(Common::Point(261, 185)); ADD_MOVER(R2_GLOBALS._player, 261, 15); - _field416 = 0; + _elevatorSpeed = 0; _sceneMode = 2; break; case 2: - _sceneMode = ((_field414 - 12) == _field412) ? 4 : 3; + if (_destButtonY - 12 == _currButtonY) + _sceneMode = 4; + else + _sceneMode = 3; + signal(); break; case 3: _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y + 12)); - _field412 += 12; + _currButtonY += 12; R2_GLOBALS._player.setPosition(Common::Point(261, 185)); ADD_MOVER(R2_GLOBALS._player, 261, 15); - if ((_field414 - 12) == _field412) + if ((_destButtonY - 12) == _currButtonY) _sceneMode = 4; break; case 4: @@ -2690,12 +2702,12 @@ void Scene250::signal() { R2_GLOBALS._player.setup(250, 1, 2); R2_GLOBALS._player.setPosition(Common::Point(261, 15)); ADD_MOVER(R2_GLOBALS._player, 261, 185); - _field416 = 0; + _elevatorSpeed = 0; _sceneMode = 7; break; case 7: - _field418 = 1; - if ((_field414 + 12) == _field412) + _skippableFl = true; + if ((_destButtonY + 12) == _currButtonY) _sceneMode = 9; else _sceneMode = 8; @@ -2703,11 +2715,11 @@ void Scene250::signal() { break; case 8: _currentFloor.setPosition(Common::Point(111, _currentFloor._position.y - 12)); - _field412 -= 12; + _currButtonY -= 12; R2_GLOBALS._player.setPosition(Common::Point(261, 15)); ADD_MOVER(R2_GLOBALS._player, 261, 185); - if ((_field414 + 12) == _field412) + if ((_destButtonY + 12) == _currButtonY) _sceneMode = 9; break; case 9: @@ -2723,7 +2735,7 @@ void Scene250::signal() { break; case 20: // Handle changing scene - switch (_field414) { + switch (_destButtonY) { case 55: R2_GLOBALS._sceneManager.changeScene(200); break; @@ -2746,12 +2758,13 @@ void Scene250::signal() { } void Scene250::changeFloor(int floorNumber) { - _field414 = (floorNumber - 1) * 12 + 43; - _button1.setPosition(Common::Point(111, _field414)); + _destButtonY = (floorNumber - 1) * 12 + 43; + _button1.setPosition(Common::Point(111, _destButtonY)); _button1.show(); - _sceneMode = (_field412 >= _field414) ? 6 : 1; - if (_field414 == _field412) + _skippableFl = true; + _sceneMode = (_currButtonY >= _destButtonY) ? 6 : 1; + if (_destButtonY == _currButtonY) _sceneMode = 20; signal(); @@ -2759,8 +2772,8 @@ void Scene250::changeFloor(int floorNumber) { void Scene250::process(Event &event) { if (!event.handled) { - if (((event.eventType == EVENT_KEYPRESS) || (event.btnState != 0)) && _field418) { - _field41A = 1; + if (((event.eventType == EVENT_KEYPRESS) || (event.btnState == BTNSHIFT_RIGHT)) && _skippableFl) { + _skippingFl = true; event.handled = true; } @@ -2771,14 +2784,14 @@ void Scene250::process(Event &event) { void Scene250::dispatch() { SceneExt::dispatch(); - if (((_sceneMode == 2) || (_sceneMode == 7)) && (_field416 < 100)) { - ++_field416; - R2_GLOBALS._player._moveDiff.y = _field416 / 5; + if (((_sceneMode == 2) || (_sceneMode == 7)) && (_elevatorSpeed < 100)) { + ++_elevatorSpeed; + R2_GLOBALS._player._moveDiff.y = _elevatorSpeed / 5; } if (((_sceneMode == 5) || (_sceneMode == 10)) && (R2_GLOBALS._player._moveDiff.y > 4)) { - --_field416; - R2_GLOBALS._player._moveDiff.y = _field416 / 7 + 3; + --_elevatorSpeed; + R2_GLOBALS._player._moveDiff.y = (_elevatorSpeed / 7) + 3; } } @@ -3142,7 +3155,7 @@ bool Scene300::Doorway::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) { if ((R2_GLOBALS._player._characterIndex == R2_QUINN) && - (!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500)) { + (!R2_GLOBALS.getFlag(44) || R2_GLOBALS._player._characterScene[R2_SEEKER] == 500)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 301; scene->setAction(&scene->_sequenceManager1, scene, 301, &R2_GLOBALS._player, this, NULL); @@ -3266,7 +3279,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _miranda.setAction(&_action3); _miranda.setDetails(300, 39, 40, 41, 1, (SceneItem *)NULL); - if ((R2_GLOBALS._player._characterScene[2] == 300) || (R2_GLOBALS._player._characterScene[2] == 325)) { + if ((R2_GLOBALS._player._characterScene[R2_SEEKER] == 300) || (R2_GLOBALS._player._characterScene[R2_SEEKER] == 325)) { _seeker.postInit(); _seeker.setVisage(302); _seeker.setPosition(Common::Point(158, 108)); @@ -3288,7 +3301,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _miranda.setAction(&_action3); _miranda.setDetails(300, 39, 40, 41, 1, (SceneItem *)NULL); - if ((R2_GLOBALS._player._characterScene[1] == 300) || (R2_GLOBALS._player._characterScene[1] == 325)) { + if ((R2_GLOBALS._player._characterScene[R2_QUINN] == 300) || (R2_GLOBALS._player._characterScene[R2_QUINN] == 325)) { _quinn.postInit(); _quinn.setup(302, 3, 1); _quinn.setPosition(Common::Point(271, 150)); @@ -3304,7 +3317,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { break; case 3: - if ((R2_GLOBALS._player._characterScene[2] == 300) || (R2_GLOBALS._player._characterScene[2] == 325)) { + if ((R2_GLOBALS._player._characterScene[R2_SEEKER] == 300) || (R2_GLOBALS._player._characterScene[R2_SEEKER] == 325)) { _seeker.postInit(); _seeker.setVisage(302); _seeker.setPosition(Common::Point(158, 108)); @@ -3313,7 +3326,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { _seeker.setDetails(300, 42, 43, 44, 1, (SceneItem *)NULL); } - if ((R2_GLOBALS._player._characterScene[1] == 300) || (R2_GLOBALS._player._characterScene[1] == 325)) { + if ((R2_GLOBALS._player._characterScene[R2_QUINN] == 300) || (R2_GLOBALS._player._characterScene[R2_QUINN] == 325)) { _quinn.postInit(); _quinn.setup(302, 3, 1); _quinn.setPosition(Common::Point(271, 150)); @@ -3559,7 +3572,7 @@ void Scene300::signal() { break; case 16: - if (_stripManager._field2E8 == 1) { + if (_stripManager._exitMode == 1) { R2_GLOBALS._player.setAction(NULL); R2_GLOBALS._sceneManager.changeScene(1000); } else { @@ -3644,7 +3657,7 @@ void Scene300::signal() { break; case 316: - R2_GLOBALS._player._characterScene[2] = 500; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 500; _seeker.remove(); R2_GLOBALS._player.enableControl(CURSOR_CROSSHAIRS); break; @@ -4813,6 +4826,11 @@ void Scene400::dispatch() { * *--------------------------------------------------------------------------*/ +Scene500::PanelDialog::Button::Button() { + _buttonId = 0; + _buttonDown = false; +} + bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; @@ -4835,17 +4853,18 @@ bool Scene500::ControlPanel::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ -bool Scene500::Object2::startAction(CursorType action, Event &event) { +bool Scene500::Seeker::startAction(CursorType action, Event &event) { Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; if (action == CURSOR_TALK) { R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { scene->_stripNumber = R2_GLOBALS.getFlag(26) ? 1101 : 1103; } else { scene->_stripNumber = R2_GLOBALS.getFlag(26) ? 1102 : 1105; } + scene->_sceneMode = 524; scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); return true; } else { @@ -4853,7 +4872,7 @@ bool Scene500::Object2::startAction(CursorType action, Event &event) { } } -bool Scene500::Object3::startAction(CursorType action, Event &event) { +bool Scene500::Suit::startAction(CursorType action, Event &event) { Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -4864,20 +4883,20 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { case CURSOR_USE: if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if ((_strip != 3) && (_strip != 7)) - SceneItem::display2(500, _strip); + SceneItem::display2(500, _strip + 25); else if (R2_GLOBALS.getFlag(26)) { R2_GLOBALS._player.disableControl(); scene->_stripNumber = 1103; scene->_sceneMode = 524; - scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 512, &R2_GLOBALS._player, NULL); } else if (!R2_GLOBALS.getFlag(28)) SceneItem::display2(500, 41); - else if (!R2_GLOBALS.getFlag(40)) + else if (!R2_GLOBALS.getFlag(25)) SceneItem::display2(500, 40); else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 512; - scene->setAction(&scene->_sequenceManager1, scene, 524, &R2_GLOBALS._player, &scene->_object3, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 512, &R2_GLOBALS._player, &scene->_suit, NULL); R2_GLOBALS.setFlag(26); } } else { @@ -4893,7 +4912,7 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 515; - scene->setAction(&scene->_sequenceManager1, scene, 515, &R2_GLOBALS._player, &scene->_object3, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 515, &R2_GLOBALS._player, &scene->_suit, NULL); R2_GLOBALS.setFlag(28); } return true; @@ -4903,12 +4922,7 @@ bool Scene500::Object3::startAction(CursorType action, Event &event) { return true; default: - if (action < R2_LAST_INVENT) { - SceneItem::display2(500, action); - return true; - } else { - return SceneActor::startAction(action, event); - } + return SceneActor::startAction(action, event); } } @@ -4976,7 +4990,7 @@ bool Scene500::AirLock::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = (R2_GLOBALS._player._characterIndex == R2_QUINN) ? 521 : 522; scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, - &scene->_object2, &scene->_airLock, NULL); + &scene->_seeker, &scene->_airLock, NULL); return true; } else { return SceneActor::startAction(action, event); @@ -5045,7 +5059,36 @@ bool Scene500::Locker2::startAction(CursorType action, Event &event) { } } -bool Scene500::Object::startAction(CursorType action, Event &event) { +/*--------------------------------------------------------------------------*/ + +void Scene500::PanelDialog::setDetails(int visage, int strip, int frameNumber, + const Common::Point &pt) { + SceneAreaObject::setDetails(visage, strip, frameNumber, pt); + SceneAreaObject::setDetails(500, 43, 32, 45); + + _button1.setupButton(1); + _button2.setupButton(2); + _button3.setupButton(3); +} + +void Scene500::PanelDialog::remove() { + Scene500 *scene = (Scene500 *)BF_GLOBALS._sceneManager._scene; + scene->_sceneAreas.remove(&_button1); + scene->_sceneAreas.remove(&_button2); + scene->_sceneAreas.remove(&_button3); + + _button1.remove(); + _button2.remove(); + _button3.remove(); + + SceneAreaObject::remove(); + + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = 511; + scene->setAction(&scene->_sequenceManager1, scene, 511, &R2_GLOBALS._player, NULL); +} + +bool Scene500::PanelDialog::Button::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) { return false; } else { @@ -5053,6 +5096,119 @@ bool Scene500::Object::startAction(CursorType action, Event &event) { } } +void Scene500::PanelDialog::Button::setupButton(int buttonId) { + _buttonId = buttonId; + _buttonDown = false; + SceneActor::postInit(); + setup(500, 7, 1); + fixPriority(251); + + switch (_buttonId) { + case 1: + setPosition(Common::Point(139, 78)); + break; + case 2: + setPosition(Common::Point(139, 96)); + break; + case 3: + setPosition(Common::Point(139, 114)); + break; + default: + break; + } + + Scene500 *scene = (Scene500 *)BF_GLOBALS._sceneManager._scene; + scene->_sceneAreas.push_front(this); +} + +void Scene500::PanelDialog::Button::synchronize(Serializer &s) { + SceneActor::synchronize(s); + + s.syncAsSint16LE(_buttonId); + s.syncAsSint16LE(_buttonDown); +} + +void Scene500::PanelDialog::Button::process(Event &event) { + if ((event.eventType == EVENT_BUTTON_DOWN) && + (R2_GLOBALS._events.getCursor() == CURSOR_USE) && + _bounds.contains(event.mousePos) && !_buttonDown) { + _buttonDown = true; + event.handled = true; + setFrame(2); + } + + if ((event.eventType == EVENT_BUTTON_UP) && _buttonDown) { + setFrame(1); + _buttonDown = false; + event.handled = true; + + doButtonPress(); + } +} + +void Scene500::PanelDialog::Button::doButtonPress() { + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + + if (R2_GLOBALS.getFlag(28)) { + SceneItem::display2(500, 48); + } else { + R2_GLOBALS._player.disableControl(); + scene->_sceneMode = _buttonId; + + switch (_buttonId) { + case 1: + if (--R2_GLOBALS._landerSuitNumber == 0) + R2_GLOBALS._landerSuitNumber = 3; + + if (R2_GLOBALS.getFlag(35)) { + scene->_sceneMode = 5; + scene->setAction(&scene->_sequenceManager1, scene, 509, &scene->_object1, + &scene->_suit, &scene->_object8, NULL); + } else { + scene->_sound1.play(127); + scene->_object1.animate(ANIM_MODE_6, scene); + } + break; + + case 2: + if (++R2_GLOBALS._landerSuitNumber == 4) + R2_GLOBALS._v566A4 = 1; + + if (R2_GLOBALS.getFlag(35)) { + scene->_sceneMode = 6; + scene->setAction(&scene->_sequenceManager1, scene, 509, &scene->_object1, + &scene->_suit, &scene->_object8, NULL); + } else { + scene->_sound1.play(127); + scene->_object1.animate(ANIM_MODE_6, scene); + } + break; + + case 3: + if (R2_GLOBALS.getFlag(35)) { + scene->_sceneMode = 509; + scene->setAction(&scene->_sequenceManager1, scene, 509, &scene->_object1, + &scene->_suit, &scene->_object8, NULL); + } else { + scene->_suit.postInit(); + scene->_suit.hide(); + scene->_suit._effect = 1; + scene->_suit.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); + scene->_suit.setup(502, R2_GLOBALS._landerSuitNumber + 2, 1); + + scene->setAction(&scene->_sequenceManager1, scene, 508, + &R2_GLOBALS._player, &scene->_object1, &scene->_suit, + &scene->_object8, NULL); + R2_GLOBALS.setFlag(35); + } + break; + + default: + break; + } + } +} + /*--------------------------------------------------------------------------*/ void Scene500::postInit(SceneObjectList *OwnerList) { @@ -5071,23 +5227,23 @@ void Scene500::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._walkRegions.disableRegion(1); - _object2.postInit(); - _object2._effect = 1; - _object2.setup(1505, 1, 1); - _object2._moveDiff.x = 5; - _object2.setPosition(Common::Point(42, 151)); - _object2.setDetails(500, 34, 35, 36, 1, (SceneItem *)NULL); + _seeker.postInit(); + _seeker._effect = 1; + _seeker.setup(1505, 1, 1); + _seeker._moveDiff.x = 5; + _seeker.setPosition(Common::Point(42, 151)); + _seeker.setDetails(500, 34, 35, 36, 1, (SceneItem *)NULL); } else if (R2_GLOBALS._player._characterScene[R2_QUINN] == 500) { - _object2.postInit(); - _object2._effect = 1; - _object2.setup(R2_GLOBALS.getFlag(26) ? 1500 : 10, 1, 1); - _object2.setPosition(Common::Point(42, 151)); + _seeker.postInit(); + _seeker._effect = 1; + _seeker.setup(R2_GLOBALS.getFlag(26) ? 1500 : 10, 1, 1); + _seeker.setPosition(Common::Point(42, 151)); R2_GLOBALS._walkRegions.disableRegion(1); R2_GLOBALS._walkRegions.disableRegion(2); R2_GLOBALS._walkRegions.disableRegion(3); - _object2.setDetails(500, 37, 38, -1, 1, (SceneItem *)NULL); + _seeker.setDetails(500, 37, 38, -1, 1, (SceneItem *)NULL); } } @@ -5167,16 +5323,16 @@ void Scene500::postInit(SceneObjectList *OwnerList) { } else { _object8.setup(500, 8, 7); - _object3.postInit(); - _object3._effect = 1; - _object3.setPosition(Common::Point(247, 52)); - _object3.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); + _suit.postInit(); + _suit._effect = 1; + _suit.setPosition(Common::Point(247, 52)); + _suit.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); if (!R2_GLOBALS.getFlag(26)) { if (R2_GLOBALS.getFlag(28)) - _object3.setup(502, 7, 2); + _suit.setup(502, 7, 2); else - _object3.setup(502, R2_GLOBALS._v566A3 + 2, 7); + _suit.setup(502, R2_GLOBALS._landerSuitNumber + 2, 7); } } @@ -5222,7 +5378,7 @@ void Scene500::signal() { _object1.animate(ANIM_MODE_6, this); R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 6: @@ -5231,7 +5387,7 @@ void Scene500::signal() { _object1.animate(ANIM_MODE_5, this); R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 7: @@ -5239,14 +5395,14 @@ void Scene500::signal() { _object8.animate(ANIM_MODE_6, this); R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 500: R2_GLOBALS._sceneManager.changeScene(700); break; case 501: - if (R2_GLOBALS._player._characterScene[R2_MIRANDA] == 500) { + if (R2_GLOBALS._player._characterScene[R2_SEEKER] == 500) { _stripNumber = 1100; _sceneMode = 523; setAction(&_sequenceManager1, this, 523, &R2_GLOBALS._player, NULL); @@ -5277,7 +5433,7 @@ void Scene500::signal() { break; case 506: case 518: - R2_GLOBALS.setFlag(11); + R2_GLOBALS.setFlag(12); R2_GLOBALS._player.enableControl(); break; case 507: @@ -5287,12 +5443,12 @@ void Scene500::signal() { break; case 509: R2_GLOBALS.clearFlag(35); - _object3.remove(); + _suit.remove(); R2_GLOBALS._player.enableControl(); break; case 510: R2_GLOBALS._player.enableControl(); - _area1.setDetails(500, 6, 1, Common::Point(160, 120)); + _panelDialog.setDetails(500, 6, 1, Common::Point(160, 120)); R2_GLOBALS._player.enableControl(); break; case 513: @@ -5391,22 +5547,22 @@ bool Scene600::Item4::startAction(CursorType action, Event &event) { Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; scene->_object1.setup2(603, 3, 1, 239, 54, 10, 0); - scene->_actor3.postInit(); - scene->_actor2.postInit(); + scene->_stasisField.postInit(); + scene->_computer.postInit(); scene->_sceneMode = 612; - scene->setAction(&scene->_sequenceManager1, scene, 612, &scene->_actor3, &scene->_actor2, &R2_GLOBALS._player, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 612, &scene->_stasisField, &scene->_computer, &R2_GLOBALS._player, NULL); return true; } -void Scene600::Actor4::signal() { +void Scene600::Smoke::signal() { Common::Point pt(177 + R2_GLOBALS._randomSource.getRandomNumber(5), 108 + R2_GLOBALS._randomSource.getRandomNumber(3)); NpcMover *mover = new NpcMover(); addMover(mover, &pt, this); } -bool Scene600::Actor4::startAction(CursorType action, Event &event) { +bool Scene600::Smoke::startAction(CursorType action, Event &event) { if (action >= CURSOR_WALK) // Only action cursors return SceneActor::startAction(action, event); @@ -5414,7 +5570,7 @@ bool Scene600::Actor4::startAction(CursorType action, Event &event) { return false; } -GfxSurface Scene600::Actor4::getFrame() { +GfxSurface Scene600::Smoke::getFrame() { GfxSurface frame = SceneActor::getFrame(); if (_effect) { @@ -5435,7 +5591,8 @@ GfxSurface Scene600::Actor4::getFrame() { } bool Scene600::Doorway::startAction(CursorType action, Event &event) { - if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) + // Only action cursors + if (action < CURSOR_WALK) return false; if (action != CURSOR_USE) @@ -5478,16 +5635,17 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { if (action < CURSOR_WALK) { switch (action) { case R2_COM_SCANNER: + // If laser is destroyed if (R2_GLOBALS.getFlag(6)) { if (R2_GLOBALS.getFlag(8)) { SceneItem::display(600, 29, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); return true; } else { R2_GLOBALS._player.disableControl(); - scene->_actor8.postInit(); - scene->_actor8.setDetails(600, 20, -1, -1, 4, &scene->_laser); + scene->_scanner.postInit(); + scene->_scanner.setDetails(600, 20, -1, -1, 4, &scene->_laser); scene->_sceneMode = 607; - scene->setAction(&scene->_sequenceManager1, scene, 607, &R2_GLOBALS._player, &scene->_actor8, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 607, &R2_GLOBALS._player, &scene->_scanner, NULL); return true; } } else { @@ -5503,21 +5661,22 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { scene->_aerosol.postInit(); scene->_aerosol.setDetails(600, 27, -1, -1, 5, &scene->_laser); - scene->_actor4.postInit(); - scene->_actor4.setup(601, 3, 1); - scene->_actor4._effect = 3; - scene->_actor4._moveDiff = Common::Point(1, 1); - scene->_actor4._moveRate = 2; - scene->_actor4._numFrames = 3; - scene->_actor4.setDetails(600, 24, 25, 26, 5, &scene->_aerosol); + scene->_smoke.postInit(); + scene->_smoke.setup(601, 3, 1); + scene->_smoke._effect = 3; + scene->_smoke._moveDiff = Common::Point(1, 1); + scene->_smoke._moveRate = 2; + scene->_smoke._numFrames = 3; + scene->_smoke.setDetails(600, 24, 25, 26, 5, &scene->_aerosol); scene->_sceneMode = 605; - scene->setAction(&scene->_sequenceManager1, scene, 605, &R2_GLOBALS._player, &scene->_aerosol, &scene->_actor4, &scene->_doorway, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 605, &R2_GLOBALS._player, &scene->_aerosol, &scene->_smoke, &scene->_doorway, NULL); return true; } break; case R2_CLAMP: + // If cloud is active if (R2_GLOBALS.getFlag(5)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 606; @@ -5547,9 +5706,11 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { bool Scene600::Aerosol::startAction(CursorType action, Event &event) { Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; - if ((action < CURSOR_WALK) && (action >= R2CURSORS_START)) { + // Only action cursors + if (action < CURSOR_WALK) return false; - } else if (action == CURSOR_USE) { + + if (action == CURSOR_USE) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 614; scene->setAction(&scene->_sequenceManager1, scene, 614, &R2_GLOBALS._player, &scene->_aerosol, NULL); @@ -5574,17 +5735,17 @@ void Scene600::synchronize(Serializer &s) { s.syncAsByte(_pixelMap[i]); } -bool Scene600::Actor8::startAction(CursorType action, Event &event) { +bool Scene600::Scanner::startAction(CursorType action, Event &event) { Scene600 *scene = (Scene600 *)R2_GLOBALS._sceneManager._scene; - if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(9) == 600)) { + if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 615; - scene->setAction(&scene->_sequenceManager1, scene, 615, &R2_GLOBALS._player, &scene->_actor8, NULL); - } else if ((action == R2_SONIC_STUNNER) && (R2_INVENTORY.getObjectScene(9) == 600) && (R2_GLOBALS._scannerFrequencies[1] == 2) && (!R2_GLOBALS.getFlag(8))){ + scene->setAction(&scene->_sequenceManager1, scene, 615, &R2_GLOBALS._player, &scene->_scanner, NULL); + } else if ((action == R2_SONIC_STUNNER) && (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600) && (R2_GLOBALS._scannerFrequencies[1] == 2) && (!R2_GLOBALS.getFlag(8))){ R2_GLOBALS._player.disableControl(); scene->_sceneMode = 608; - scene->setAction(&scene->_sequenceManager1, scene, 608, &R2_GLOBALS._player, &scene->_actor4, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 608, &R2_GLOBALS._player, &scene->_smoke, NULL); } else { return SceneActor::startAction(action, event); } @@ -5599,7 +5760,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._walkRegions.enableRegion(3); _field412 = 0; - // Initialise pixel map for the obscuring effect + // Initialize pixel map for the obscuring effect ScenePalette &pal = R2_GLOBALS._scenePalette; uint r, g, b; for (int i = 0; i < 256; ++i) { @@ -5618,11 +5779,11 @@ void Scene600::postInit(SceneObjectList *OwnerList) { _laser.postInit(); _laser.setPosition(Common::Point(246, 41)); - if (R2_INVENTORY.getObjectScene(9) == 600) { - _actor8.postInit(); - _actor8.setup(602, 5, 1); - _actor8.setPosition(Common::Point(246, 41)); - _actor8.setDetails(600, 20, -1, -1, 1, (SceneItem *) NULL); + if (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600) { + _scanner.postInit(); + _scanner.setup(602, 5, 1); + _scanner.setPosition(Common::Point(246, 41)); + _scanner.setDetails(600, 20, -1, -1, 1, (SceneItem *) NULL); switch (R2_GLOBALS._scannerFrequencies[1] - 2) { case 0: R2_GLOBALS._sound4.play(45); @@ -5658,7 +5819,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { _object1.setup2(603, 1, 1, 244, 50, 10, 0); if (R2_GLOBALS.getFlag(5)) { - if (R2_INVENTORY.getObjectScene(12) == 600) { + if (R2_INVENTORY.getObjectScene(R2_AEROSOL) == 600) { _aerosol.postInit(); _aerosol.setup(602, 2, 2); _aerosol.setPosition(Common::Point(189, 95)); @@ -5667,23 +5828,25 @@ void Scene600::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS.getFlag(8)) { if (R2_GLOBALS.getFlag(9)) { - _actor2.postInit(); - _actor2.setup(603, 2, 1); - _actor2.setPosition(Common::Point(233, 45)); - _actor2.animate(ANIM_MODE_2, NULL);_actor2.fixPriority(11); + // Computer is active + _computer.postInit(); + _computer.setup(603, 2, 1); + _computer.setPosition(Common::Point(233, 45)); + _computer.animate(ANIM_MODE_2, NULL); + _computer.fixPriority(11); } } else { - _actor4.postInit(); - _actor4.setup(601, 1, 1); - _actor4.setPosition(Common::Point(180, 110)); - _actor4._moveDiff = Common::Point(1, 1); - _actor4._moveRate = 2; - _actor4._numFrames = 3; - _actor4.animate(ANIM_MODE_2, NULL); - _actor4.fixPriority(130); - _actor4._effect = 3; - _actor4.setDetails(600, 24, 25, 26, 1, (SceneItem *) NULL); - _actor4.signal(); + _smoke.postInit(); + _smoke.setup(601, 1, 1); + _smoke.setPosition(Common::Point(180, 110)); + _smoke._moveDiff = Common::Point(1, 1); + _smoke._moveRate = 2; + _smoke._numFrames = 3; + _smoke.animate(ANIM_MODE_2, NULL); + _smoke.fixPriority(130); + _smoke._effect = 3; + _smoke.setDetails(600, 24, 25, 26, 1, (SceneItem *) NULL); + _smoke.signal(); } } @@ -5727,7 +5890,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { } void Scene600::remove() { - if (R2_INVENTORY.getObjectScene(9) == 600) + if (R2_INVENTORY.getObjectScene(R2_COM_SCANNER) == 600) R2_GLOBALS._sound4.fadeOut2(NULL); SceneExt::remove(); } @@ -5742,6 +5905,7 @@ void Scene600::signal() { R2_GLOBALS._sceneManager.changeScene(700); break; case 605: + // After cloud is active R2_GLOBALS._player.enableControl(); R2_GLOBALS._walkRegions.enableRegion(6); R2_GLOBALS._walkRegions.enableRegion(7); @@ -5751,42 +5915,48 @@ void Scene600::signal() { R2_INVENTORY.setObjectScene(R2_AEROSOL, 600); R2_GLOBALS.setFlag(5); - _actor4._effect = 3; - _actor4.signal(); + _smoke._effect = 3; + _smoke.signal(); break; case 606: - R2_INVENTORY.setObjectScene(15, 600); + // After Clamp is put on laser + R2_INVENTORY.setObjectScene(R2_CLAMP, 600); R2_GLOBALS._player.enableControl(); break; case 607: - R2_INVENTORY.setObjectScene(9, 600); + // After scanner is put on laser + R2_INVENTORY.setObjectScene(R2_COM_SCANNER, 600); R2_GLOBALS._player.enableControl(); break; case 608: + // deactivate cloud R2_GLOBALS.setFlag(8); - _actor4.remove(); + _smoke.remove(); R2_GLOBALS._walkRegions.disableRegion(6); R2_GLOBALS._walkRegions.disableRegion(9); R2_GLOBALS._walkRegions.disableRegion(10); R2_GLOBALS._player.enableControl(); break; case 612: + // Deactivate stasis field R2_GLOBALS.setFlag(9); - _actor3.remove(); + _stasisField.remove(); R2_GLOBALS._sceneItems.remove(&_item4); - _actor2.setDetails(600, 21, -1, 23, 4, &_item4); + _computer.setDetails(600, 21, -1, 23, 4, &_item4); _background.setDetails(600, 7, -1, -1, 3, (SceneItem *) NULL); R2_GLOBALS._player.enableControl(CURSOR_USE); break; case 614: + // Pick up Aerosol R2_GLOBALS._player.enableControl(); _aerosol.remove(); - R2_INVENTORY.setObjectScene(12, 1); + R2_INVENTORY.setObjectScene(R2_AEROSOL, 1); R2_GLOBALS._walkRegions.disableRegion(7); break; case 615: - _actor8.remove(); - R2_INVENTORY.setObjectScene(9, 1); + // Pick up Com Scanner + _scanner.remove(); + R2_INVENTORY.setObjectScene(R2_COM_SCANNER, 1); R2_GLOBALS._player.enableControl(); break; default: @@ -5842,7 +6012,7 @@ void Scene600::dispatch() { _aSound1.play(40); Scene::dispatch(); - if ((_actor4._strip == 3) && (_actor4._frame == 3)) { + if ((_smoke._strip == 3) && (_smoke._frame == 3)) { _actor1.setStrip(4); _actor1.setFrame(1); } @@ -5868,26 +6038,26 @@ bool Scene700::Item11::startAction(CursorType action, Event &event) { return NamedHotspot::startAction(action, event); } -bool Scene700::Item12::startAction(CursorType action, Event &event) { +bool Scene700::HandGrip::startAction(CursorType action, Event &event) { Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; switch (action) { case R2_CABLE_HARNESS: R2_GLOBALS._player.disableControl(); - scene->_actor5.postInit(); - scene->_actor5.setup(701, 3, 2); - scene->_actor5.setPosition(Common::Point(243, 98)); - scene->_actor5.setDetails(700, 37, -1, -1, 2, (SceneItem *) NULL); - scene->_actor5.hide(); + scene->_cable.postInit(); + scene->_cable.setup(701, 3, 2); + scene->_cable.setPosition(Common::Point(243, 98)); + scene->_cable.setDetails(700, 37, -1, -1, 2, (SceneItem *) NULL); + scene->_cable.hide(); scene->_sceneMode = 20; break; case R2_ATTRACTOR_CABLE_HARNESS: R2_GLOBALS._player.disableControl(); - scene->_actor5.postInit(); - scene->_actor5.setup(701, 2, 8); - scene->_actor5.setPosition(Common::Point(243, 98)); - scene->_actor5.setDetails(700, 38, -1, -1, 2, (SceneItem *) NULL); - scene->_actor5.hide(); + scene->_cable.postInit(); + scene->_cable.setup(701, 2, 8); + scene->_cable.setPosition(Common::Point(243, 98)); + scene->_cable.setDetails(700, 38, -1, -1, 2, (SceneItem *) NULL); + scene->_cable.hide(); scene->_sceneMode = 21; break; default: @@ -5895,7 +6065,7 @@ bool Scene700::Item12::startAction(CursorType action, Event &event) { break; } - scene->setAction(&scene->_sequenceManager, scene, 707, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager, scene, 707, &R2_GLOBALS._player, &scene->_cable, NULL); return true; } @@ -5947,7 +6117,7 @@ bool Scene700::Actor4::startAction(CursorType action, Event &event) { return true; } -bool Scene700::Actor5::startAction(CursorType action, Event &event) { +bool Scene700::Cable::startAction(CursorType action, Event &event) { Scene700 *scene = (Scene700 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -5981,9 +6151,9 @@ bool Scene700::Actor5::startAction(CursorType action, Event &event) { break; case R2_ATTRACTOR_UNIT: R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) { + if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 700) { scene->_sceneMode = 706; - scene->setAction(&scene->_sequenceManager, scene, 706, &R2_GLOBALS._player, &scene->_actor5, NULL); + scene->setAction(&scene->_sequenceManager, scene, 706, &R2_GLOBALS._player, &scene->_cable, NULL); } else { scene->_sceneMode = 15; Common::Point pt(_position.x - 12, _position.y + 1); @@ -6065,20 +6235,20 @@ void Scene700::postInit(SceneObjectList *OwnerList) { _actor9.setDetails(700, 33, -1, 35, 1, (SceneItem *) NULL); if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 1) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 1)) { - _actor5.postInit(); - _actor5.fixPriority(10); + _cable.postInit(); + _cable.fixPriority(10); switch (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS)) { case 0: switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: - _actor5.setup(701, 3, 2); - _actor5.setPosition(Common::Point(243, 98)); - _actor5.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); + _cable.setup(701, 3, 2); + _cable.setPosition(Common::Point(243, 98)); + _cable.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); break; case 700: - _actor5.setup(701, 3, 1); - _actor5.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); - _actor5.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); + _cable.setup(701, 3, 1); + _cable.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + _cable.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); break; default: break; @@ -6088,22 +6258,22 @@ void Scene700::postInit(SceneObjectList *OwnerList) { switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) - _actor5.setup(701, 2, 1); + _cable.setup(701, 2, 1); else - _actor5.setup(701, 2, 8); - _actor5.setPosition(Common::Point(243, 98)); - _actor5.fixPriority(77); - _actor5.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); + _cable.setup(701, 2, 8); + _cable.setPosition(Common::Point(243, 98)); + _cable.fixPriority(77); + _cable.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); break; case 700: - _actor5.setup(701, 1, 8); + _cable.setup(701, 1, 8); if (R2_GLOBALS._v565E7 == 0) { - _actor5.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + _cable.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); } else { - _actor5.setup(701, 1, 1); - _actor5.setPosition(Common::Point(_actor1._position.x + 1, _actor1._position.y + 120)); + _cable.setup(701, 1, 1); + _cable.setPosition(Common::Point(_actor1._position.x + 1, _actor1._position.y + 120)); } - _actor5.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); + _cable.setDetails(700, 38, -1, -1, 1, (SceneItem *) NULL); break; default: break; @@ -6118,7 +6288,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) { _actor4.setPosition(Common::Point(454, 117)); _actor4.setDetails(700, 27, -1, -1, 1, (SceneItem *) NULL); - _item12.setDetails(Rect(234, 90, 252, 110), 700, 39, -1, -1, 1, NULL); + _handGrip.setDetails(Rect(234, 90, 252, 110), 700, 39, -1, -1, 1, NULL); _item6.setDetails(Rect(91, 158, 385, 167), 700, 6, -1, 8, 1, NULL); _item2.setDetails(Rect(47, 115, 149, 124), 700, 40, -1, 41, 1, NULL); _item3.setDetails(Rect(151, 108, 187, 124), 700, 40, -1, 41, 1, NULL); @@ -6223,7 +6393,7 @@ void Scene700::signal() { break; case 11: _sceneMode = 12; - _actor5.remove(); + _cable.remove(); R2_GLOBALS._player.animate(ANIM_MODE_6, this); break; case 12: @@ -6248,13 +6418,13 @@ void Scene700::signal() { break; case 16: _sceneMode = 17; - _actor5.setup(701, 1, 8); - _actor5.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); - if ((R2_GLOBALS._v565E5 != 0) && (_actor5._position.x == _actor1._position.x + 1) && (_actor5._position.x == 148 - (((R2_GLOBALS._electromagnetChangeAmount + 10) / 5) * 4))) { - _actor5.animate(ANIM_MODE_6, NULL); - Common::Point pt(_actor5._position.x, _actor1._position.y + 120); + _cable.setup(701, 1, 8); + _cable.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); + if ((R2_GLOBALS._v565E5 != 0) && (_cable._position.x == _actor1._position.x + 1) && (_cable._position.x == 148 - (((R2_GLOBALS._electromagnetChangeAmount + 10) / 5) * 4))) { + _cable.animate(ANIM_MODE_6, NULL); + Common::Point pt(_cable._position.x, _actor1._position.y + 120); NpcMover *mover = new NpcMover(); - _actor5.addMover(mover, &pt, NULL); + _cable.addMover(mover, &pt, NULL); R2_GLOBALS._v565E7 = 1; } R2_GLOBALS._player.animate(ANIM_MODE_6, this); @@ -6274,9 +6444,9 @@ void Scene700::signal() { R2_GLOBALS._player.enableControl(); break; case 21: - _actor5.fixPriority(77); + _cable.fixPriority(77); if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) - _actor5.animate(ANIM_MODE_6, NULL); + _cable.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.enableControl(); @@ -6291,10 +6461,10 @@ void Scene700::signal() { R2_GLOBALS._sceneManager.changeScene(900); break; case 706: - _actor5.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); - _actor5.fixPriority(77); + _cable.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); + _cable.fixPriority(77); if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) - _actor5.animate(ANIM_MODE_6, NULL); + _cable.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); R2_GLOBALS._player.enableControl(); diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h index bc30743aca..df0b4d8fc6 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.h +++ b/engines/tsage/ringworld2/ringworld2_scenes0.h @@ -102,7 +102,7 @@ public: class Scene125: public SceneExt { /* Objects */ - class Object5: public SceneActor { + class Food: public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -136,7 +136,7 @@ public: ASoundExt _sound1; NamedHotspot _background, _item2, _item3; DiskSlot _diskSlot; - SceneActor _object1, _object2, _object3, _object4, _object5, _object6, _infoDisk; + SceneActor _object1, _object2, _object3, _object4, _food, _foodDispenser, _infoDisk; Icon _icon1, _icon2, _icon3, _icon4, _icon5, _icon6; SequenceManager _sequenceManager; SceneText _sceneText; @@ -310,7 +310,7 @@ public: class Scene250: public SceneExt { class Button: public SceneActor { public: - int _floorNumber, _v2; + int _floorNumber; Button(); void setFloor(int floorNumber); @@ -318,7 +318,8 @@ class Scene250: public SceneExt { virtual bool startAction(CursorType action, Event &event); }; public: - int _field412, _field414, _field416, _field418, _field41A; + int _currButtonY, _destButtonY, _elevatorSpeed; + bool _skippingFl, _skippableFl; NamedHotspot _background, _item2, _item3, _item4; Button _button1, _currentFloor; Button _floor1, _floor2, _floor3, _floor4, _floor5; @@ -524,6 +525,31 @@ public: }; class Scene500: public SceneExt { + /* Dialogs */ + class PanelDialog: public SceneAreaObject { + class Button: public SceneActor { + private: + int _buttonId; + bool _buttonDown; + + void doButtonPress(); + public: + Button(); + virtual Common::String getClassName() { return "Scene500_Button"; } + virtual void process(Event &event); + virtual bool startAction(CursorType action, Event &event); + virtual void synchronize(Serializer &s); + + void setupButton(int buttonId); + }; + public: + Button _button1, _button2, _button3; + + virtual Common::String getClassName() { return "Scene500_PanelWindow"; } + virtual void remove(); + void setDetails(int visage, int strip, int frameNumber, const Common::Point &pt); + }; + /* Items */ class ControlPanel: public SceneHotspot { public: @@ -531,11 +557,11 @@ class Scene500: public SceneExt { }; /* Objects */ - class Object2: public SceneActor { + class Seeker: public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Object3: public SceneActor { + class Suit: public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -570,20 +596,16 @@ class Scene500: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Object: public SceneActor { - public: - virtual bool startAction(CursorType action, Event &event); - }; public: int _stripNumber; byte _buffer[2710]; - SpeakerSeeker _seekerSpeaker; - SpeakerQuinn _quinnSpeaker; + SpeakerSeeker500 _seekerSpeaker; + SpeakerQuinn500 _quinnSpeaker; SceneHotspot _background, _item2; ControlPanel _controlPanel; SceneActor _object1; - Object2 _object2; - Object3 _object3; + Seeker _seeker; + Suit _suit; Doorway _doorway; OxygenTanks _tanks1, _tanks2; AirLock _airLock; @@ -592,8 +614,7 @@ public: SonicStunner _sonicStunner; Locker1 _locker1; Locker2 _locker2; - SceneAreaObject _area1; - Object _obj1, _obj2, _obj3; + PanelDialog _panelDialog; ASoundExt _sound1; SequenceManager _sequenceManager1, _sequenceManager2; public: @@ -622,7 +643,7 @@ class Scene600 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor4 : public SceneActor { + class Smoke : public SceneActor { public: virtual void signal(); virtual bool startAction(CursorType action, Event &event); @@ -640,7 +661,7 @@ class Scene600 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor8 : public SceneActor { + class Scanner : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -653,13 +674,13 @@ public: CompartmentHotspot _item5; BackgroundSceneObject _object1; SceneActor _actor1; - SceneActor _actor2; - SceneActor _actor3; - Actor4 _actor4; + SceneActor _computer; + SceneActor _stasisField; + Smoke _smoke; Doorway _doorway; Laser _laser; Aerosol _aerosol; - Actor8 _actor8; + Scanner _scanner; ASoundExt _aSound1; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; @@ -679,7 +700,7 @@ class Scene700: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Item12 : public NamedHotspot { + class HandGrip : public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; @@ -696,7 +717,7 @@ class Scene700: public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor5 : public SceneActor { + class Cable : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -716,12 +737,12 @@ public: NamedHotspot _item9; NamedHotspot _item10; Item11 _item11; - Item12 _item12; + HandGrip _handGrip; SceneActor _actor1; Actor2 _actor2; Actor3 _actor3; Actor4 _actor4; - Actor5 _actor5; + Cable _cable; Actor6 _actor6; Actor6 _actor7; Actor6 _actor8; diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 6ea53d0852..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; diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index 23ebb2c276..82895c7ab0 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -46,8 +46,8 @@ public: SpeakerGameText _gameTextSpeaker; AnimationPlayer _animationPlayer; - int _field412; - int _fieldD2E; + int _animCounter; + bool _forceCheckAnimationFl; public: Scene1000(); @@ -75,21 +75,21 @@ public: }; class Scene1100 : public SceneExt { - class Actor16 : public SceneActor { + class Seeker : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor17 : public SceneActor { + class Trooper : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor18 : public SceneActor { + class Chief : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; public: - int _field412, _field414; + int _nextStripNum, _paletteRefreshStatus; SpeakerSeeker1100 _seekerSpeaker; SpeakerQuinn1100 _quinnSpeaker; SpeakerChief1100 _chiefSpeaker; @@ -103,24 +103,24 @@ public: NamedHotspot _item7; SceneActor _actor1; SceneActor _actor2; - SceneActor _actor3; - SceneActor _actor4; - SceneActor _actor5; - SceneActor _actor6; - SceneActor _actor7; - SceneActor _actor8; - SceneActor _actor9; - SceneActor _actor10; - SceneActor _actor11; - SceneActor _actor12; - SceneActor _actor13; - SceneActor _actor14; - SceneActor _actor15; - BackgroundSceneObject _object1; + SceneActor _shipFormation; + SceneActor _shipFormationShadow; + SceneActor _shotImpact1; + SceneActor _shotImpact2; + SceneActor _shotImpact3; + SceneActor _shotImpact4; + SceneActor _shotImpact5; + SceneActor _laserShot; + SceneActor _animation; + SceneActor _leftImpacts; + SceneActor _runningGuy1; + SceneActor _runningGuy2; + SceneActor _runningGuy3; + BackgroundSceneObject _rightLandslide; BackgroundSceneObject _object2; - Actor16 _actor16; - Actor17 _actor17; - Actor18 _actor18; + Seeker _seeker; + Trooper _trooper; + Chief _chief; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; SequenceManager _sequenceManager3; @@ -427,26 +427,26 @@ class Scene1550 : public SceneExt { void subA4D14(int frameNumber, int strip); }; - class UnkObj15501 : public SceneActor { + class Junk : public SceneActor { public: int _fieldA4; - int _fieldA6; + int _junkNumber; - UnkObj15501(); + Junk(); void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); }; - class UnkObj15502 : public SceneActor { + class ShipComponent : public SceneActor { public: - int _fieldA4; + int _componentId; - UnkObj15502(); + ShipComponent(); void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); - void subA5CDF(int strip); + void setupShipComponent(int componentId); }; class UnkObj15503 : public SceneActor { @@ -472,7 +472,7 @@ class Scene1550 : public SceneExt { virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; - class Hotspot1 : public NamedHotspot { + class WorkingShip : public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; @@ -482,12 +482,12 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor6 : public SceneActor { + class Wreckage : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor7 : public SceneActor { + class Companion : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -522,7 +522,7 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor14 : public SceneActor1550 { + class Wall : public SceneActor1550 { // Nothing specific found in the original // TODO: check if it's an useless class }; @@ -530,30 +530,30 @@ class Scene1550 : public SceneExt { public: SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - Hotspot1 _item1; - Hotspot1 _item2; + WorkingShip _shipHull; + WorkingShip _item2; Hotspot3 _item3; - SceneActor _actor1; + SceneActor _landingStrut; SceneActor _actor2; SceneActor _actor3; SceneActor _actor4; SceneActor _actor5; - Actor6 _actor6; - Actor7 _actor7; + Wreckage _wreckage; + Companion _companion; Actor8 _actor8; Actor9 _actor9; Actor10 _actor10; Actor11 _actor11; Actor12 _actor12; Actor13 _actor13; - UnkObj15501 _arrUnkObj15501[8]; - Actor14 _actor14; - Actor14 _actor15; - Actor14 _actor16; - Actor14 _actor17; - Actor14 _actor18; - Actor14 _actor19; - UnkObj15502 _arrUnkObj15502[8]; + Junk _junk[8]; + Wall _actor14; + Wall _northWall; // Is also reused for landing strip + Wall _actor16; + Wall _westWall; // Is also reused for left hand space + Wall _eastWall; + Wall _southWall; + ShipComponent _shipComponents[8]; UnkArea1550 _unkArea1; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; @@ -566,7 +566,7 @@ public: Scene1550(); void synchronize(Serializer &s); - void subA2B2F(); + void enterArea(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void signal(); @@ -687,7 +687,7 @@ public: }; class Scene1625 : public SceneExt { - class Actor7 : public SceneActor { + class Wire : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -698,12 +698,12 @@ public: SpeakerSoldier1625 _soldierSpeaker; NamedHotspot _item1; SceneActor _actor1; - SceneActor _actor2; + SceneActor _tealHead; SceneActor _actor3; - SceneActor _actor4; + SceneActor _glass; SceneActor _actor5; SceneActor _actor6; - Actor7 _actor7; + Wire _wire; SequenceManager _sequenceManager; Scene1625(); @@ -721,7 +721,7 @@ class Scene1700 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor11 : public SceneActor { + class RimTransport : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -730,15 +730,15 @@ class Scene1700 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class NorthExit : public SceneExit { public: virtual void changeScene(); }; - class Exit2 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; - class Exit3 : public SceneExit { + class WestExit : public SceneExit { public: virtual void changeScene(); }; @@ -749,19 +749,19 @@ public: Item2 _item2; SceneActor _actor1; SceneActor _actor2; - SceneActor _actor3; - SceneActor _actor4; - SceneActor _actor5; - SceneActor _actor6; - SceneActor _actor7; - SceneActor _actor8; - SceneActor _actor9; + SceneActor _slabWest; + SceneActor _slabEast; + SceneActor _slabShadowWest; + SceneActor _slabShadowEast; + SceneActor _westPlatform; + SceneActor _rimTransportDoor; + SceneActor _ledgeHopper; SceneActor _actor10; - Actor11 _actor11; + RimTransport _rimTransport; Actor12 _actor12; - Exit1 _exit1; - Exit2 _exit2; - Exit3 _exit3; + NorthExit _northExit; + SouthExit _southExit; + WestExit _westExit; SequenceManager _sequenceManager; int _field77A; @@ -769,7 +769,7 @@ public: Scene1700(); void synchronize(Serializer &s); - void subAF3F8(); + void enterArea(); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); @@ -777,54 +777,54 @@ public: }; class Scene1750 : public SceneExt { - class Actor4 : public SceneActor { + class SpeedSlider : public SceneActor { public: - int _fieldA4; - int _fieldA6; - int _fieldA8; - int _fieldAA; - int _fieldAC; - int _fieldAE; + int _incrAmount; + int _xp; + int _ys; + int _height; + int _thumbHeight; + bool _mouseDown; - Actor4(); + SpeedSlider(); virtual void synchronize(Serializer &s); - void subB1A76(int arg1, int arg2, int arg3, int arg4, int arg5); - void subB1B27(); + void setupSlider(int incrAmount, int xp, int ys, int height, int thumbHeight); + void calculateSlider(); virtual void remove(); virtual void process(Event &event); virtual bool startAction(CursorType action, Event &event); }; - class Actor5 : public SceneActor { + class Button : public SceneActor { public: - int _fieldA4; + int _buttonId; - Actor5(); + Button(); virtual void synchronize(Serializer &s); virtual bool startAction(CursorType action, Event &event); }; public: - NamedHotspot _item1; - NamedHotspot _item2; - NamedHotspot _item3; - NamedHotspot _item4; - NamedHotspot _item5; + NamedHotspot _background; + NamedHotspot _redLights; + NamedHotspot _greenLights; + NamedHotspot _frontView; + NamedHotspot _rearView; SceneActor _actor1; SceneActor _actor2; SceneActor _actor3; - Actor4 _actor4; - Actor5 _actor5; - Actor5 _actor6; - Actor5 _actor7; + SpeedSlider _speedSlider; + Button _forwardButton; + Button _backwardButton; + Button _exitButton; SequenceManager _sequenceManager; PaletteRotation *_rotation; - int _field412; + int _direction; int _field413; - int _field415; + int _speed; int _field417; int _field419; int _field41B; @@ -841,20 +841,20 @@ public: }; class Scene1800 : public SceneExt { - class Hotspot5 : public NamedHotspot { + class Background : public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor6 : public SceneActor { + class Lever : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor7 : public SceneActor { + class Doors : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor8 : public SceneActor { + class PassengerDoor : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -864,23 +864,23 @@ class Scene1800 : public SceneExt { virtual void changeScene(); }; public: - int _field412; + int _locationMode; SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; NamedHotspot _item1; NamedHotspot _item2; NamedHotspot _item3; NamedHotspot _item4; - Hotspot5 _item5; + Background _background; SceneActor _actor1; - SceneActor _actor2; + SceneActor _companion; SceneActor _actor3; - SceneActor _actor4; - SceneActor _actor5; - Actor6 _actor6; - Actor7 _actor7; - Actor8 _actor8; - Actor8 _actor9; + SceneActor _leftStaircase; + SceneActor _rightStaircase; + Lever _lever; + Doors _doors; + PassengerDoor _leftDoor; + PassengerDoor _rightDoor; Exit1 _exit1; SequenceManager _sequenceManager; @@ -893,12 +893,12 @@ public: }; class Scene1850 : public SceneExt { - class Hotspot2 : public NamedHotspot { + class Button : public NamedHotspot { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor5 : public SceneActor { + class Robot : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -906,7 +906,7 @@ class Scene1850 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor8 : public SceneActor { + class DisplayScreen : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -921,16 +921,16 @@ public: ScenePalette _palette1; SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - NamedHotspot _item1; - Hotspot2 _item2; - SceneActor _actor1; + NamedHotspot _background; + Button _button; + SceneActor _companion; SceneActor _actor2; SceneActor _actor3; SceneActor _actor4; - Actor5 _actor5; - Actor6 _actor6; - Actor6 _actor7; - Actor8 _actor8; + Robot _robot; + Actor6 _leftDoor; + Actor6 _rightDoor; + DisplayScreen _displayScreen; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; @@ -945,15 +945,16 @@ public: }; class Scene1875 : public SceneExt { - class Actor1875 : public SceneActor { + class Button : public SceneActor { public: - int _fieldA4; - int _fieldA6; + int _buttonId; + bool _buttonDown; - Actor1875(); - void subB84AB(); - void subB8271(int indx); + Button(); + void doButtonPress(); + void initButton(int buttonId); + virtual Common::String getClassName() { return "Scene1875_Button"; } void synchronize(Serializer &s); virtual void process(Event &event); }; @@ -965,11 +966,11 @@ public: SceneActor _actor1; SceneActor _actor2; SceneActor _actor3; - Actor1875 _actor4; - Actor1875 _actor5; - Actor1875 _actor6; - Actor1875 _actor7; - Actor1875 _actor8; + Button _button1; + Button _button2; + Button _button3; + Button _button4; + Button _button5; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -978,30 +979,29 @@ public: }; class Scene1900 : public SceneExt { - class Actor2 : public SceneActor { + class LiftDoor : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class WestExit : public SceneExit { public: virtual void changeScene(); }; - class Exit2 : public SceneExit { + class EastExit : public SceneExit { public: virtual void changeScene(); }; public: SpeakerSeeker1900 _seekerSpeaker; - NamedHotspot _item1; - NamedHotspot _item2; + NamedHotspot _background; + NamedHotspot _elevator; SceneActor _actor1; BackgroundSceneObject _object1; BackgroundSceneObject _object2; - Actor2 _actor2; - Actor2 _actor3; - Exit1 _exit1; - Exit2 _exit2; + LiftDoor _leftDoor, _rightDoor; + WestExit _westExit; + EastExit _eastExit; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 9246c4b6a4..443f68bc1f 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -30,17 +30,19 @@ namespace TsAGE { namespace Ringworld2 { /*-------------------------------------------------------------------------- - * Scene 2000 - Ice Maze + * Scene 2000 - Spill Mountains * *--------------------------------------------------------------------------*/ + void Scene2000::initPlayer() { + R2_GLOBALS._events.setCursor(CURSOR_WALK); R2_GLOBALS._player.disableControl(); switch (_mazePlayerMode) { case 0: R2_GLOBALS._player.setStrip(5); - if (_exit1._enabled) { - if (_exit2._enabled) + if (_westExit._enabled) { + if (_eastExit._enabled) R2_GLOBALS._player.setPosition(Common::Point(140, 129)); else R2_GLOBALS._player.setPosition(Common::Point(20, 129)); @@ -129,11 +131,11 @@ void Scene2000::initPlayer() { break; } for (int i = 0; i < 11; i++) { - if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == R2_GLOBALS._v56605[3 + i]) + if (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] == R2_GLOBALS._spillLocation[3 + i]) _objList1[i].show(); } - if ((R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) && (R2_GLOBALS._v56605[1] == R2_GLOBALS._v56605[2])) { + if ((R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) && (R2_GLOBALS._spillLocation[R2_QUINN] == R2_GLOBALS._spillLocation[R2_SEEKER])) { _object1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _object1.setup(20, 5, 1); @@ -142,8 +144,8 @@ void Scene2000::initPlayer() { _object1.setup(2008, 5, 1); _object1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } - if (_exit1._enabled) { - if (_exit2._enabled) + if (_westExit._enabled) { + if (_eastExit._enabled) _object1.setPosition(Common::Point(180, 128)); else _object1.setPosition(Common::Point(75, 128)); @@ -153,53 +155,53 @@ void Scene2000::initPlayer() { } void Scene2000::initExits() { - _exit1._enabled = true; - _exit2._enabled = true; - _exit3._enabled = false; - _exit4._enabled = false; - _exit5._enabled = false; - - _exit1._insideArea = false; - _exit2._insideArea = false; - _exit3._insideArea = false; - _exit4._insideArea = false; - _exit5._insideArea = false; - - _exit1._moving = false; - _exit2._moving = false; - _exit3._moving = false; - _exit4._moving = false; - _exit5._moving = false; + _westExit._enabled = true; + _eastExit._enabled = true; + _southExit._enabled = false; + _northExit._enabled = false; + _doorExit._enabled = false; + + _westExit._insideArea = false; + _eastExit._insideArea = false; + _southExit._insideArea = false; + _northExit._insideArea = false; + _doorExit._insideArea = false; + + _westExit._moving = false; + _eastExit._moving = false; + _southExit._moving = false; + _northExit._moving = false; + _doorExit._moving = false; for (int i = 0; i < 11; i++) _objList1[i].hide(); _object1.remove(); - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) { case 3: case 10: case 16: case 21: - _exit5._enabled = true; - _exit5._bounds.set(61, 68, 90, 125); - _exit5.setDest(Common::Point(92, 129)); - _exit5._cursorNum = EXITCURSOR_W; + _doorExit._enabled = true; + _doorExit._bounds.set(61, 68, 90, 125); + _doorExit.setDest(Common::Point(92, 129)); + _doorExit._cursorNum = EXITCURSOR_W; break; case 4: case 12: case 25: case 34: - _exit5._enabled = true; - _exit5._bounds.set(230, 68, 259, 125); - _exit5.setDest(Common::Point(244, 129)); - _exit5._cursorNum = EXITCURSOR_E; + _doorExit._enabled = true; + _doorExit._bounds.set(230, 68, 259, 125); + _doorExit.setDest(Common::Point(244, 129)); + _doorExit._cursorNum = EXITCURSOR_E; break; default: break; } - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] - 1) { + switch (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] - 1) { case 0: case 6: case 13: @@ -207,7 +209,7 @@ void Scene2000::initExits() { case 22: case 27: case 30: - _exit1._enabled = false; + _westExit._enabled = false; loadScene(2225); R2_GLOBALS._walkRegions.load(2225); if (!_exitingFlag) @@ -216,10 +218,10 @@ void Scene2000::initExits() { break; case 1: case 19: - _exit3._enabled = true; - _exit3._bounds.set(71, 130, 154, 168); - _exit3.setDest(Common::Point(94, 129)); - _exit3._cursorNum = EXITCURSOR_SE; + _southExit._enabled = true; + _southExit._bounds.set(71, 130, 154, 168); + _southExit.setDest(Common::Point(94, 129)); + _southExit._cursorNum = EXITCURSOR_SE; loadScene(2300); if (!_exitingFlag) _mazePlayerMode = 0; @@ -283,8 +285,8 @@ void Scene2000::initExits() { case 21: case 26: loadScene(2200); - R2_GLOBALS._walkRegions.load(2000); - _exit2._enabled = false; + R2_GLOBALS._walkRegions.load(2200); + _eastExit._enabled = false; if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1900) _mazePlayerMode = 2; else if (!_exitingFlag) @@ -294,10 +296,10 @@ void Scene2000::initExits() { break; case 7: case 29: - _exit4._enabled = true; - _exit4._bounds.set(138, 83, 211, 125); - _exit4.setDest(Common::Point(129, 188)); - _exit4._cursorNum = EXITCURSOR_NW; + _northExit._enabled = true; + _northExit._bounds.set(138, 83, 211, 125); + _northExit.setDest(Common::Point(188, 129)); + _northExit._cursorNum = EXITCURSOR_NW; loadScene(2250); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2500) @@ -309,10 +311,10 @@ void Scene2000::initExits() { break; case 10: case 25: - _exit3._enabled = true; - _exit3._bounds.set(78, 130, 148, 168); - _exit3.setDest(Common::Point(100, 129)); - _exit3._cursorNum = EXITCURSOR_SE; + _southExit._enabled = true; + _southExit._bounds.set(78, 130, 148, 168); + _southExit.setDest(Common::Point(100, 129)); + _southExit._cursorNum = EXITCURSOR_SE; loadScene(2075); R2_GLOBALS._walkRegions.load(2000); if (!_exitingFlag) @@ -320,10 +322,10 @@ void Scene2000::initExits() { R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 14: - _exit3._enabled = true; - _exit3._bounds.set(160, 130, 248, 168); - _exit3.setDest(Common::Point(225, 129)); - _exit3._cursorNum = EXITCURSOR_SW; + _southExit._enabled = true; + _southExit._bounds.set(160, 130, 248, 168); + _southExit.setDest(Common::Point(225, 129)); + _southExit._cursorNum = EXITCURSOR_SW; loadScene(2325); R2_GLOBALS._walkRegions.load(2000); if (!_exitingFlag) @@ -332,10 +334,10 @@ void Scene2000::initExits() { break; case 16: case 31: - _exit4._enabled = true; - _exit4._bounds.set(122, 83, 207, 125); - _exit4.setDest(Common::Point(210, 129)); - _exit4._cursorNum = EXITCURSOR_NW; + _northExit._enabled = true; + _northExit._bounds.set(122, 83, 207, 125); + _northExit.setDest(Common::Point(210, 129)); + _northExit._cursorNum = EXITCURSOR_NW; loadScene(2125); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2400) @@ -346,10 +348,10 @@ void Scene2000::initExits() { R2_GLOBALS._sceneManager._previousScene = 2000; break; case 23: - _exit4._enabled = true; - _exit4._bounds.set(108, 83, 128, 184); - _exit4.setDest(Common::Point(135, 129)); - _exit4._cursorNum = CURSOR_INVALID; + _northExit._enabled = true; + _northExit._bounds.set(108, 83, 128, 184); + _northExit.setDest(Common::Point(135, 129)); + _northExit._cursorNum = CURSOR_INVALID; loadScene(2275); R2_GLOBALS._walkRegions.load(2000); if (!_exitingFlag) @@ -357,10 +359,10 @@ void Scene2000::initExits() { R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2000; break; case 28: - _exit3._enabled = true; - _exit3._bounds.set(171, 130, 241, 168); - _exit3.setDest(Common::Point(218, 129)); - _exit3._cursorNum = EXITCURSOR_SW; + _southExit._enabled = true; + _southExit._bounds.set(171, 130, 241, 168); + _southExit.setDest(Common::Point(218, 129)); + _southExit._cursorNum = EXITCURSOR_SW; loadScene(2050); R2_GLOBALS._walkRegions.load(2000); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2350) @@ -396,34 +398,34 @@ void Scene2000::Action1::signal() { } case 1: scene->_objList1[_state].setPosition(Common::Point(340, 127)); - --R2_GLOBALS._v56605[4 + _state]; + --R2_GLOBALS._spillLocation[4 + _state]; _actionIndex = 0; switch (_state - 1) { case 0: - if (R2_GLOBALS._v56605[4] == 1) + if (R2_GLOBALS._spillLocation[4] == 1) _actionIndex = 10; break; case 2: - if (R2_GLOBALS._v56605[6] == 7) + if (R2_GLOBALS._spillLocation[6] == 7) _actionIndex = 10; break; case 4: - if (R2_GLOBALS._v56605[8] == 14) + if (R2_GLOBALS._spillLocation[8] == 14) _actionIndex = 10; break; case 6: - if (R2_GLOBALS._v56605[10] == 19) + if (R2_GLOBALS._spillLocation[10] == 19) _actionIndex = 10; break; case 7: - if (R2_GLOBALS._v56605[11] == 23) + if (R2_GLOBALS._spillLocation[11] == 23) _actionIndex = 10; break; default: break; } - if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) + if (R2_GLOBALS._spillLocation[3 + _state] == R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) scene->_objList1[_state].show(); else scene->_objList1[_state].hide(); @@ -439,34 +441,34 @@ void Scene2000::Action1::signal() { } case 6: scene->_objList1[_state].setPosition(Common::Point(-20, 127)); - ++R2_GLOBALS._v56605[3 + _state]; + ++R2_GLOBALS._spillLocation[3 + _state]; _actionIndex = 5; switch (_state - 1) { case 0: - if (R2_GLOBALS._v56605[4] == 5) + if (R2_GLOBALS._spillLocation[4] == 5) _actionIndex = 15; break; case 2: - if (R2_GLOBALS._v56605[6] == 13) + if (R2_GLOBALS._spillLocation[6] == 13) _actionIndex = 15; break; case 4: - if (R2_GLOBALS._v56605[8] == 16) + if (R2_GLOBALS._spillLocation[8] == 16) _actionIndex = 15; break; case 6: - if (R2_GLOBALS._v56605[10] == 22) + if (R2_GLOBALS._spillLocation[10] == 22) _actionIndex = 15; break; case 7: - if (R2_GLOBALS._v56605[11] == 27) + if (R2_GLOBALS._spillLocation[11] == 27) _actionIndex = 15; break; default: break; } - if (R2_GLOBALS._v56605[3 + _state] == R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) + if (R2_GLOBALS._spillLocation[3 + _state] == R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) scene->_objList1[_state].show(); else scene->_objList1[_state].hide(); @@ -498,7 +500,7 @@ void Scene2000::Action1::signal() { signal(); break; case 15: - if ((R2_GLOBALS._v56605[3 + _state] == 13) || (R2_GLOBALS._v56605[3 + _state] == 22) || (R2_GLOBALS._v56605[3 + _state] == 27)) { + if ((R2_GLOBALS._spillLocation[3 + _state] == 13) || (R2_GLOBALS._spillLocation[3 + _state] == 22) || (R2_GLOBALS._spillLocation[3 + _state] == 27)) { Common::Point pt(30, 127); NpcMover *mover = new NpcMover(); scene->_objList1[_state].addMover(mover, &pt, this); @@ -534,26 +536,24 @@ void Scene2000::Action1::signal() { } } -void Scene2000::Exit1::changeScene() { +void Scene2000::WestExit::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; scene->_exitingFlag = true; - scene->_sceneMode = 0; + _enabled = false; R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 10; Common::Point pt(-10, 129); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, scene); - - scene->setAction(&scene->_sequenceManager, scene, 206, &R2_GLOBALS._player, NULL); } -void Scene2000::Exit2::changeScene() { +void Scene2000::EastExit::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; scene->_exitingFlag = true; - scene->_sceneMode = 0; + _enabled = false; R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 11; @@ -562,38 +562,38 @@ void Scene2000::Exit2::changeScene() { R2_GLOBALS._player.addMover(mover, &pt, scene); } -void Scene2000::Exit3::changeScene() { +void Scene2000::SouthExit::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; scene->_exitingFlag = true; - scene->_sceneMode = 0; + _enabled = false; R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 12; - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) { case 2: scene->_mazePlayerMode = 4; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 8; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 8; break; case 11: scene->_mazePlayerMode = 6; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 17; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 17; break; case 15: scene->_mazePlayerMode = 8; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 24; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 24; break; case 20: scene->_mazePlayerMode = 4; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 30; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 30; break; case 26: scene->_mazePlayerMode = 6; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 32; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 32; break; case 29: scene->_mazePlayerMode = 11; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 29; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 29; break; default: break; @@ -631,34 +631,34 @@ void Scene2000::Exit3::changeScene() { } } -void Scene2000::Exit4::changeScene() { +void Scene2000::NorthExit::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; scene->_exitingFlag = true; - scene->_sceneMode = 0; + _enabled = false; R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 13; - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) { case 8: scene->_mazePlayerMode = 5; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 2; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 2; break; case 17: scene->_mazePlayerMode = 7; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 11; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 11; break; case 24: scene->_mazePlayerMode = 9; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 15; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 15; break; case 30: scene->_mazePlayerMode = 5; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 20; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 20; break; case 32: scene->_mazePlayerMode = 7; - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 26; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 26; break; default: break; @@ -688,14 +688,14 @@ void Scene2000::Exit4::changeScene() { } } -void Scene2000::Exit5::changeScene() { +void Scene2000::DoorExit::changeScene() { Scene2000 *scene = (Scene2000 *)R2_GLOBALS._sceneManager._scene; - scene->_sceneMode = 0; + _enabled = false; R2_GLOBALS._player.disableControl(CURSOR_ARROW); scene->_sceneMode = 14; - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + switch (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) { case 3: scene->_mazePlayerMode = 1; if (R2_GLOBALS._player._characterIndex == 1) @@ -758,9 +758,9 @@ void Scene2000::Exit5::changeScene() { } Scene2000::Scene2000(): SceneExt() { - if (R2_GLOBALS._sceneManager._previousScene != -1) { - R2_GLOBALS._v56605[1] = 21; - R2_GLOBALS._v56605[2] = 21; + if (R2_GLOBALS._sceneManager._previousScene == -1) { + R2_GLOBALS._spillLocation[R2_QUINN] = 21; + R2_GLOBALS._spillLocation[R2_SEEKER] = 21; } if ((R2_GLOBALS._player._characterScene[R2_GLOBALS._player._characterIndex] != R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) @@ -769,19 +769,20 @@ Scene2000::Scene2000(): SceneExt() { } _exitingFlag = false; + _mazePlayerMode = 0; } void Scene2000::postInit(SceneObjectList *OwnerList) { - _exit1.setDetails(Rect(0, 100, 14, 140), EXITCURSOR_W, 2000); - _exit1.setDest(Common::Point(14, 129)); - _exit2.setDetails(Rect(305, 100, 320, 140), EXITCURSOR_E, 2000); - _exit2.setDest(Common::Point(315, 129)); - _exit3.setDetails(Rect(71, 130, 154, 168), EXITCURSOR_S, 2000); - _exit3.setDest(Common::Point(94, 129)); - _exit4.setDetails(Rect(138, 83, 211, 125), EXITCURSOR_N, 2000); - _exit4.setDest(Common::Point(188, 128)); - _exit5.setDetails(Rect(61, 68, 90, 125), EXITCURSOR_W, 2000); - _exit5.setDest(Common::Point(92, 129)); + _westExit.setDetails(Rect(0, 100, 14, 140), EXITCURSOR_W, 2000); + _westExit.setDest(Common::Point(14, 129)); + _eastExit.setDetails(Rect(305, 100, 320, 140), EXITCURSOR_E, 2000); + _eastExit.setDest(Common::Point(315, 129)); + _southExit.setDetails(Rect(71, 130, 154, 168), EXITCURSOR_S, 2000); + _southExit.setDest(Common::Point(94, 129)); + _northExit.setDetails(Rect(138, 83, 211, 125), EXITCURSOR_N, 2000); + _northExit.setDest(Common::Point(188, 129)); + _doorExit.setDetails(Rect(61, 68, 90, 125), EXITCURSOR_W, 2000); + _doorExit.setDest(Common::Point(92, 129)); R2_GLOBALS._sound1.play(200); initExits(); @@ -858,39 +859,39 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { _objList1[i].hide(); switch (i - 1) { case 0: - if (R2_GLOBALS._v56605[3 + i] == 1) - ++R2_GLOBALS._v56605[3 + i]; - else if (R2_GLOBALS._v56605[3 + i] == 5) - --R2_GLOBALS._v56605[3 + i]; + if (R2_GLOBALS._spillLocation[3 + i] == 1) + ++R2_GLOBALS._spillLocation[3 + i]; + else if (R2_GLOBALS._spillLocation[3 + i] == 5) + --R2_GLOBALS._spillLocation[3 + i]; break; case 2: - if (R2_GLOBALS._v56605[3 + i] == 7) - ++R2_GLOBALS._v56605[3 + i]; - else if (R2_GLOBALS._v56605[3 + i] == 13) - --R2_GLOBALS._v56605[3 + i]; + if (R2_GLOBALS._spillLocation[3 + i] == 7) + ++R2_GLOBALS._spillLocation[3 + i]; + else if (R2_GLOBALS._spillLocation[3 + i] == 13) + --R2_GLOBALS._spillLocation[3 + i]; break; case 4: - if (R2_GLOBALS._v56605[3 + i] == 14) - ++R2_GLOBALS._v56605[3 + i]; - else if (R2_GLOBALS._v56605[3 + i] == 16) - --R2_GLOBALS._v56605[3 + i]; + if (R2_GLOBALS._spillLocation[3 + i] == 14) + ++R2_GLOBALS._spillLocation[3 + i]; + else if (R2_GLOBALS._spillLocation[3 + i] == 16) + --R2_GLOBALS._spillLocation[3 + i]; break; case 6: - if (R2_GLOBALS._v56605[3 + i] == 19) - ++R2_GLOBALS._v56605[3 + i]; - else if (R2_GLOBALS._v56605[3 + i] == 22) - --R2_GLOBALS._v56605[3 + i]; + if (R2_GLOBALS._spillLocation[3 + i] == 19) + ++R2_GLOBALS._spillLocation[3 + i]; + else if (R2_GLOBALS._spillLocation[3 + i] == 22) + --R2_GLOBALS._spillLocation[3 + i]; break; case 8: - if (R2_GLOBALS._v56605[3 + i] == 23) - ++R2_GLOBALS._v56605[3 + i]; - else if (R2_GLOBALS._v56605[3 + i] == 27) - --R2_GLOBALS._v56605[3 + i]; + if (R2_GLOBALS._spillLocation[3 + i] == 23) + ++R2_GLOBALS._spillLocation[3 + i]; + else if (R2_GLOBALS._spillLocation[3 + i] == 27) + --R2_GLOBALS._spillLocation[3 + i]; break; default: break; } - switch (R2_GLOBALS._v56605[3 + i] - 1) { + switch (R2_GLOBALS._spillLocation[3 + i] - 1) { case 0: case 6: case 13: @@ -925,6 +926,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) { } void Scene2000::remove() { + R2_GLOBALS._events.setCursor(CURSOR_WALK); R2_GLOBALS._sound1.fadeOut(NULL); SceneExt::remove(); } @@ -932,17 +934,19 @@ void Scene2000::remove() { void Scene2000::signal() { switch (_sceneMode) { case 10: - if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 6) + // Leaving left-hand side of scene + if (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] == 6) g_globals->_sceneManager.changeScene(1900); else { _mazePlayerMode = 1; - --R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; + --R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]; initExits(); initPlayer(); } break; case 11: - switch (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]) { + // Leaving right-hand side of scene + switch (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]) { case 5: g_globals->_sceneManager.changeScene(1900); break; @@ -954,7 +958,7 @@ void Scene2000::signal() { break; default: _mazePlayerMode = 2; - ++R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex]; + ++R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex]; initExits(); initPlayer(); break; @@ -962,6 +966,7 @@ void Scene2000::signal() { break; case 12: case 13: + // Top/bottom scene exits initExits(); initPlayer(); break; @@ -1025,6 +1030,12 @@ void Scene2000::process(Event &event) { void Scene2000::synchronize(Serializer &s) { SceneExt::synchronize(s); + // Synchronise active walk regions + int regionsId = R2_GLOBALS._walkRegions._resNum; + s.syncAsUint16LE(regionsId); + if (s.isLoading()) + R2_GLOBALS._walkRegions.load(regionsId); + s.syncAsByte(_exitingFlag); s.syncAsSint16LE(_mazePlayerMode); } @@ -1084,7 +1095,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); if (R2_GLOBALS._sceneManager._previousScene == -1) - R2_GLOBALS._player._characterScene[2] = 2350; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 2350; _exitUp.setDetails(Rect(25, 83, 93, 125), EXITCURSOR_NW, 2350); _exitUp.setDest(Common::Point(80, 129)); @@ -1102,7 +1113,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(5, 3); } - if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { _actor2.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor2.setup(20, 5, 1); @@ -1116,7 +1127,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { _actor3.postInit(); _actor4.postInit(); - if (R2_INVENTORY.getObjectScene(20) == 2350) { + if (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 2350) { _actor3.hide(); _actor4.hide(); } else { @@ -1133,7 +1144,7 @@ void Scene2350::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { - if (R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] == 34) { + if (R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] == 34) { if (R2_GLOBALS._player._characterIndex == 1) _sceneMode = 2351; else @@ -1163,11 +1174,11 @@ void Scene2350::remove() { void Scene2350::signal() { switch (_sceneMode) { case 11: - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 34; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 34; g_globals->_sceneManager.changeScene(2000); break; case 12: - R2_GLOBALS._v56605[R2_GLOBALS._player._characterIndex] = 29; + R2_GLOBALS._spillLocation[R2_GLOBALS._player._characterIndex] = 29; g_globals->_sceneManager.changeScene(2000); break; case 20: @@ -1176,12 +1187,12 @@ void Scene2350::signal() { break; case 21: R2_GLOBALS._player.disableControl(); - R2_INVENTORY.setObjectScene(36, 1); + R2_INVENTORY.setObjectScene(R2_FLUTE, 1); _sceneMode = 2354; setAction(&_sequenceManager, this, 2354, &R2_GLOBALS._player, NULL); break; case 2354: - R2_INVENTORY.setObjectScene(20, 2350); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 2350); g_globals->_sceneManager.changeScene(2900); break; case 2355: @@ -1207,7 +1218,7 @@ void Scene2350::process(Event &event) { } /*-------------------------------------------------------------------------- - * Scene 2400 - Ice Maze: Large empty room + * Scene 2400 - Spill Mountains: Large empty room * *--------------------------------------------------------------------------*/ void Scene2400::Exit1::changeScene() { @@ -1243,7 +1254,7 @@ void Scene2400::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.postInit(); R2_GLOBALS._player.disableControl(); - if (R2_GLOBALS._v56605[1] == 16) { + if (R2_GLOBALS._spillLocation[R2_QUINN] == 16) { _sceneMode = 2400; setAction(&_sequenceManager, this, 2400, &R2_GLOBALS._player, NULL); } else { @@ -1255,11 +1266,11 @@ void Scene2400::postInit(SceneObjectList *OwnerList) { void Scene2400::signal() { switch (_sceneMode) { case 10: - R2_GLOBALS._v56605[1] = 16; + R2_GLOBALS._spillLocation[R2_QUINN] = 16; g_globals->_sceneManager.changeScene(2000); break; case 11: - R2_GLOBALS._v56605[1] = 17; + R2_GLOBALS._spillLocation[R2_QUINN] = 17; g_globals->_sceneManager.changeScene(2000); break; default: @@ -1269,7 +1280,7 @@ void Scene2400::signal() { } /*-------------------------------------------------------------------------- - * Scene 2425 - Ice Maze: + * Scene 2425 - Spill Mountains: * *--------------------------------------------------------------------------*/ @@ -1364,7 +1375,7 @@ void Scene2425::Exit1::changeScene() { Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; _enabled = false; - R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); + R2_GLOBALS._events.setCursor(CURSOR_WALK); R2_GLOBALS._player.disableControl(); scene->_sceneMode = 11; @@ -1395,7 +1406,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(5, 3); } - if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { _actor2.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor2.setup(20, 5, 1); @@ -1484,7 +1495,7 @@ void Scene2425::signal() { } /*-------------------------------------------------------------------------- - * Scene 2430 - Ice Maze: Bedroom + * Scene 2430 - Spill Mountains: Bedroom * *--------------------------------------------------------------------------*/ @@ -1520,7 +1531,7 @@ void Scene2430::Exit1::changeScene() { Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene; scene->_sceneMode = 0; - R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); + R2_GLOBALS._events.setCursor(CURSOR_WALK); R2_GLOBALS._player.disableControl(); scene->_sceneMode = 11; Common::Point pt(108, 200); @@ -1534,7 +1545,7 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(108, 160)); - if (R2_INVENTORY.getObjectScene(37) == 2430) { + if (R2_INVENTORY.getObjectScene(R2_GUNPOWDER) == 2430) { _actor2.postInit(); _actor2.setup(2435, 1, 5); _actor2.setPosition(Common::Point(205, 119)); @@ -1542,7 +1553,7 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { _actor2.setDetails(2430, 51, -1, 53, 1, (SceneItem *)NULL); } - if (R2_INVENTORY.getObjectScene(50) == 2435) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) == 2435) { _actor3.postInit(); _actor3.setup(2435, 1, 1); _actor3.setPosition(Common::Point(31, 65)); @@ -1560,7 +1571,7 @@ void Scene2430::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._player.setPosition(Common::Point(100, 200)); - 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(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); @@ -1623,14 +1634,15 @@ void Scene2430::signal() { } /*-------------------------------------------------------------------------- - * Scene 2435 - Ice Maze: Throne room + * Scene 2435 - Spill Mountains: Throne room * *--------------------------------------------------------------------------*/ -bool Scene2435::Actor1::startAction(CursorType action, Event &event) { + +bool Scene2435::Companion::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); } -bool Scene2435::Actor2::startAction(CursorType action, Event &event) { +bool Scene2435::Astor::startAction(CursorType action, Event &event) { Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -1671,7 +1683,7 @@ void Scene2435::Exit1::changeScene() { Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; _enabled = false; - R2_GLOBALS._events.setCursor(R2_NEGATOR_GUN); + R2_GLOBALS._events.setCursor(CURSOR_WALK); R2_GLOBALS._player.disableControl(); scene->_sceneMode = 11; Common::Point pt(175, 200); @@ -1689,36 +1701,38 @@ void Scene2435::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_pharishaSpeaker); _exit1.setDetails(Rect(142, 155, 207, 167), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(175, 160)); - _actor2.postInit(); - _actor2.setup(2005, 3, 1); - _actor2.setPosition(Common::Point(219, 106)); - _actor2.setDetails(2001, 25, 26, -1, 1, (SceneItem *)NULL); + _astor.postInit(); + _astor.setup(2005, 3, 1); + _astor.setPosition(Common::Point(219, 106)); + _astor.setDetails(2001, 25, 26, -1, 1, (SceneItem *)NULL); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); - if (R2_GLOBALS._player._characterIndex == 1) { + + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setVisage(2008); R2_GLOBALS._player._moveDiff = Common::Point(3, 2); } else { R2_GLOBALS._player.setVisage(20); R2_GLOBALS._player._moveDiff = Common::Point(5, 3); } - R2_GLOBALS._player.setPosition(Common::Point(715, 200)); - if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { - _actor1.postInit(); - if (R2_GLOBALS._player._characterIndex == 1) { - _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); + R2_GLOBALS._player.setPosition(Common::Point(175, 200)); + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { + _companion.postInit(); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _companion.setup(20, 5, 1); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { - _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); + _companion.setup(2008, 5, 1); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } - _actor1.setPosition(Common::Point(107, 145)); + _companion.setPosition(Common::Point(107, 145)); R2_GLOBALS._walkRegions.enableRegion(2); } - _item2.setDetails(Rect(52, 44, 96, 82), 2430, 3, -1, 5, 1, NULL); - _item3.setDetails(Rect(117, 36, 161, 74), 2430, 3, -1, 5, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + _leftWindow.setDetails(Rect(52, 44, 96, 82), 2430, 3, -1, 5, 1, NULL); + _rightWindow.setDetails(Rect(117, 36, 161, 74), 2430, 3, -1, 5, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { _sceneMode = 10; @@ -1736,7 +1750,7 @@ void Scene2435::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.enableControl(); } R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 2435; - R2_GLOBALS._v56605[1 + R2_GLOBALS._player._characterIndex] = 12; + R2_GLOBALS._spillLocation[1 + R2_GLOBALS._player._characterIndex] = 12; } void Scene2435::remove() { @@ -1753,21 +1767,21 @@ void Scene2435::signal() { R2_GLOBALS._player.enableControl(CURSOR_TALK); break; case 30: - R2_GLOBALS._player._characterScene[1] = 2435; - R2_GLOBALS._player._characterScene[2] = 2435; - R2_GLOBALS._player._oldCharacterScene[1] = 2435; - R2_GLOBALS._player._oldCharacterScene[2] = 2435; - R2_GLOBALS._v56605[1] = 12; - R2_GLOBALS._v56605[2] = 12; + R2_GLOBALS._player._characterScene[R2_QUINN] = 2435; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 2435; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 2435; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 2435; + R2_GLOBALS._spillLocation[R2_QUINN] = 12; + R2_GLOBALS._spillLocation[R2_SEEKER] = 12; R2_GLOBALS.setFlag(81); _sceneMode = 2436; R2_GLOBALS._player.setStrip(7); - _actor1.postInit(); + _companion.postInit(); if (R2_GLOBALS._player._characterIndex == 1) - _actor1.setVisage(20); + _companion.setVisage(20); else - _actor1.setVisage(2008); - setAction(&_sequenceManager, this, 2436, &_actor1, NULL); + _companion.setVisage(2008); + setAction(&_sequenceManager, this, 2436, &_companion, NULL); break; case 2436: R2_GLOBALS._walkRegions.enableRegion(2); @@ -1781,7 +1795,7 @@ void Scene2435::signal() { } /*-------------------------------------------------------------------------- - * Scene 2440 - Ice Maze: Another bedroom + * Scene 2440 - Spill Mountains: Another bedroom * *--------------------------------------------------------------------------*/ @@ -1820,7 +1834,7 @@ void Scene2440::postInit(SceneObjectList *OwnerList) { // Fix exit cursor, the original was using NW _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_SE, 2000); _exit1.setDest(Common::Point(210, 160)); - if (R2_INVENTORY.getObjectScene(49) == 2440) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2440) { _actor2.postInit(); _actor2.setup(2435, 1, 1); _actor2.setPosition(Common::Point(94, 80)); @@ -1839,7 +1853,7 @@ void Scene2440::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(5, 3); } R2_GLOBALS._player.setPosition(Common::Point(210, 200)); - if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { _actor1.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); @@ -1885,7 +1899,7 @@ void Scene2440::signal() { break; case 2440: _actor2.remove(); - R2_INVENTORY.setObjectScene(49, 2); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_2, 2); // No break on purpose default: R2_GLOBALS._player.enableControl(); @@ -1894,7 +1908,7 @@ void Scene2440::signal() { } /*-------------------------------------------------------------------------- - * Scene 2445 - Ice Maze: + * Scene 2445 - Spill Mountains: * *--------------------------------------------------------------------------*/ void Scene2445::postInit(SceneObjectList *OwnerList) { @@ -1912,23 +1926,23 @@ void Scene2445::signal() { } /*-------------------------------------------------------------------------- - * Scene 2450 - Ice Maze: Another bedroom + * Scene 2450 - Spill Mountains: Another bedroom * *--------------------------------------------------------------------------*/ -bool Scene2450::Actor2::startAction(CursorType action, Event &event) { +bool Scene2450::Parker::startAction(CursorType action, Event &event) { Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; if ((action == CURSOR_USE) && (R2_GLOBALS._player._characterIndex == 1)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2452; - scene->setAction(&scene->_sequenceManager, scene, 2452, &R2_GLOBALS._player, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager, scene, 2452, &R2_GLOBALS._player, &scene->_parker, NULL); return true; } return SceneActor::startAction(action, event); } -bool Scene2450::Actor3::startAction(CursorType action, Event &event) { +bool Scene2450::CareTaker::startAction(CursorType action, Event &event) { Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; if (action == CURSOR_TALK) { @@ -1942,7 +1956,8 @@ bool Scene2450::Actor3::startAction(CursorType action, Event &event) { else scene->_stripManager.start(700 + (R2_GLOBALS._v565AE * 2), scene); } - return true;} else { + return true; + } else { return SceneActor::startAction(action, event); } } @@ -1973,8 +1988,8 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(200); if (R2_GLOBALS._sceneManager._previousScene == -1) { R2_GLOBALS._sceneManager._previousScene = 1900; - R2_GLOBALS._player._oldCharacterScene[1] = 1900; - R2_GLOBALS._player._oldCharacterScene[2] = 1900; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1900; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1900; } _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); @@ -1986,11 +2001,11 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { } if (!R2_GLOBALS.getFlag(61)) { - _actor2.postInit(); - _actor2.setVisage(2009); - _actor2.setPosition(Common::Point(190, 119)); - _actor2.fixPriority(50); - _actor2.setDetails(2450, 0, -1, -1, 1, (SceneItem *)NULL); + _parker.postInit(); + _parker.setVisage(2009); + _parker.setPosition(Common::Point(190, 119)); + _parker.fixPriority(50); + _parker.setDetails(2450, 0, -1, -1, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -1998,10 +2013,10 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { switch (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex]) { case 1900: R2_GLOBALS._v565AE = 0; - R2_GLOBALS._player._characterScene[1] = 2450; - R2_GLOBALS._player._characterScene[2] = 2450; - R2_GLOBALS._player._oldCharacterScene[1] = 2450; - R2_GLOBALS._player._oldCharacterScene[2] = 2450; + R2_GLOBALS._player._characterScene[R2_QUINN] = 2450; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 2450; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 2450; + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 2450; R2_GLOBALS._player.setup(2450, 1, 1); R2_GLOBALS._player.setPosition(Common::Point(126, 101)); setAction(&_sequenceManager, this, 2450, &R2_GLOBALS._player, NULL); @@ -2009,24 +2024,24 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { case 2000: _sceneMode = 2451; if (R2_GLOBALS._player._characterIndex == 1) { - if (R2_GLOBALS._player._characterScene[2] == 2450) { - _actor1.postInit(); - _actor1.setup(20, 6, 1); - _actor1.setPosition(Common::Point(240, 120)); - _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); + if (R2_GLOBALS._player._characterScene[R2_SEEKER] == 2450) { + _companion.postInit(); + _companion.setup(20, 6, 1); + _companion.setPosition(Common::Point(240, 120)); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } setAction(&_sequenceManager, this, 2451, &R2_GLOBALS._player, NULL); } else { - R2_GLOBALS._player._oldCharacterScene[2] = 2450; - R2_GLOBALS._player._characterScene[2] = 2450; - if (R2_GLOBALS._player._characterScene[1] == 2450) { - _actor1.postInit(); + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 2450; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 2450; + if (R2_GLOBALS._player._characterScene[R2_QUINN] == 2450) { + _companion.postInit(); if (R2_GLOBALS.getFlag(61)) - _actor1.setup(2008, 6, 1); + _companion.setup(2008, 6, 1); else - _actor1.setup(10, 6, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); - _actor1.setPosition(Common::Point(106, 111)); + _companion.setup(10, 6, 1); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); + _companion.setPosition(Common::Point(106, 111)); } setAction(&_sequenceManager, this, 2456, &R2_GLOBALS._player, NULL); } @@ -2042,22 +2057,22 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setPosition(Common::Point(106, 111)); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); if (R2_GLOBALS.getFlag(72)) { - if (R2_GLOBALS._player._characterScene[2] == 2450) { - _actor1.postInit(); - _actor1.setup(20, 6, 1); - _actor1.setPosition(Common::Point(240, 120)); - _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); + if (R2_GLOBALS._player._characterScene[R2_SEEKER] == 2450) { + _companion.postInit(); + _companion.setup(20, 6, 1); + _companion.setPosition(Common::Point(240, 120)); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } } else { - _actor1.postInit(); - _actor1.setup(20, 8, 1); - _actor1.setPosition(Common::Point(93, 158)); - _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); + _companion.postInit(); + _companion.setup(20, 8, 1); + _companion.setPosition(Common::Point(93, 158)); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); - _actor3.postInit(); - _actor3.setup(2001, 7, 1); - _actor3.setPosition(Common::Point(34, 153)); - _actor3.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); + _careTaker.postInit(); + _careTaker.setup(2001, 7, 1); + _careTaker.setPosition(Common::Point(34, 153)); + _careTaker.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); _exit1._enabled = false; } @@ -2067,30 +2082,30 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.setPosition(Common::Point(93, 158)); if (R2_GLOBALS.getFlag(72)) { - if (R2_GLOBALS._player._characterScene[1] == 2450) { - _actor1.postInit(); + if (R2_GLOBALS._player._characterScene[R2_QUINN] == 2450) { + _companion.postInit(); if (R2_GLOBALS.getFlag(61)) { - _actor1.setup(2008, 6, 1); + _companion.setup(2008, 6, 1); } else { - _actor1.setup(10, 6, 1); + _companion.setup(10, 6, 1); } - _actor1.setPosition(Common::Point(106, 111)); - _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); + _companion.setPosition(Common::Point(106, 111)); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } } else { - _actor1.postInit(); + _companion.postInit(); if (R2_GLOBALS.getFlag(61)) { - _actor1.setup(2008, 6, 1); + _companion.setup(2008, 6, 1); } else { - _actor1.setup(10, 6, 1); + _companion.setup(10, 6, 1); } - _actor1.setPosition(Common::Point(106, 111)); - _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); + _companion.setPosition(Common::Point(106, 111)); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); - _actor3.postInit(); - _actor3.setup(2001, 7, 1); - _actor3.setPosition(Common::Point(34, 153)); - _actor3.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); + _careTaker.postInit(); + _careTaker.setup(2001, 7, 1); + _careTaker.setPosition(Common::Point(34, 153)); + _careTaker.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); _exit1._enabled = false; } @@ -2117,9 +2132,9 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.enableControl(); break; } - _item2.setDetails(Rect(174, 4, 199, 123), 2430, 30, 31, 32, 1, NULL); - _item3.setDetails(Rect(67, 73, 207, 121), 2430, 36, -1, 38, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); + _post.setDetails(Rect(174, 4, 199, 123), 2430, 30, 31, 32, 1, NULL); + _bedspread.setDetails(Rect(67, 73, 207, 121), 2430, 36, -1, 38, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 2430, 0, -1, -1, 1, NULL); } void Scene2450::remove() { @@ -2137,7 +2152,7 @@ void Scene2450::signal() { R2_GLOBALS._player.disableControl(); R2_GLOBALS._v565AE = 4; _sceneMode = 2454; - setAction(&_sequenceManager, this, 2454, &_actor3, NULL); + setAction(&_sequenceManager, this, 2454, &_careTaker, NULL); } else { R2_GLOBALS._player.enableControl(CURSOR_TALK); if (R2_GLOBALS._v565AE < 4) @@ -2147,7 +2162,7 @@ void Scene2450::signal() { case 30: R2_GLOBALS._player.disableControl(); _sceneMode = 2455; - setAction(&_sequenceManager, this, 2455, &_actor1, NULL); + setAction(&_sequenceManager, this, 2455, &_companion, NULL); break; case 31: R2_GLOBALS.setFlag(61); @@ -2158,7 +2173,7 @@ void Scene2450::signal() { break; case 2452: R2_GLOBALS.setFlag(61); - _actor2.remove(); + _parker.remove(); R2_GLOBALS._player.enableControl(); if (!R2_GLOBALS.getFlag(72)) { R2_GLOBALS._player.setStrip(6); @@ -2173,38 +2188,38 @@ void Scene2450::signal() { case 2454: _exit1._enabled = true; R2_GLOBALS.setFlag(72); - _actor3.remove(); + _careTaker.remove(); if (R2_GLOBALS.getFlag(61)) { g_globals->_sceneManager.changeScene(2435); } else { _sceneMode = 31; - if (R2_GLOBALS._player._characterIndex == 1) { - setAction(&_sequenceManager, this, 2452, &R2_GLOBALS._player, NULL); + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + setAction(&_sequenceManager, this, 2452, &R2_GLOBALS._player, &_parker, NULL); } else { - setAction(&_sequenceManager, this, 2452, &_actor1, &_actor2, NULL); + setAction(&_sequenceManager, this, 2452, &_companion, &_parker, NULL); } } break; case 2455: - R2_GLOBALS._player._oldCharacterScene[2] = 2450; - R2_GLOBALS._player._characterScene[2] = 2000; - R2_GLOBALS._v56605[2] = 3; - _actor1.remove(); + R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 2450; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 2000; + R2_GLOBALS._spillLocation[R2_SEEKER] = 3; + _companion.remove(); R2_GLOBALS._player.enableControl(CURSOR_ARROW); break; default: - _actor1.postInit(); - _actor1.setDetails(9002, 0, 4, 3, 2, (SceneItem *)NULL); - _actor3.postInit(); - _actor3.setDetails(2001, 40, -1, -1, 2, (SceneItem *)NULL); + _companion.postInit(); + _companion.setDetails(9002, 0, 4, 3, 2, (SceneItem *)NULL); + _careTaker.postInit(); + _careTaker.setDetails(2001, 40, -1, -1, 2, (SceneItem *)NULL); _sceneMode = 2453; - setAction(&_sequenceManager, this, 2453, &_actor3, &_actor1, NULL); + setAction(&_sequenceManager, this, 2453, &_careTaker, &_companion, NULL); break; } } /*-------------------------------------------------------------------------- - * Scene 2455 - Ice Maze: Inside crevasse + * Scene 2455 - Spill Mountains: Inside crevasse * *--------------------------------------------------------------------------*/ @@ -2212,7 +2227,7 @@ bool Scene2455::Actor1::startAction(CursorType action, Event &event) { Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; if (action == R2_GLASS_DOME) { - if ((R2_INVENTORY.getObjectScene(49) == 2455) || (R2_INVENTORY.getObjectScene(50) == 2455)) { + if ((R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2455) || (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) == 2455)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2458; scene->_actor2._lookLineNum = 9; @@ -2232,7 +2247,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { switch (action) { case R2_ALCOHOL_LAMP_2: - if (R2_INVENTORY.getObjectScene(50) != 2455) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) != 2455) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); scene->_actor1.setup(2456, 3, 3); @@ -2244,7 +2259,7 @@ bool Scene2455::Actor2::startAction(CursorType action, Event &event) { } break; case R2_ALCOHOL_LAMP_3: - if (R2_INVENTORY.getObjectScene(49) != 2455) { + if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) != 2455) { R2_GLOBALS._player.disableControl(); scene->_actor1.postInit(); scene->_actor1.setup(2456, 3, 3); @@ -2290,15 +2305,15 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) { - R2_INVENTORY.setObjectScene(29, 2); - R2_INVENTORY.setObjectScene(50, 2); + R2_INVENTORY.setObjectScene(R2_GLASS_DOME, 2); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_3, 2); } R2_GLOBALS._sound1.play(200); _exit1.setDetails(Rect(0, 0, 320, 15), EXITCURSOR_N, 2425); - if (R2_INVENTORY.getObjectScene(29) == 2455) { - if ((R2_INVENTORY.getObjectScene(50) == 2455) || (R2_INVENTORY.getObjectScene(49) == 2455)) { + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2455) { + if ((R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) == 2455) || (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2455)) { _actor1.postInit(); _actor1.setup(2456, 3, 3); _actor1.setPosition(Common::Point(162, 165)); @@ -2312,11 +2327,11 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { } _actor2.postInit(); - if (R2_INVENTORY.getObjectScene(29) == 2455) { + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2455) { _actor2.setup(2456, 3, 2); _actor2.setDetails(2455, 9, 1, -1, 1, (SceneItem *)NULL); } else { - if ((R2_INVENTORY.getObjectScene(50) != 2455) && (R2_INVENTORY.getObjectScene(49) != 2455)) + if ((R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_3) != 2455) && (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) != 2455)) _actor2.setup(2455, 1, 1); else _actor2.setup(2456, 1, 1); @@ -2324,7 +2339,7 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { } _actor2.setPosition(Common::Point(162, 165)); _actor2.fixPriority(20); - if (R2_INVENTORY.getObjectScene(29) != 2455) + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) != 2455) _actor2.animate(ANIM_MODE_2, NULL); R2_GLOBALS._player.postInit(); @@ -2356,23 +2371,23 @@ void Scene2455::signal() { g_globals->_sceneManager.changeScene(2425); break; case 11: - R2_INVENTORY.setObjectScene(49, 2455); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_2, 2455); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 12: - R2_INVENTORY.setObjectScene(50, 2455); + R2_INVENTORY.setObjectScene(R2_ALCOHOL_LAMP_3, 2455); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 2458: - R2_INVENTORY.setObjectScene(29, 2455); + R2_INVENTORY.setObjectScene(R2_GLASS_DOME, 2455); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; case 2459: _actor3.remove(); - R2_INVENTORY.setObjectScene(31, 2); + R2_INVENTORY.setObjectScene(R2_SCRITH_KEY, 2); R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; break; @@ -2384,7 +2399,7 @@ void Scene2455::signal() { } /*-------------------------------------------------------------------------- - * Scene 2500 - Ice Maze: Large Cave + * Scene 2500 - Spill Mountains: Large Cave * *--------------------------------------------------------------------------*/ @@ -2429,7 +2444,7 @@ void Scene2500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(3, 2); } - 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(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(21, 3, 1); @@ -2542,7 +2557,7 @@ void Scene2525::postInit(SceneObjectList *OwnerList) { _exit1.setDetails(Rect(86, 155, 228, 168), EXITCURSOR_S, 2000); - if (R2_INVENTORY.getObjectScene(29) == 2525) { + if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2525) { _actor3.postInit(); _actor3.setup(2435, 1, 2); _actor3.setPosition(Common::Point(78, 155)); @@ -2567,7 +2582,7 @@ void Scene2525::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(5, 3); } - 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(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); @@ -2615,7 +2630,7 @@ void Scene2525::signal() { break; case 2525: _actor3.remove(); - R2_INVENTORY.setObjectScene(29, 2); + R2_INVENTORY.setObjectScene(R2_GLASS_DOME, 2); R2_GLOBALS._player.enableControl(); break; case 2526: @@ -2629,7 +2644,7 @@ void Scene2525::signal() { } /*-------------------------------------------------------------------------- - * Scene 2530 - Ice Maze: Well + * Scene 2530 - Spill Mountains: Well * *--------------------------------------------------------------------------*/ bool Scene2530::Actor2::startAction(CursorType action, Event &event) { @@ -2698,7 +2713,7 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(108, 160)); - if (R2_INVENTORY.getObjectScene(33) == 2530) { + if (R2_INVENTORY.getObjectScene(R2_PURE_GRAIN_ALCOHOL) == 2530) { _actor2.postInit(); _actor2.setup(2435, 1, 3); _actor2.setPosition(Common::Point(299, 80)); @@ -2728,7 +2743,7 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._player.setPosition(Common::Point(100, 200)); - 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(); if (R2_GLOBALS._player._characterIndex == 1) { _actor1.setup(20, 5, 1); @@ -2766,7 +2781,7 @@ void Scene2530::signal() { g_globals->_sceneManager.changeScene(2000); break; case 2530: - R2_INVENTORY.setObjectScene(33, 2); + R2_INVENTORY.setObjectScene(R2_PURE_GRAIN_ALCOHOL, 2); _actor2.remove(); break; case 2531: @@ -2786,25 +2801,22 @@ void Scene2530::signal() { } /*-------------------------------------------------------------------------- - * Scene 2535 - Ice Maze: Tannery + * Scene 2535 - Spill Mountains: Tannery * *--------------------------------------------------------------------------*/ -bool Scene2535::Actor3::startAction(CursorType action, Event &event) { +bool Scene2535::RebreatherTank::startAction(CursorType action, Event &event) { Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) return SceneActor::startAction(action, event); - if (R2_GLOBALS._player._characterIndex == 1) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(20) == 2535) { - scene->_sceneMode = 2536; - scene->setAction(&scene->_sequenceManager, scene, 2536, &R2_GLOBALS._player, &scene->_actor3, NULL); - } else { - scene->_sceneMode = 2537; - scene->setAction(&scene->_sequenceManager, scene, 2537, &R2_GLOBALS._player, &scene->_actor3, NULL); - } + + scene->_sceneMode = (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 2535) ? 2536 : 2537; + scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, + &R2_GLOBALS._player, &scene->_rebreatherTank, NULL); } else { SceneItem::display(2530, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); } @@ -2812,7 +2824,7 @@ bool Scene2535::Actor3::startAction(CursorType action, Event &event) { return true; } -bool Scene2535::Actor4::startAction(CursorType action, Event &event) { +bool Scene2535::TannerMask::startAction(CursorType action, Event &event) { Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) @@ -2821,7 +2833,7 @@ bool Scene2535::Actor4::startAction(CursorType action, Event &event) { if (R2_GLOBALS._player._characterIndex == 2) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 2535; - scene->setAction(&scene->_sequenceManager, scene, 2535, &R2_GLOBALS._player, &scene->_actor4, NULL); + scene->setAction(&scene->_sequenceManager, scene, 2535, &R2_GLOBALS._player, &scene->_tannerMask, NULL); } else { SceneItem::display(2530, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999); } @@ -2846,40 +2858,40 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (R2_GLOBALS._sceneManager._previousScene == -1) { R2_GLOBALS.setFlag(73); - R2_INVENTORY.setObjectScene(20, 2535); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 2535); } _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_S, 2000); _exit1.setDest(Common::Point(210, 160)); - if (R2_INVENTORY.getObjectScene(32) == 2535) { - _actor4.postInit(); - _actor4.setup(2435, 1, 4); - _actor4.setPosition(Common::Point(47, 74)); - _actor4.fixPriority(74); - _actor4.setDetails(2535, 21, -1, -1, 1, (SceneItem *)NULL); + if (R2_INVENTORY.getObjectScene(R2_TANNER_MASK) == 2535) { + _tannerMask.postInit(); + _tannerMask.setup(2435, 1, 4); + _tannerMask.setPosition(Common::Point(47, 74)); + _tannerMask.fixPriority(74); + _tannerMask.setDetails(2535, 21, -1, -1, 1, (SceneItem *)NULL); } - if (R2_INVENTORY.getObjectScene(20) == 2535) { - _actor3.postInit(); - _actor3.setup(2535, 3, 1); - _actor3.setPosition(Common::Point(203, 131)); - _actor3.setDetails(3, 20, -1, -1, 1, (SceneItem *)NULL); + if (R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 2535) { + _rebreatherTank.postInit(); + _rebreatherTank.setup(2535, 3, 1); + _rebreatherTank.setPosition(Common::Point(203, 131)); + _rebreatherTank.setDetails(3, 20, -1, -1, 1, (SceneItem *)NULL); R2_GLOBALS._walkRegions.enableRegion(6); } - if ((R2_INVENTORY.getObjectScene(20) == 0) && (R2_GLOBALS.getFlag(73))) { - _actor3.postInit(); - _actor3.setup(2536, 1, 2); - _actor3.setPosition(Common::Point(164, 133)); - _actor3.setDetails(3, 20, -1, -1, 1, (SceneItem *)NULL); + if ((R2_INVENTORY.getObjectScene(R2_REBREATHER_TANK) == 0) && (R2_GLOBALS.getFlag(73))) { + _rebreatherTank.postInit(); + _rebreatherTank.setup(2536, 1, 2); + _rebreatherTank.setPosition(Common::Point(164, 133)); + _rebreatherTank.setDetails(3, 20, -1, -1, 1, (SceneItem *)NULL); } if (R2_GLOBALS.getFlag(73)) { - _actor2.postInit(); - _actor2.setup(2536, 1, 1); - _actor2.setPosition(Common::Point(160, 130)); - _actor2.fixPriority(122); - _actor2.setDetails(2535, 37, -1, -1, 1, (SceneItem *)NULL); + _rope.postInit(); + _rope.setup(2536, 1, 1); + _rope.setPosition(Common::Point(160, 130)); + _rope.fixPriority(122); + _rope.setDetails(2535, 37, -1, -1, 1, (SceneItem *)NULL); } R2_GLOBALS._player.postInit(); @@ -2893,26 +2905,26 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._player.setPosition(Common::Point(210, 200)); - if (R2_GLOBALS._player._characterScene[1] == R2_GLOBALS._player._characterScene[2]) { - _actor1.postInit(); + if (R2_GLOBALS._player._characterScene[R2_QUINN] == R2_GLOBALS._player._characterScene[R2_SEEKER]) { + _companion.postInit(); if (R2_GLOBALS._player._characterIndex == 1) { - _actor1.setup(20, 5, 1); - _actor1.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); + _companion.setup(20, 5, 1); + _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *)NULL); } else { - _actor1.setup(2008, 5, 1); - _actor1.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); + _companion.setup(2008, 5, 1); + _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *)NULL); } - _actor1.setPosition(Common::Point(245, 115)); + _companion.setPosition(Common::Point(245, 115)); R2_GLOBALS._walkRegions.enableRegion(2); } - _item2.setDetails(Rect(96, 3, 215, 33), 2535, 3, 6, 5, 1, NULL); - _item3.setDetails(Rect(4, 43, 40, 101), 2535, 6, 7, 8, 1, NULL); - _item4.setDetails(Rect(55, 13, 140, 89), 2535, 6, 7, 8, 1, NULL); - _item5.setDetails(Rect(144, 23, 216, 76), 2535, 6, 7, 8, 1, NULL); - _item6.setDetails(Rect(227, 8, 307, 99), 2535, 6, 7, 8, 1, NULL); - _item7.setDetails(Rect(116, 111, 201, 132), 2535, 18, 19, 20, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 2535, 0, 1, -1, 1, NULL); + _roof.setDetails(Rect(96, 3, 215, 33), 2535, 3, 6, 5, 1, NULL); + _skin1.setDetails(Rect(4, 43, 40, 101), 2535, 6, 7, 8, 1, NULL); + _skin2.setDetails(Rect(55, 13, 140, 89), 2535, 6, 7, 8, 1, NULL); + _skin3.setDetails(Rect(144, 23, 216, 76), 2535, 6, 7, 8, 1, NULL); + _skin4.setDetails(Rect(227, 8, 307, 99), 2535, 6, 7, 8, 1, NULL); + _depression.setDetails(Rect(116, 111, 201, 132), 2535, 18, 19, 20, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 2535, 0, 1, -1, 1, NULL); R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 2000) { @@ -2933,32 +2945,31 @@ void Scene2535::signal() { g_globals->_sceneManager.changeScene(2000); break; case 2535: - R2_INVENTORY.setObjectScene(32, 2); - _actor4.remove(); + R2_INVENTORY.setObjectScene(R2_TANNER_MASK, 2); + _tannerMask.remove(); R2_GLOBALS._player.enableControl(); break; case 2536: - R2_INVENTORY.setObjectScene(20, 0); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 0); R2_GLOBALS._walkRegions.disableRegion(6); if (!R2_GLOBALS.getFlag(73)) { - _actor3.remove(); + _rebreatherTank.remove(); R2_GLOBALS._player.enableControl(); } else { _sceneMode = 20; - _actor3.show(); - _actor3.setup(2536, 1, 2); - _actor3.setDetails(3, 20, -1, -1, 3, (SceneItem *)NULL); - _actor3.setPosition(Common::Point(164, 150)); - _actor3.fixPriority(130); - _actor3._moveDiff.y = 1; - Common::Point pt(164, 133); - PlayerMover *mover = new PlayerMover(); - _actor3.addMover(mover, &pt, this); + _rebreatherTank.show(); + _rebreatherTank.setup(2536, 1, 2); + _rebreatherTank.setDetails(3, 20, -1, -1, 3, (SceneItem *)NULL); + _rebreatherTank.setPosition(Common::Point(164, 150)); + _rebreatherTank.fixPriority(130); + + _rebreatherTank._moveDiff.y = 1; + ADD_MOVER(_rebreatherTank, 164, 133); } break; case 2537: - _actor3.remove(); - R2_INVENTORY.setObjectScene(20, 1); + _rebreatherTank.remove(); + R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1); R2_GLOBALS._player.enableControl(); break; case 20: @@ -2970,7 +2981,7 @@ void Scene2535::signal() { } /*-------------------------------------------------------------------------- - * Scene 2600 - Ice Maze: Exit + * Scene 2600 - Spill Mountains: Exit * *--------------------------------------------------------------------------*/ Scene2600::Scene2600(): SceneExt() { @@ -3056,7 +3067,7 @@ void Scene2700::Action4::signal() { void Scene2700::Area1::process(Event &event) { SceneArea::process(event); - if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -3106,7 +3117,7 @@ void Scene2700::Area1::process(Event &event) { void Scene2700::Area2::process(Event &event) { SceneArea::process(event); - if ((event.eventType == 1) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { + if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 10; @@ -3211,7 +3222,7 @@ void Scene2700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(2, 2); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(36) == 0) + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) R2_GLOBALS._sound1.changeSound(234); if (R2_GLOBALS._sceneManager._previousScene == 2750) { @@ -3452,7 +3463,7 @@ void Scene2700::signal() { } break; case 11: - R2_INVENTORY.setObjectScene(36, 0); + R2_INVENTORY.setObjectScene(R2_FLUTE, 0); R2_GLOBALS._player.disableControl(); _field412 = 0; _sceneMode = 2700; @@ -3854,7 +3865,7 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { _rect2.set(130, 142, 210, 167); _rect3.set(-1, 137, 290, 147); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._sound1.changeSound(235); _actor2.postInit(); _actor2.setup(2751, 1, 1); @@ -3929,7 +3940,7 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_nejSpeaker); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { _actor1.postInit(); _actor1.setup(2752, 5, 1); _actor1.animate(ANIM_MODE_NONE, NULL); @@ -3943,7 +3954,7 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._sceneManager._previousScene == 2700) { - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._player.setVisage(2752); R2_GLOBALS._player.setStrip(6); R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); @@ -4448,7 +4459,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_nejSpeaker); _stripManager.addSpeaker(&_guardSpeaker); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._sound1.fadeSound(237); if (R2_GLOBALS.getFlag(47)) { _item2.setDetails(Rect(76, 45, 155, 90), 2800, 3, -1, -1, 2, NULL); @@ -4469,7 +4480,7 @@ void Scene2800::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(2, 2); R2_GLOBALS._player.disableControl(); - if (R2_INVENTORY.getObjectScene(36) == 0) { + if (R2_INVENTORY.getObjectScene(R2_FLUTE) == 0) { R2_GLOBALS._player.setAction(&_sequenceManager, this, 2800, &R2_GLOBALS._player, NULL); } else if (R2_GLOBALS.getFlag(47)) { R2_GLOBALS._player.setVisage(3110); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index feceaa1537..04b849f070 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -45,23 +45,23 @@ class Scene2000 : public SceneExt { virtual void signal(); }; - class Exit1 : public SceneExit { + class WestExit : public SceneExit { public: virtual void changeScene(); }; - class Exit2 : public SceneExit { + class EastExit : public SceneExit { public: virtual void changeScene(); }; - class Exit3 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; - class Exit4 : public SceneExit { + class NorthExit : public SceneExit { public: virtual void changeScene(); }; - class Exit5 : public SceneExit { + class DoorExit : public SceneExit { public: virtual void changeScene(); }; @@ -72,11 +72,11 @@ public: NamedHotspot _item1; SceneActor _object1; SceneActor _objList1[11]; - Exit1 _exit1; - Exit2 _exit2; - Exit3 _exit3; - Exit4 _exit4; - Exit5 _exit5; + WestExit _westExit; + EastExit _eastExit; + SouthExit _southExit; + NorthExit _northExit; + DoorExit _doorExit; Action1 _action1, _action2, _action3, _action4, _action5; SequenceManager _sequenceManager; @@ -230,11 +230,11 @@ public: }; class Scene2435 : public SceneExt { - class Actor1 : public SceneActor { + class Companion : public SceneActor { public: bool startAction(CursorType action, Event &event); }; - class Actor2 : public SceneActor { + class Astor : public SceneActor { public: bool startAction(CursorType action, Event &event); }; @@ -247,11 +247,11 @@ public: SpeakerQuinn2435 _quinnSpeaker; SpeakerSeeker2435 _seekerSpeaker; SpeakerPharisha2435 _pharishaSpeaker; - NamedHotspot _item1; - NamedHotspot _item2; - NamedHotspot _item3; - Actor1 _actor1; - Actor2 _actor2; + NamedHotspot _background; + NamedHotspot _leftWindow; + NamedHotspot _rightWindow; + Companion _companion; + Astor _astor; Exit1 _exit1; SequenceManager _sequenceManager; @@ -301,11 +301,11 @@ public: }; class Scene2450 : public SceneExt { - class Actor2 : public SceneActor { + class Parker : public SceneActor { public: bool startAction(CursorType action, Event &event); }; - class Actor3 : public SceneActor { + class CareTaker : public SceneActor { public: bool startAction(CursorType action, Event &event); }; @@ -318,12 +318,12 @@ public: SpeakerQuinn2450 _quinnSpeaker; SpeakerSeeker2450 _seekerSpeaker; SpeakerCaretaker2450 _caretakerSpeaker; - NamedHotspot _item1; - NamedHotspot _item2; - NamedHotspot _item3; - SceneActor _actor1; - Actor2 _actor2; - Actor3 _actor3; + NamedHotspot _background; + NamedHotspot _post; + NamedHotspot _bedspread; + SceneActor _companion; + Parker _parker; + CareTaker _careTaker; Exit1 _exit1; SequenceManager _sequenceManager; @@ -447,11 +447,11 @@ public: }; class Scene2535 : public SceneExt { - class Actor3 : public SceneActor { + class RebreatherTank : public SceneActor { public: bool startAction(CursorType action, Event &event); }; - class Actor4 : public SceneActor { + class TannerMask : public SceneActor { public: bool startAction(CursorType action, Event &event); }; @@ -461,17 +461,17 @@ class Scene2535 : public SceneExt { virtual void changeScene(); }; public: - NamedHotspot _item1; - NamedHotspot _item2; - NamedHotspot _item3; - NamedHotspot _item4; - NamedHotspot _item5; - NamedHotspot _item6; - NamedHotspot _item7; - SceneActor _actor1; - SceneActor _actor2; - Actor3 _actor3; - Actor4 _actor4; + NamedHotspot _background; + NamedHotspot _roof; + NamedHotspot _skin1; + NamedHotspot _skin2; + NamedHotspot _skin3; + NamedHotspot _skin4; + NamedHotspot _depression; + SceneActor _companion; + SceneActor _rope; + RebreatherTank _rebreatherTank; + TannerMask _tannerMask; Exit1 _exit1; SequenceManager _sequenceManager; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 6af2a0cad4..3c9a36c646 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -58,7 +58,7 @@ bool Scene3100::Guard::startAction(CursorType action, Event &event) { void Scene3100::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 1000) { - if (R2_GLOBALS._player._oldCharacterScene[1] == 3100) { + if (R2_GLOBALS._player._oldCharacterScene[R2_QUINN] == 3100) { loadScene(3101); R2_GLOBALS._uiElements._active = false; } else { @@ -89,7 +89,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { _field412 = 0; if (R2_GLOBALS._sceneManager._previousScene == 1000) { - if (R2_GLOBALS._player._oldCharacterScene[1] == 3100) { + if (R2_GLOBALS._player._oldCharacterScene[R2_QUINN] == 3100) { _sceneMode = 3102; _actor3.postInit(); _actor4.postInit(); @@ -153,7 +153,7 @@ void Scene3100::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(243); } - R2_GLOBALS._player._oldCharacterScene[1] = 3100; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 3100; } void Scene3100::remove() { @@ -178,7 +178,7 @@ void Scene3100::signal() { R2_GLOBALS._sceneManager.changeScene(1000); break; case 3102: - R2_GLOBALS._player._oldCharacterScene[1] = 1000; + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1000; R2_GLOBALS._sceneManager.changeScene(1000); break; default: @@ -378,7 +378,7 @@ bool Scene3150::Item5::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: - if (R2_INVENTORY.getObjectScene(47) != 3150) + if (R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) return SceneHotspot::startAction(action, event); R2_GLOBALS._player.disableControl(); @@ -386,7 +386,7 @@ bool Scene3150::Item5::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager, scene, 3154, &R2_GLOBALS._player, &scene->_actor3, NULL); return true; case R2_SUPERCONDUCTOR_WIRE: - if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_GLOBALS.getFlag(75))) { + if ((R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) && (R2_GLOBALS.getFlag(75))) { R2_GLOBALS._player.disableControl(); scene->_actor3.postInit(); scene->_actor3._effect = 3; @@ -417,7 +417,7 @@ bool Scene3150::Item6::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager, scene, 3158, &R2_GLOBALS._player, &scene->_actor4, NULL); return true; case R2_FOOD_TRAY: - if ((R2_INVENTORY.getObjectScene(47) != 3150) && (R2_INVENTORY.getObjectScene(40) == 3150) && (R2_GLOBALS.getFlag(75))) { + if ((R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) && (R2_INVENTORY.getObjectScene(R2_SUPERCONDUCTOR_WIRE) == 3150) && (R2_GLOBALS.getFlag(75))) { scene->_actor5.postInit(); scene->_actor5._effect = 6; scene->_actor5._shade = 3; @@ -535,8 +535,8 @@ void Scene3150::Exit2::changeScene() { void Scene3150::postInit(SceneObjectList *OwnerList) { loadScene(3150); if (R2_GLOBALS._sceneManager._previousScene == -1) { - R2_INVENTORY.setObjectScene(35, 2000); - R2_GLOBALS._player._oldCharacterScene[1] = 3100; + R2_INVENTORY.setObjectScene(R2_ANCIENT_SCROLLS, 2000); + R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 3100; R2_GLOBALS._player._oldCharacterScene[3] = 0; R2_GLOBALS._player._characterIndex = R2_MIRANDA; } @@ -583,7 +583,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor7.fixPriority(50); _actor7.setDetails(3150, 17, -1, 19, 1, (SceneItem *)NULL); - if (R2_INVENTORY.getObjectScene(41) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_PILLOW) == 3150) { _actor4.postInit(); if (R2_GLOBALS.getFlag(75)) { if (R2_GLOBALS.getFlag(76)) { @@ -608,13 +608,13 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { } } - if (R2_INVENTORY.getObjectScene(47) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) == 3150) { _actor3.postInit(); _actor3.setup(3152, 7, 1); _actor3.setPosition(Common::Point(73, 83)); } - if (R2_INVENTORY.getObjectScene(40) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_SUPERCONDUCTOR_WIRE) == 3150) { _actor3.postInit(); _actor3.setup(3152, 7, 3); _actor3.setPosition(Common::Point(70, 55)); @@ -623,7 +623,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _actor3._shade = 5; } - if (R2_INVENTORY.getObjectScene(42) == 3150) { + if (R2_INVENTORY.getObjectScene(R2_FOOD_TRAY) == 3150) { _actor5.postInit(); if (R2_GLOBALS.getFlag(77)) { _actor5.setup(3152, 7, 8); @@ -675,7 +675,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { break; } default: - if ((R2_GLOBALS._v56AA0 == 1) && (R2_INVENTORY.getObjectScene(35) == 2000) && (R2_GLOBALS._player._oldCharacterScene[1] == 3100)) { + if ((R2_GLOBALS._v56AA0 == 1) && (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2000) && (R2_GLOBALS._player._oldCharacterScene[R2_QUINN] == 3100)) { ++R2_GLOBALS._v56AA0; _sceneMode = 3156; _actor1.postInit(); @@ -713,7 +713,7 @@ void Scene3150::signal() { break; case 3151: _actor1.remove(); - R2_INVENTORY.setObjectScene(41, 3); + R2_INVENTORY.setObjectScene(R2_PILLOW, 3); R2_GLOBALS._player.enableControl(); break; case 3153: @@ -726,37 +726,37 @@ void Scene3150::signal() { break; case 3154: _actor3.remove(); - R2_INVENTORY.setObjectScene(47, 3); + R2_INVENTORY.setObjectScene(R2_LIGHT_BULB, 3); R2_GLOBALS._player.enableControl(); break; case 3155: - R2_INVENTORY.setObjectScene(40, 3150); + R2_INVENTORY.setObjectScene(R2_SUPERCONDUCTOR_WIRE, 3150); R2_GLOBALS._player.enableControl(); break; case 3156: _actor5.setDetails(3150, 30, -1, -1, 2, (SceneItem *)NULL); - R2_INVENTORY.setObjectScene(42, 3150); + R2_INVENTORY.setObjectScene(R2_FOOD_TRAY, 3150); R2_GLOBALS._player.enableControl(); break; case 3157: _actor5.remove(); - R2_INVENTORY.setObjectScene(42, 3); + R2_INVENTORY.setObjectScene(R2_FOOD_TRAY, 3); R2_GLOBALS._player.enableControl(); break; case 3158: R2_GLOBALS.setFlag(75); - R2_INVENTORY.setObjectScene(41, 3150); + R2_INVENTORY.setObjectScene(R2_PILLOW, 3150); _actor4.fixPriority(110); _actor4.setDetails(3150, 13, -1, -1, 2, (SceneItem *)NULL); R2_GLOBALS._player.enableControl(); break; case 3159: R2_GLOBALS.setFlag(77); - R2_INVENTORY.setObjectScene(42, 3150); + R2_INVENTORY.setObjectScene(R2_FOOD_TRAY, 3150); R2_GLOBALS._player.enableControl(); break; case 3160: - R2_INVENTORY.setObjectScene(52, 3150); + R2_INVENTORY.setObjectScene(R2_TOOLBOX, 3150); R2_GLOBALS.setFlag(80); R2_GLOBALS._sceneManager.changeScene(1200); break; @@ -1407,7 +1407,7 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _actor13.setPosition(Common::Point(40, 106)); _actor13.setDetails(3260, 18, 1, -1, 1, (SceneItem *)NULL); - if (R2_INVENTORY.getObjectScene(52) == 3260) { + if (R2_INVENTORY.getObjectScene(R2_TOOLBOX) == 3260) { _actor14.postInit(); _actor14.setup(3260, 7, 1); _actor14.setPosition(Common::Point(202, 66)); @@ -1524,8 +1524,8 @@ void Scene3260::signal() { R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); SceneItem::display(3260, 15, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, -999); R2_GLOBALS._player.disableControl(); - R2_INVENTORY.setObjectScene(52, 3); - R2_INVENTORY.setObjectScene(43, 3); + R2_INVENTORY.setObjectScene(R2_TOOLBOX, 3); + R2_INVENTORY.setObjectScene(R2_LASER_HACKSAW, 3); setAction(&_sequenceManager, this, 3273, &R2_GLOBALS._player, &_actor14, NULL); break; case 3273: @@ -1957,8 +1957,8 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_mirandaSpeaker); _stripManager.addSpeaker(&_webbsterSpeaker); - R2_GLOBALS._player._characterScene[1] = 3375; - R2_GLOBALS._player._characterScene[2] = 3375; + R2_GLOBALS._player._characterScene[R2_QUINN] = 3375; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 3375; R2_GLOBALS._player._characterScene[3] = 3375; setZoomPercents(126, 55, 200, 167); @@ -2292,8 +2292,8 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_mirandaSpeaker); _stripManager.addSpeaker(&_webbsterSpeaker); - R2_GLOBALS._player._characterScene[1] = 3385; - R2_GLOBALS._player._characterScene[2] = 3385; + R2_GLOBALS._player._characterScene[R2_QUINN] = 3385; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 3385; R2_GLOBALS._player._characterScene[3] = 3385; if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -2512,8 +2512,8 @@ void Scene3395::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_mirandaSpeaker); _stripManager.addSpeaker(&_webbsterSpeaker); - R2_GLOBALS._player._characterScene[1] = 3395; - R2_GLOBALS._player._characterScene[2] = 3395; + R2_GLOBALS._player._characterScene[R2_QUINN] = 3395; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 3395; R2_GLOBALS._player._characterScene[3] = 3395; if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -2669,8 +2669,8 @@ void Scene3400::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_tealSpeaker); setZoomPercents(51, 46, 180, 200); - R2_GLOBALS._player._characterScene[1] = 3400; - R2_GLOBALS._player._characterScene[2] = 3400; + R2_GLOBALS._player._characterScene[R2_QUINN] = 3400; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 3400; R2_GLOBALS._player._characterScene[3] = 3400; _actor7.postInit(); @@ -2771,7 +2771,7 @@ void Scene3400::signal() { _actor2.setStrip(6); _actor3.setStrip(3); _actor4.setStrip(1); - R2_INVENTORY.setObjectScene(34, 0); + R2_INVENTORY.setObjectScene(R2_SAPPHIRE_BLUE, 0); _stripManager.start(3307, this); if (R2_GLOBALS._player._characterIndex == 2) { _sceneMode = 3400; @@ -3577,8 +3577,8 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._v5589E.set(0, 0, 320, 200); R2_GLOBALS._sound1.play(305); R2_GLOBALS._player._characterIndex = R2_QUINN; - R2_GLOBALS._player._characterScene[1] = 3500; - R2_GLOBALS._player._characterScene[2] = 3500; + R2_GLOBALS._player._characterScene[R2_QUINN] = 3500; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 3500; R2_GLOBALS._player._characterScene[3] = 3500; _field1284 = 0; _field1282 = 0; @@ -4377,8 +4377,8 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_protectorSpeaker); setZoomPercents(142, 80, 167, 105); - R2_GLOBALS._player._characterScene[1] = 3600; - R2_GLOBALS._player._characterScene[2] = 3600; + R2_GLOBALS._player._characterScene[R2_QUINN] = 3600; + R2_GLOBALS._player._characterScene[R2_SEEKER] = 3600; R2_GLOBALS._player._characterScene[3] = 3600; _item2.setDetails(33, 3600, 6, -1, -1); @@ -5319,7 +5319,7 @@ void Scene3800::signal() { } void Scene3800::process(Event &event) { - if ((R2_GLOBALS._player._uiEnabled) && (event.eventType == 1) && (_rect1.contains(event.mousePos))) { + if ((R2_GLOBALS._player._uiEnabled) && (event.eventType == EVENT_BUTTON_DOWN) && (_rect1.contains(event.mousePos))) { event.handled = true; switch (R2_GLOBALS._events.getCursor()) { case R2_NEGATOR_GUN: @@ -5582,7 +5582,7 @@ void Scene3900::signal() { } void Scene3900::process(Event &event) { - if ((R2_GLOBALS._player._uiEnabled) && (event.eventType == 1) && (_rect1.contains(event.mousePos))) { + if ((R2_GLOBALS._player._uiEnabled) && (event.eventType == EVENT_BUTTON_DOWN) && (_rect1.contains(event.mousePos))) { event.handled = true; switch (R2_GLOBALS._events.getCursor()) { case R2_NEGATOR_GUN: diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index cd2ff669ff..e908fb4412 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -204,13 +204,12 @@ void VisualSpeaker::setText(const Common::String &msg) { _sceneText._textMode = _textMode; _sceneText.setup(s); - //_sceneText.clone(); - _sceneText.setPosition(_textPos); _sceneText.fixPriority(256); // If subtitles are turned off, don't show the text - if (!(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { + if ((R2_GLOBALS._speechSubtitles & SPEECH_VOICE) && + !(R2_GLOBALS._speechSubtitles & SPEECH_TEXT)) { _sceneText.hide(); } @@ -360,7 +359,7 @@ void SpeakerChief1100::proc15() { Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor18; + _object2 = &scene->_chief; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1042,7 +1041,7 @@ void SpeakerPharisha2435::proc15() { Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; if (!_object2) { - _object2 = &scene->_actor2; + _object2 = &scene->_astor; _object2->hide(); _object1.postInit(); _object1.setPosition(_object2->_position); @@ -1180,6 +1179,7 @@ void SpeakerQuinn300::proc15() { if (R2_GLOBALS._player._characterIndex == 3) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 300); Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_quinn; } @@ -1220,6 +1220,51 @@ void SpeakerQuinn300::proc15() { } } +void SpeakerQuinn500::proc15() { + int v = _speakerMode; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == R2_QUINN) { + _object2 = &R2_GLOBALS._player; + } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 500); + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + + _object1.postInit(); + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + switch (_object2->_visage) { + case 10: + _object1.setup(4021, (v == 1) ? 5 : 7, 1); + break; + + case 1500: + _object1.setup(4021, (v == 1) ? 1 : 3, 1); + break; + + default: + break; + } + + _object1.animate(ANIM_MODE_5, this); + } +} + void SpeakerQuinn1100::proc15() { int v = _speakerMode; @@ -1230,8 +1275,9 @@ void SpeakerQuinn1100::proc15() { if (R2_GLOBALS._player._characterIndex == 1) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1100); Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor16; + _object2 = &scene->_seeker; } _object2->hide(); @@ -1275,8 +1321,9 @@ void SpeakerQuinn2435::proc15() { if (R2_GLOBALS._player._characterIndex == 1) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -1301,8 +1348,9 @@ void SpeakerQuinn2450::proc15() { if (R2_GLOBALS._player._characterIndex == 1) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -1948,9 +1996,9 @@ void SpeakerSeeker300::proc15() { int v = _speakerMode; if (!_object2) { - if (R2_GLOBALS._player._characterIndex == 2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { _object2 = &R2_GLOBALS._player; - } else { + } else {assert(R2_GLOBALS._sceneManager._sceneNumber == 300); Scene300 *scene = (Scene300 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_seeker; } @@ -1980,6 +2028,43 @@ void SpeakerSeeker300::proc15() { } } +void SpeakerSeeker500::proc15() { + int v = _speakerMode; + + if (!_object2) { + if (R2_GLOBALS._player._characterIndex == R2_SEEKER) { + _object2 = &R2_GLOBALS._player; + } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 500); + Scene500 *scene = (Scene500 *)R2_GLOBALS._sceneManager._scene; + _object2 = &scene->_seeker; + } + + _object2->hide(); + _object1.postInit(); + + _object1._effect = _object2->_effect; + _object1._shade = _object2->_shade; + _object1.setPosition(_object2->_position); + + if (_object2->_mover) + _object2->addMover(NULL); + } + + if (v == 0) { + _object1.animate(ANIM_MODE_2, NULL); + } else { + ((SceneItem *)_action)->_sceneRegionId = 0; + + if (v == 1) + _object1.setup(4041, 3, 1); + else + _object1.setup(4041, 1, 1); + + _object1.animate(ANIM_MODE_5, this); + } +} + void SpeakerSeeker1100::proc15() { int v = _speakerMode; @@ -1990,8 +2075,9 @@ void SpeakerSeeker1100::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1100); Scene1100 *scene = (Scene1100 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor16; + _object2 = &scene->_seeker; } _object2->hide(); @@ -2046,6 +2132,7 @@ void SpeakerSeeker1900::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 1900); Scene1900 *scene = (Scene1900 *)R2_GLOBALS._sceneManager._scene; _object2 = &scene->_actor1; } @@ -2076,8 +2163,9 @@ void SpeakerSeeker2435::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2435); Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -2102,8 +2190,9 @@ void SpeakerSeeker2450::proc15() { if (R2_GLOBALS._player._characterIndex == 2) { _object2 = &R2_GLOBALS._player; } else { + assert(R2_GLOBALS._sceneManager._sceneNumber == 2450); Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor1; + _object2 = &scene->_companion; } _object2->hide(); @@ -2492,9 +2581,9 @@ void SpeakerSocko3200::proc15() { // Classes related to SOLDIER //---------------------------------------------------------------------------- -SpeakerSoldier::SpeakerSoldier(int colour) { +SpeakerSoldier::SpeakerSoldier(int color) { _speakerName = "SOLDIER"; - _color1 = colour; + _color1 = color; _color2 = 0; _speakerMode = 0; _textWidth = 300; @@ -2577,7 +2666,7 @@ void SpeakerTeal1625::proc15() { if (!_object2) { Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene; - _object2 = &scene->_actor2; + _object2 = &scene->_tealHead; _object2->hide(); _object1.postInit(); @@ -2788,9 +2877,9 @@ void SpeakerTomko3245::proc15() { // Classes related to WEBBSTER //---------------------------------------------------------------------------- -SpeakerWebbster::SpeakerWebbster(int colour) { +SpeakerWebbster::SpeakerWebbster(int color) { _speakerName = "WEBBSTER"; - _color1 = colour; + _color1 = color; _color2 = 0; _speakerMode = 0; _textWidth = 300; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h index 532e02576c..4dfb500f2d 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.h +++ b/engines/tsage/ringworld2/ringworld2_speakers.h @@ -282,6 +282,12 @@ public: virtual void proc15(); }; +class SpeakerQuinn500 : public SpeakerQuinn { +public: + virtual Common::String getClassName() { return "SpeakerQuinn500"; } + virtual void proc15(); +}; + class SpeakerQuinn1100 : public SpeakerQuinn { public: virtual Common::String getClassName() { return "SpeakerQuinn1100"; } @@ -420,6 +426,12 @@ public: virtual void proc15(); }; +class SpeakerSeeker500 : public SpeakerSeeker { +public: + virtual Common::String getClassName() { return "SpeakerSeeker500"; } + virtual void proc15(); +}; + class SpeakerSeeker1100 : public SpeakerSeeker { public: virtual Common::String getClassName() { return "SpeakerSeeker1100"; } @@ -504,7 +516,7 @@ public: class SpeakerSoldier : public VisualSpeaker { public: - SpeakerSoldier(int colour); + SpeakerSoldier(int color); virtual Common::String getClassName() { return "SpeakerSoldier"; } }; @@ -579,7 +591,7 @@ public: class SpeakerWebbster : public VisualSpeaker { public: - SpeakerWebbster(int colour); + SpeakerWebbster(int color); virtual Common::String getClassName() { return "SpeakerWebbster"; } }; diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index a273ec2a0b..db38862365 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -244,7 +244,7 @@ char const *const USE_INTERCEPTOR = "Do you want to use your interceptor card?"; char const *const USE_DOUBLE_AGENT = "Do you want to use your double agent?"; char const *const NEED_INSTRUCTIONS = "Do you want instructions?"; char const *const WRONG_ANSWER_MSG = "Wrong respond value sent."; -const byte k562CC[] = { +const byte scene1550JunkLocationsDefault[] = { 20, 7, 41, 6, 3, 6, 42, 11, 10, 15, 43, 6, @@ -374,7 +374,7 @@ const byte k562CC[] = { 28, 18, 21, 1 }; -const byte k5A4D6[] = { +const byte scene1550AreaMap[] = { 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, @@ -409,7 +409,7 @@ const byte k5A76D[] = { 3, 3, 3, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; -const byte k5A78A[] = {0, 8, 15, 16, 12, 7, 18, 17, 13, 6, 19, 20, 14, 5, 11, 10, 9}; +const byte scene1550JunkRegions[] = {0, 8, 15, 16, 12, 7, 18, 17, 13, 6, 19, 20, 14, 5, 11, 10, 9}; const byte k5A79B[] = { 23, 3, 1, 23, 4, 1, diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index e3daf73333..8c21147191 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -199,13 +199,13 @@ extern char const *const NEED_INSTRUCTIONS; extern char const *const WRONG_ANSWER_MSG; // Scene 1550 arrays of constants -extern const byte k562CC[]; -extern const byte k5A4D6[]; +extern const byte scene1550JunkLocationsDefault[]; +extern const byte scene1550AreaMap[]; extern const byte k5A72E[]; extern const byte k5A73F[]; extern const byte k5A750[]; extern const byte k5A76D[]; -extern const byte k5A78A[]; +extern const byte scene1550JunkRegions[]; extern const byte k5A79B[]; extern const byte k5A7F6[]; diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp index c0ebb804d2..09cc2fd56d 100644 --- a/engines/tsage/user_interface.cpp +++ b/engines/tsage/user_interface.cpp @@ -454,7 +454,7 @@ void UIElements::add(UIElement *obj) { /** * Handles updating the visual inventory in the user interface */ -void UIElements::updateInventory() { +void UIElements::updateInventory(int objectNumber) { switch (g_vm->getGameID()) { case GType_BlueForce: // Update the score @@ -483,6 +483,17 @@ void UIElements::updateInventory() { else if (_slotStart > (lastPage - 1)) _slotStart = 0; + // Handle changing the page, if necessary, to ensure an optionally supplied + // object number will be on-screen + if (objectNumber != 0) { + for (uint idx = 0; idx < _itemList.size(); ++idx) { + if (_itemList[idx] == objectNumber) { + _slotStart = idx / 4; + break; + } + } + } + // Handle refreshing slot graphics UIInventorySlot *slotList[4] = { &_slot1, &_slot2, &_slot3, &_slot4 }; diff --git a/engines/tsage/user_interface.h b/engines/tsage/user_interface.h index 0fbfc5a00f..d06dccd9a4 100644 --- a/engines/tsage/user_interface.h +++ b/engines/tsage/user_interface.h @@ -137,7 +137,7 @@ public: virtual void process(Event &event); void setup(const Common::Point &pt); - void updateInventory(); + void updateInventory(int objectNumber = 0); void addScore(int amount); void scrollInventory(bool isLeft); |