[Scummvm-cvs-logs] scummvm master -> c878731937a39f56cc63ef56d2190d2e02caa2d7
Strangerke
Strangerke at scummvm.org
Thu Oct 16 07:59:19 CEST 2014
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c878731937 TSAGE: Move Air Duct and Vampire lair mazes in separate source files
Commit: c878731937a39f56cc63ef56d2190d2e02caa2d7
https://github.com/scummvm/scummvm/commit/c878731937a39f56cc63ef56d2190d2e02caa2d7
Author: Strangerke (strangerke at scummvm.org)
Date: 2014-10-16T07:56:48+02:00
Commit Message:
TSAGE: Move Air Duct and Vampire lair mazes in separate source files
Changed paths:
A engines/tsage/ringworld2/ringworld2_airduct.cpp
A engines/tsage/ringworld2/ringworld2_airduct.h
A engines/tsage/ringworld2/ringworld2_vampire.cpp
A engines/tsage/ringworld2/ringworld2_vampire.h
engines/tsage/module.mk
engines/tsage/ringworld2/ringworld2_logic.cpp
engines/tsage/ringworld2/ringworld2_scenes1.cpp
engines/tsage/ringworld2/ringworld2_scenes1.h
diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk
index 3fc30f9..d62f398 100644
--- a/engines/tsage/module.mk
+++ b/engines/tsage/module.mk
@@ -35,14 +35,16 @@ MODULE_OBJS := \
ringworld/ringworld_scenes8.o \
ringworld/ringworld_scenes10.o \
ringworld/ringworld_speakers.o \
+ ringworld2/ringworld2_airduct.o \
ringworld2/ringworld2_dialogs.o \
ringworld2/ringworld2_logic.o \
+ ringworld2/ringworld2_outpost.o \
ringworld2/ringworld2_scenes0.o \
ringworld2/ringworld2_scenes1.o \
ringworld2/ringworld2_scenes2.o \
ringworld2/ringworld2_scenes3.o \
- ringworld2/ringworld2_outpost.o \
ringworld2/ringworld2_speakers.o \
+ ringworld2/ringworld2_vampire.o \
saveload.o \
scenes.o \
sound.o \
diff --git a/engines/tsage/ringworld2/ringworld2_airduct.cpp b/engines/tsage/ringworld2/ringworld2_airduct.cpp
new file mode 100644
index 0000000..dc43dba
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_airduct.cpp
@@ -0,0 +1,914 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "graphics/cursorman.h"
+
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+#include "tsage/ringworld2/ringworld2_airduct.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+/*--------------------------------------------------------------------------
+ * Scene 1200 - Air Ducts Maze
+ *
+ *--------------------------------------------------------------------------*/
+
+Scene1200::Scene1200() {
+ _nextCrawlDirection = 0;
+ _field414 = 0;
+ _field416 = 0;
+ _field418 = 0;
+ _field41A = 0;
+ _fixupMaze = false;
+}
+
+void Scene1200::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+
+ s.syncAsSint16LE(_nextCrawlDirection);
+ s.syncAsSint16LE(_field414);
+ s.syncAsSint16LE(_field416);
+ s.syncAsSint16LE(_field418);
+ s.syncAsSint16LE(_field41A);
+ s.syncAsSint16LE(_fixupMaze);
+}
+
+Scene1200::LaserPanel::LaserPanel() {
+}
+
+void Scene1200::LaserPanel::Jumper::init(int state) {
+ _state = state;
+
+ SceneActor::postInit();
+ setup(1003, 1, 1);
+ fixPriority(255);
+
+ switch (_state) {
+ case 1:
+ switch (R2_GLOBALS._ductMazePanel1State) {
+ case 1:
+ setFrame2(2);
+ setPosition(Common::Point(129, 101));
+ break;
+ case 2:
+ setFrame2(3);
+ setPosition(Common::Point(135, 95));
+ break;
+ default:
+ break;
+ }
+ break;
+ case 2:
+ switch (R2_GLOBALS._ductMazePanel2State) {
+ case 1:
+ setFrame2(2);
+ setPosition(Common::Point(152, 101));
+ break;
+ case 2:
+ setFrame2(3);
+ setPosition(Common::Point(158, 122));
+ break;
+ case 3:
+ setFrame2(3);
+ setPosition(Common::Point(135, 122));
+ break;
+ default:
+ break;
+ }
+ break;
+ case 3:
+ switch (R2_GLOBALS._ductMazePanel3State) {
+ case 1:
+ setFrame2(3);
+ setPosition(Common::Point(158, 95));
+ break;
+ case 2:
+ setFrame2(2);
+ setPosition(Common::Point(175, 101));
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ setDetails(1200, 12, -1, -1, 2, (SceneItem *) NULL);
+}
+
+bool Scene1200::LaserPanel::Jumper::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ R2_GLOBALS._sound2.play(260);
+ switch (_state) {
+ case 1:
+ if (R2_GLOBALS._ductMazePanel1State == 1) {
+ R2_GLOBALS._ductMazePanel1State = 2;
+ setFrame2(3);
+ setPosition(Common::Point(135, 95));
+ } else {
+ R2_GLOBALS._ductMazePanel1State = 1;
+ setFrame2(2);
+ setPosition(Common::Point(129, 101));
+ }
+ break;
+ case 2:
+ ++R2_GLOBALS._ductMazePanel2State;
+ if (R2_GLOBALS._ductMazePanel2State == 4)
+ R2_GLOBALS._ductMazePanel2State = 1;
+
+ switch (R2_GLOBALS._ductMazePanel2State) {
+ case 1:
+ setFrame2(2);
+ setPosition(Common::Point(152, 101));
+ break;
+ case 2:
+ setFrame2(3);
+ setPosition(Common::Point(158, 122));
+ break;
+ case 3:
+ setFrame2(3);
+ setPosition(Common::Point(135, 122));
+ break;
+ default:
+ break;
+ }
+ break;
+ case 3:
+ if (R2_GLOBALS._ductMazePanel3State == 1) {
+ R2_GLOBALS._ductMazePanel3State = 2;
+ setFrame2(2);
+ setPosition(Common::Point(175, 101));
+ } else {
+ R2_GLOBALS._ductMazePanel3State = 1;
+ setFrame2(3);
+ setPosition(Common::Point(158, 95));
+ }
+ break;
+ default:
+ break;
+ }
+
+ Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
+ scene->_field418 = 0;
+
+ if ((R2_GLOBALS._ductMazePanel1State == 1) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
+ scene->_field418 = 1;
+ else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
+ scene->_field418 = 2;
+ else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 2))
+ scene->_field418 = 3;
+ else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 3) && (R2_GLOBALS._ductMazePanel3State == 1))
+ scene->_field418 = 4;
+
+ return true;
+}
+
+void Scene1200::LaserPanel::postInit(SceneObjectList *OwnerList) {
+ Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
+
+ scene->_field41A = 1;
+ R2_GLOBALS._events.setCursor(CURSOR_USE);
+ setup2(1003, 1, 1, 100, 40);
+ setup3(1200, 11, -1, -1);
+ R2_GLOBALS._sound2.play(259);
+ _jumper1.init(1);
+ _jumper2.init(2);
+ _jumper3.init(3);
+
+ R2_GLOBALS._player._canWalk = false;
+}
+
+void Scene1200::LaserPanel::remove() {
+ Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
+
+ scene->_field41A = 0;
+ scene->_sceneAreas.remove(&_jumper1);
+ scene->_sceneAreas.remove(&_jumper2);
+ scene->_sceneAreas.remove(&_jumper3);
+ _jumper1.remove();
+ _jumper2.remove();
+ _jumper3.remove();
+
+ ModalWindow::remove();
+ R2_GLOBALS._player._canWalk = true;
+}
+
+void Scene1200::postInit(SceneObjectList *OwnerList) {
+ loadScene(1200);
+ SceneExt::postInit();
+
+ if (R2_GLOBALS._sceneManager._previousScene < 3200)
+ R2_GLOBALS._sound1.play(257);
+
+ _nextCrawlDirection = CRAWL_EAST;
+ _field414 = 0;
+ _field416 = 0;
+ _field418 = 0;
+ _field41A = 0;
+
+ if ((R2_GLOBALS._ductMazePanel1State == 1) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
+ _field418 = 1;
+ else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
+ _field418 = 2;
+ else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 2))
+ _field418 = 3;
+ else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 3) && (R2_GLOBALS._ductMazePanel3State == 1))
+ _field418 = 4;
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._player.setup(3156, 1, 6);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 70));
+ R2_GLOBALS._player._numFrames = 10;
+ R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 1200;
+
+ _actor1.postInit();
+ _actor1.hide();
+
+ _mazeUI.setDisplayBounds(Rect(110, 20, 210, 120));
+
+ _mazeUI.postInit();
+ _mazeUI.load(1);
+ _mazeUI.setMazePosition(R2_GLOBALS._ventCellPos);
+
+ R2_GLOBALS._player.enableControl();
+ _item1.setDetails(Rect(0, 0, 320, 200), 1200, 0, 1, 2, 1, NULL);
+}
+
+void Scene1200::signal() {
+ switch (_sceneMode++) {
+ case 1:
+ // No break on purpose
+ case 1200:
+ // No break on purpose
+ case 1201:
+ // No break on purpose
+ case 1202:
+ // No break on purpose
+ case 1203:
+ R2_GLOBALS._player.enableControl();
+ // CHECKME: The original is calling _eventManager.waitEvent();
+ _sceneMode = 2;
+ break;
+ case 10:
+ _field416 = 1;
+ _field414 = 6;
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.setStrip(1);
+ R2_GLOBALS._player.setFrame(5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 11:
+ // No break on purpose
+ case 21:
+ // No break on purpose
+ case 31:
+ // No break on purpose
+ case 41:
+ _field416 = 0;
+ break;
+ case 12:
+ _field414 = 14;
+ R2_GLOBALS._player._numFrames = 10;
+ R2_GLOBALS._player.setup(3155, 1, 4);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 70));
+ R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
+ break;
+ case 13:
+ // No break on purpose
+ case 16:
+ // No break on purpose
+ case 23:
+ // No break on purpose
+ case 26:
+ // No break on purpose
+ case 33:
+ // No break on purpose
+ case 36:
+ // No break on purpose
+ case 43:
+ // No break on purpose
+ case 46:
+ R2_GLOBALS._player.setFrame(4);
+ _sceneMode = 1;
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 15:
+ // No break on purpose
+ case 25:
+ // No break on purpose
+ case 35:
+ // No break on purpose
+ case 45:
+ _field414 = 20;
+ R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
+ break;
+ case 20:
+ _field416 = 1;
+ _field414 = 6;
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.setStrip(2);
+ R2_GLOBALS._player.setFrame(5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 22:
+ _field414 = 14;
+ R2_GLOBALS._player._numFrames = 10;
+ R2_GLOBALS._player.setup(3155, 2, 4);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 70));
+ R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
+ break;
+ case 30:
+ _field416 = 1;
+ _field414 = 6;
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.setStrip(3);
+ R2_GLOBALS._player.setFrame(5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 32:
+ _field414 = 14;
+ R2_GLOBALS._player._numFrames = 10;
+ R2_GLOBALS._player.setup(3155, 3, 4);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 70));
+ R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
+ break;
+ case 40:
+ _field416 = 1;
+ _field414 = 6;
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.setStrip(4);
+ R2_GLOBALS._player.setFrame(5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 42:
+ _field414 = 14;
+ R2_GLOBALS._player._numFrames = 10;
+ R2_GLOBALS._player.setup(3155, 4, 4);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 70));
+ R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
+ break;
+ case 50:
+ // No break on purpose
+ case 55:
+ // No break on purpose
+ case 60:
+ R2_GLOBALS._player.setup(3156, 5, 1);
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 51:
+ // No break on purpose
+ case 56:
+ // No break on purpose
+ case 117:
+ R2_GLOBALS._player.setup(3157, 1, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 52:
+ // No break on purpose
+ case 82:
+ // No break on purpose
+ case 118:
+ R2_GLOBALS._player.setup(3156, 3, 6);
+ _sceneMode = 1;
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 57:
+ // No break on purpose
+ case 91:
+ // No break on purpose
+ case 96:
+ R2_GLOBALS._player.setup(3157, 2, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 58:
+ // No break on purpose
+ case 92:
+ // No break on purpose
+ case 122:
+ R2_GLOBALS._player.setup(3156, 2, 6);
+ _sceneMode = 1;
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 61:
+ R2_GLOBALS._player.setup(3157, 4, 5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 62:
+ // No break on purpose
+ case 72:
+ // No break on purpose
+ case 98:
+ R2_GLOBALS._player.setup(3156, 4, 6);
+ _sceneMode = 1;
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 70:
+ // No break on purpose
+ case 75:
+ // No break on purpose
+ case 80:
+ R2_GLOBALS._player.setup(3156, 6, 1);
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 71:
+ // No break on purpose
+ case 76:
+ // No break on purpose
+ case 97:
+ R2_GLOBALS._player.setup(3157, 3, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 77:
+ // No break on purpose
+ case 111:
+ // No break on purpose
+ case 116:
+ R2_GLOBALS._player.setup(3157, 4, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 78:
+ // No break on purpose
+ case 102:
+ // No break on purpose
+ case 112:
+ R2_GLOBALS._player.setup(3156, 1, 6);
+ _sceneMode = 1;
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 81:
+ R2_GLOBALS._player.setup(3157, 2, 5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 90:
+ // No break on purpose
+ case 95:
+ // No break on purpose
+ case 100:
+ R2_GLOBALS._player.setup(3156, 7, 1);
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 101:
+ R2_GLOBALS._player.setup(3157, 1, 5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 110:
+ // No break on purpose
+ case 115:
+ // No break on purpose
+ case 120:
+ R2_GLOBALS._player.setup(3156, 8, 1);
+ R2_GLOBALS._player._numFrames = 5;
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 121:
+ R2_GLOBALS._player.setup(3157, 3, 5);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ default:
+ // CHECKME: The original is walling _eventManager.waitEvent();
+ _sceneMode = 2;
+ break;
+ }
+}
+
+void Scene1200::process(Event &event) {
+ if (_field414 != 0)
+ return;
+
+ Scene::process(event);
+
+ if (!R2_GLOBALS._player._canWalk)
+ return;
+
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ Common::Point cellPos = R2_GLOBALS._ventCellPos;
+ _mazeUI.pixelToCellXY(cellPos);
+
+ int cellId = _mazeUI.getCellFromPixelXY(event.mousePos);
+ switch (R2_GLOBALS._events.getCursor()) {
+ case CURSOR_WALK:
+ event.handled = true;
+ if ((event.mousePos.x > 179) && (event.mousePos.x < 210) && (event.mousePos.y > 50) && (event.mousePos.y < 89))
+ startCrawling(CRAWL_EAST);
+
+ if ((event.mousePos.x > 109) && (event.mousePos.x < 140) && (event.mousePos.y > 50) && (event.mousePos.y < 89))
+ startCrawling(CRAWL_WEST);
+
+ if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 89) && (event.mousePos.y < 120))
+ startCrawling(CRAWL_SOUTH);
+
+ if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 19) && (event.mousePos.y < 50))
+ startCrawling(CRAWL_NORTH);
+ break;
+ case CURSOR_USE:
+ if (cellId > 36) {
+ if ( ((cellPos.x == 3) && (cellPos.y == 33))
+ || ((cellPos.x == 7) && (cellPos.y == 33))
+ || ((cellPos.x == 33) && (cellPos.y == 41))
+ || ((cellPos.x == 5) && (cellPos.y == 5))
+ || ((cellPos.x == 13) && (cellPos.y == 21))
+ || ((cellPos.x == 17) && (cellPos.y == 21))
+ || ((cellPos.x == 17) && (cellPos.y == 5))
+ || ((cellPos.x == 17) && (cellPos.y == 9))
+ || ((cellPos.x == 29) && (cellPos.y == 17))
+ || ((cellPos.x == 33) && (cellPos.y == 17))
+ || ((cellPos.x == 35) && (cellPos.y == 17))
+ || ((cellPos.x == 41) && (cellPos.y == 21)) ) {
+ _laserPanel.postInit();
+ event.handled = true;
+ }
+ }
+
+ if ((cellId == 1) || (cellId == 4) || (cellId == 11) || (cellId == 14)) {
+ if ( ((cellPos.x == 3) && (cellPos.y == 9))
+ || ((cellPos.x == 11) && (cellPos.y == 27))
+ || ((cellPos.x == 17) && (cellPos.y == 7))
+ || ((cellPos.x == 17) && (cellPos.y == 27))
+ || ((cellPos.x == 17) && (cellPos.y == 33))
+ || (cellPos.x == 33) ) {
+ switch (cellPos.x) {
+ case 3:
+ R2_GLOBALS._sceneManager.changeScene(3150);
+ break;
+ case 33:
+ if (R2_GLOBALS._scientistConvIndex >= 4)
+ R2_GLOBALS._sceneManager.changeScene(3250);
+ else
+ SceneItem::display(1200, 6, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, LIST_END);
+ break;
+ default:
+ SceneItem::display(1200, 5, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, LIST_END);
+ break;
+ }
+ event.handled = true;
+ }
+ }
+ break;
+ case CURSOR_LOOK:
+ if ((cellId == 1) || (cellId == 4) || (cellId == 11) || (cellId == 14)) {
+ event.handled = true;
+ switch (cellPos.x) {
+ case 3:
+ // It was your cell.
+ SceneItem::display(1200, 8, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ break;
+ case 9:
+ R2_GLOBALS._sceneManager.changeScene(3240);
+ break;
+ case 11:
+ if (cellPos.y == 27)
+ R2_GLOBALS._sceneManager.changeScene(3210);
+ else
+ // A vent grill
+ SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ break;
+ case 17:
+ switch (cellPos.y) {
+ case 5:
+ R2_GLOBALS._sceneManager.changeScene(3230);
+ break;
+ case 21:
+ R2_GLOBALS._sceneManager.changeScene(3220);
+ break;
+ case 33:
+ R2_GLOBALS._sceneManager.changeScene(3200);
+ break;
+ default:
+ // A vent grill
+ SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ break;
+ }
+ break;
+ case 33:
+ R2_GLOBALS._sceneManager.changeScene(3245);
+ break;
+ default:
+ SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ break;
+ }
+ }
+ if (cellId > 36) {
+ // "An anti-pest laser"
+ event.handled = true;
+ SceneItem::display(1200, 9, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ }
+ break;
+ case CURSOR_TALK:
+ event.handled = true;
+ break;
+ default:
+ return;
+ }
+ } else if (event.eventType == EVENT_KEYPRESS) {
+ if (_field414) {
+ event.handled = false;
+ return;
+ }
+
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_KP8:
+ case Common::KEYCODE_UP:
+ startCrawling(CRAWL_NORTH);
+ break;
+ case Common::KEYCODE_KP4:
+ case Common::KEYCODE_LEFT:
+ startCrawling(CRAWL_WEST);
+ break;
+ case Common::KEYCODE_KP6:
+ case Common::KEYCODE_RIGHT:
+ startCrawling(CRAWL_EAST);
+ break;
+ case Common::KEYCODE_KP2:
+ case Common::KEYCODE_DOWN:
+ startCrawling(CRAWL_SOUTH);
+ break;
+ default:
+ event.handled = false;
+ return;
+ break;
+ }
+ } else
+ return;
+}
+
+void Scene1200::dispatch() {
+ Rect tmpRect;
+ Scene::dispatch();
+
+ if (_fixupMaze) {
+ _mazeUI.setMazePosition(R2_GLOBALS._ventCellPos);
+ //_mazeUI.draw();
+ _fixupMaze = false;
+ }
+
+ if (_field414 != 0) {
+ tmpRect.set(110, 20, 210, 120);
+ _field414--;
+
+ switch (_nextCrawlDirection) {
+ case CRAWL_EAST:
+ R2_GLOBALS._ventCellPos.x += 2;
+ break;
+ case CRAWL_WEST:
+ R2_GLOBALS._ventCellPos.x -= 2;
+ break;
+ case CRAWL_SOUTH:
+ R2_GLOBALS._ventCellPos.y += 2;
+ break;
+ case CRAWL_NORTH:
+ R2_GLOBALS._ventCellPos.y -= 2;
+ break;
+ default:
+ break;
+ }
+
+ _mazeUI.setMazePosition(R2_GLOBALS._ventCellPos);
+ //_mazeUI.draw();
+
+ if (_field416 != 0) {
+ switch(_nextCrawlDirection) {
+ case CRAWL_EAST:
+ R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x - 2, R2_GLOBALS._player._position.y));
+ break;
+ case CRAWL_WEST:
+ R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x + 2, R2_GLOBALS._player._position.y));
+ break;
+ case CRAWL_SOUTH:
+ R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 2));
+ break;
+ case CRAWL_NORTH:
+ R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 2));
+ break;
+ default:
+ break;
+ }
+ }
+ if (_field414 == 0) {
+ if (_field416 == 0)
+ R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL);
+ signal();
+ }
+ }
+}
+
+void Scene1200::saveCharacter(int characterIndex) {
+ R2_GLOBALS._sound1.fadeOut2(NULL);
+ SceneExt::saveCharacter(characterIndex);
+}
+
+void Scene1200::startCrawling(CrawlDirection dir) {
+ Common::Point cellPos = R2_GLOBALS._ventCellPos;
+ _mazeUI.pixelToCellXY(cellPos);
+
+ switch (dir) {
+ case CRAWL_EAST:
+ if ( ((_mazeUI.getCellFromPixelXY(Common::Point(200, 50)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(200, 88)) > 36))
+ && ( ((cellPos.x == 3) && (cellPos.y == 33) && (_field418 != 4))
+ || ((cellPos.x == 13) && (cellPos.y == 21) && (_field418 != 2))
+ || ((cellPos.x == 29) && (cellPos.y == 17) && (_field418 != 1))
+ || ((cellPos.x == 33) && (cellPos.y == 41)) )
+ ) {
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 1200;
+ setAction(&_sequenceManager, this, 1200, &_actor1, NULL);
+ } else if (_mazeUI.getCellFromPixelXY(Common::Point(200, 69)) == 36) {
+ switch (_nextCrawlDirection) {
+ case CRAWL_EAST:
+ if (R2_GLOBALS._player._visage == 3155)
+ _sceneMode = 15;
+ else
+ _sceneMode = 10;
+ break;
+ case CRAWL_WEST:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 76;
+ else
+ _sceneMode = 75;
+ break;
+ case CRAWL_SOUTH:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 101;
+ else
+ _sceneMode = 100;
+ break;
+ case CRAWL_NORTH:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 111;
+ else
+ _sceneMode = 110;
+ break;
+ default:
+ break;
+ }
+ R2_GLOBALS._player.disableControl();
+ _nextCrawlDirection = 1;
+ signal();
+ }
+ break;
+ case CRAWL_WEST:
+ if ( ((_mazeUI.getCellFromPixelXY(Common::Point(120, 50)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(120, 88)) > 36))
+ && ( ((cellPos.x == 7) && (cellPos.y == 33) && (_field418 != 4))
+ || ((cellPos.x == 17) && (cellPos.y == 21) && (_field418 != 2))
+ || ((cellPos.x == 33) && (cellPos.y == 17) && (_field418 != 1))
+ || ((cellPos.x == 5) && (cellPos.y == 5)) )
+ ) {
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 1201;
+ setAction(&_sequenceManager, this, 1201, &_actor1, NULL);
+ } else if (_mazeUI.getCellFromPixelXY(Common::Point(120, 69)) == 36) {
+ switch (_nextCrawlDirection) {
+ case CRAWL_EAST:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 56;
+ else
+ _sceneMode = 55;
+ break;
+ case CRAWL_WEST:
+ if (R2_GLOBALS._player._visage == 3155)
+ _sceneMode = 25;
+ else
+ _sceneMode = 20;
+ break;
+ case CRAWL_SOUTH:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 91;
+ else
+ _sceneMode = 90;
+ break;
+ case CRAWL_NORTH:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 121;
+ else
+ _sceneMode = 120;
+ break;
+ default:
+ break;
+ }
+ R2_GLOBALS._player.disableControl();
+ _nextCrawlDirection = 2;
+ signal();
+ }
+ break;
+ case CRAWL_SOUTH:
+ if ( ((_mazeUI.getCellFromPixelXY(Common::Point(140, 110)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(178, 110)) > 36))
+ && ( ((cellPos.x == 17) && (cellPos.y == 5) && (_field418 != 3))
+ || ((cellPos.x == 41) && (cellPos.y == 21)) )
+ ) {
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 1203;
+ setAction(&_sequenceManager, this, 1203, &_actor1, NULL);
+ } else if (_mazeUI.getCellFromPixelXY(Common::Point(160, 110)) == 36) {
+ switch (_nextCrawlDirection) {
+ case CRAWL_EAST:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 51;
+ else
+ _sceneMode = 50;
+ break;
+ case CRAWL_WEST:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 81;
+ else
+ _sceneMode = 80;
+ break;
+ case CRAWL_SOUTH:
+ if (R2_GLOBALS._player._visage == 3155)
+ _sceneMode = 35;
+ else
+ _sceneMode = 30;
+ break;
+ case CRAWL_NORTH:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 116;
+ else
+ _sceneMode = 115;
+ break;
+ default:
+ break;
+ }
+ R2_GLOBALS._player.disableControl();
+ _nextCrawlDirection = 3;
+ signal();
+ }
+ break;
+ case CRAWL_NORTH:
+ if ( ((_mazeUI.getCellFromPixelXY(Common::Point(140, 30)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(178, 30)) > 36))
+ && ( ((cellPos.x == 17) && (cellPos.y == 9) && (_field418 != 3))
+ || ((cellPos.x == 35) && (cellPos.y == 17)) )
+ ) {
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 1202;
+ setAction(&_sequenceManager, this, 1202, &_actor1, NULL);
+ } else if (_mazeUI.getCellFromPixelXY(Common::Point(160, 30)) == 36) {
+ switch (_nextCrawlDirection) {
+ case CRAWL_EAST:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 61;
+ else
+ _sceneMode = 60;
+ break;
+ case CRAWL_WEST:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 71;
+ else
+ _sceneMode = 70;
+ break;
+ case CRAWL_SOUTH:
+ if (R2_GLOBALS._player._visage == 3156)
+ _sceneMode = 96;
+ else
+ _sceneMode = 95;
+ break;
+ case CRAWL_NORTH:
+ if (R2_GLOBALS._player._visage == 3155)
+ _sceneMode = 45;
+ else
+ _sceneMode = 40;
+ break;
+ default:
+ _sceneMode = 1;
+ R2_GLOBALS._player.setup(3156, 4, 6);
+ break;
+ }
+ R2_GLOBALS._player.disableControl();
+ _nextCrawlDirection = 4;
+ signal();
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+} // End of namespace Ringworld2
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_airduct.h b/engines/tsage/ringworld2/ringworld2_airduct.h
new file mode 100644
index 0000000..4a89f58
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_airduct.h
@@ -0,0 +1,90 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD2_AIRDUCT_H
+#define TSAGE_RINGWORLD2_AIRDUCT_H
+
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+#include "tsage/ringworld2/ringworld2_logic.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+using namespace TsAGE;
+
+class Scene1200 : public SceneExt {
+ enum CrawlDirection { CRAWL_EAST = 1, CRAWL_WEST = 2, CRAWL_SOUTH = 3, CRAWL_NORTH = 4 };
+
+ class LaserPanel: public ModalWindow {
+ public:
+ class Jumper : public SceneActorExt {
+ public:
+ void init(int state);
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ Jumper _jumper1;
+ Jumper _jumper2;
+ Jumper _jumper3;
+
+ LaserPanel();
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ };
+
+public:
+ NamedHotspot _item1;
+ SceneActor _actor1;
+ LaserPanel _laserPanel;
+ MazeUI _mazeUI;
+ SequenceManager _sequenceManager;
+
+ int _nextCrawlDirection;
+ int _field414;
+ int _field416;
+ int _field418;
+ int _field41A;
+ bool _fixupMaze;
+
+ Scene1200();
+ void synchronize(Serializer &s);
+
+ void startCrawling(CrawlDirection dir);
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void saveCharacter(int characterIndex);
+};
+
+} // End of namespace Ringworld2
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index a04fd56..d245419 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -32,7 +32,9 @@
#include "tsage/ringworld2/ringworld2_scenes1.h"
#include "tsage/ringworld2/ringworld2_scenes2.h"
#include "tsage/ringworld2/ringworld2_scenes3.h"
+#include "tsage/ringworld2/ringworld2_airduct.h"
#include "tsage/ringworld2/ringworld2_outpost.h"
+#include "tsage/ringworld2/ringworld2_vampire.h"
namespace TsAGE {
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index 51879f1..81dc05e 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -1321,1249 +1321,827 @@ void Scene1100::saveCharacter(int characterIndex) {
}
/*--------------------------------------------------------------------------
- * Scene 1200 - Air Ducts Maze
+ * Scene 1500 - Cutscene: Ship landing
*
*--------------------------------------------------------------------------*/
-Scene1200::Scene1200() {
- _nextCrawlDirection = 0;
- _field414 = 0;
- _field416 = 0;
- _field418 = 0;
- _field41A = 0;
- _fixupMaze = false;
-}
+void Scene1500::postInit(SceneObjectList *OwnerList) {
+ loadScene(1500);
+ R2_GLOBALS._uiElements._active = false;
+ setZoomPercents(170, 13, 240, 100);
+ SceneExt::postInit();
+ R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
-void Scene1200::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
+ scalePalette(65, 65, 65);
- s.syncAsSint16LE(_nextCrawlDirection);
- s.syncAsSint16LE(_field414);
- s.syncAsSint16LE(_field416);
- s.syncAsSint16LE(_field418);
- s.syncAsSint16LE(_field41A);
- s.syncAsSint16LE(_fixupMaze);
-}
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.hide();
+ R2_GLOBALS._player.disableControl();
+
+ _starshipShadow.postInit();
+ _starshipShadow.setup(1401, 1, 1);
+ _starshipShadow._effect = EFFECT_SHADOW_MAP;
+ _starshipShadow.fixPriority(10);
+ _starshipShadow._shadowMap = _shadowPaletteMap;
+
+ _starship.postInit();
+ _starship.setup(1400, 1, 1);
+ _starship._moveDiff = Common::Point(1, 1);
+ _starship._linkedActor = &_starshipShadow;
+
+ if (R2_GLOBALS._sceneManager._previousScene != 1010) {
+ _smallShipShadow.postInit();
+ _smallShipShadow.setup(1401, 2, 1);
+ _smallShipShadow._effect = EFFECT_SHADOW_MAP;
+ _smallShipShadow.fixPriority(10);
+ _smallShipShadow._shadowMap = _shadowPaletteMap;
+
+ _smallShip.postInit();
+ _smallShip._moveRate = 30;
+ _smallShip._moveDiff = Common::Point(1, 1);
+ _smallShip._linkedActor = &_smallShipShadow;
+ }
+
+ if (R2_GLOBALS._sceneManager._previousScene == 300) {
+ _starship.setPosition(Common::Point(189, 139), 5);
+
+ _smallShip.setup(1400, 1, 2);
+ _smallShip.setPosition(Common::Point(148, 108), 0);
+
+ _sceneMode = 20;
+ R2_GLOBALS._sound1.play(110);
+ } else if (R2_GLOBALS._sceneManager._previousScene == 1550) {
+ _starship.setPosition(Common::Point(189, 139), 5);
+
+ _smallShip.setup(1400, 2, 1);
+ _smallShip.changeZoom(-1);
+ _smallShip.setPosition(Common::Point(298, 258), 5);
+
+ _sceneMode = 10;
+ R2_GLOBALS._sound1.play(106);
+ } else {
+ _starship.setPosition(Common::Point(289, 239), -30);
+ _sceneMode = 0;
+ R2_GLOBALS._sound1.play(102);
+ }
-Scene1200::LaserPanel::LaserPanel() {
+ signal();
}
-void Scene1200::LaserPanel::Jumper::init(int state) {
- _state = state;
+void Scene1500::remove() {
+ R2_GLOBALS._uiElements._active = true;
+ R2_GLOBALS._uiElements._visible = true;
- SceneActor::postInit();
- setup(1003, 1, 1);
- fixPriority(255);
+ SceneExt::remove();
+}
- switch (_state) {
+void Scene1500::signal() {
+ switch(_sceneMode++) {
+ case 0:
+ R2_GLOBALS.setFlag(25);
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ // No break on purpose
case 1:
- switch (R2_GLOBALS._ductMazePanel1State) {
- case 1:
- setFrame2(2);
- setPosition(Common::Point(129, 101));
- break;
- case 2:
- setFrame2(3);
- setPosition(Common::Point(135, 95));
- break;
- default:
- break;
+ if (_starship._yDiff < 50) {
+ _starship.setPosition(Common::Point(289, 239), _starship._yDiff + 1);
+ _sceneMode = 1;
}
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
break;
- case 2:
- switch (R2_GLOBALS._ductMazePanel2State) {
- case 1:
- setFrame2(2);
- setPosition(Common::Point(152, 101));
- break;
- case 2:
- setFrame2(3);
- setPosition(Common::Point(158, 122));
- break;
- case 3:
- setFrame2(3);
- setPosition(Common::Point(135, 122));
- break;
- default:
- break;
+ case 2: {
+ Common::Point pt(189, 139);
+ NpcMover *mover = new NpcMover();
+ _starship.addMover(mover, &pt, this);
}
break;
case 3:
- switch (R2_GLOBALS._ductMazePanel3State) {
- case 1:
- setFrame2(3);
- setPosition(Common::Point(158, 95));
- break;
- case 2:
- setFrame2(2);
- setPosition(Common::Point(175, 101));
- break;
- default:
- break;
+ if (_starship._yDiff > 5) {
+ _starship.setPosition(Common::Point(189, 139), _starship._yDiff - 1);
+ _sceneMode = 3;
}
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
break;
- default:
+ case 13:
+ R2_GLOBALS._player._characterIndex = R2_MIRANDA;
+ // No break on purpose
+ case 4:
+ R2_GLOBALS._sceneManager.changeScene(300);
break;
- }
-
- setDetails(1200, 12, -1, -1, 2, (SceneItem *) NULL);
-}
-
-bool Scene1200::LaserPanel::Jumper::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- R2_GLOBALS._sound2.play(260);
- switch (_state) {
- case 1:
- if (R2_GLOBALS._ductMazePanel1State == 1) {
- R2_GLOBALS._ductMazePanel1State = 2;
- setFrame2(3);
- setPosition(Common::Point(135, 95));
- } else {
- R2_GLOBALS._ductMazePanel1State = 1;
- setFrame2(2);
- setPosition(Common::Point(129, 101));
+ case 10:
+ // No break on purpose
+ case 20:
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 11: {
+ Common::Point pt(148, 108);
+ NpcMover *mover = new NpcMover();
+ _smallShip.addMover(mover, &pt, this);
}
break;
- case 2:
- ++R2_GLOBALS._ductMazePanel2State;
- if (R2_GLOBALS._ductMazePanel2State == 4)
- R2_GLOBALS._ductMazePanel2State = 1;
-
- switch (R2_GLOBALS._ductMazePanel2State) {
- case 1:
- setFrame2(2);
- setPosition(Common::Point(152, 101));
- break;
- case 2:
- setFrame2(3);
- setPosition(Common::Point(158, 122));
- break;
- case 3:
- setFrame2(3);
- setPosition(Common::Point(135, 122));
- break;
- default:
- break;
+ case 12:
+ setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
+ break;
+ case 21: {
+ Common::Point pt(-2, -42);
+ NpcMover *mover = new NpcMover();
+ _smallShip.addMover(mover, &pt, NULL);
+ signal();
}
break;
- case 3:
- if (R2_GLOBALS._ductMazePanel3State == 1) {
- R2_GLOBALS._ductMazePanel3State = 2;
- setFrame2(2);
- setPosition(Common::Point(175, 101));
- } else {
- R2_GLOBALS._ductMazePanel3State = 1;
- setFrame2(3);
- setPosition(Common::Point(158, 95));
+ case 22:
+ if (_starship._yDiff < 50) {
+ _starship.setPosition(Common::Point(189, 139), _starship._yDiff + 1);
+ _sceneMode = 22;
+ }
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 23: {
+ Common::Point pt(-13, -61);
+ NpcMover *mover = new NpcMover();
+ _starship.addMover(mover, &pt, this);
}
break;
+ case 24:
+ R2_GLOBALS._sceneManager.changeScene(1550);
+ break;
default:
break;
}
-
- Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
- scene->_field418 = 0;
-
- if ((R2_GLOBALS._ductMazePanel1State == 1) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
- scene->_field418 = 1;
- else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
- scene->_field418 = 2;
- else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 2))
- scene->_field418 = 3;
- else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 3) && (R2_GLOBALS._ductMazePanel3State == 1))
- scene->_field418 = 4;
-
- return true;
}
-void Scene1200::LaserPanel::postInit(SceneObjectList *OwnerList) {
- Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
-
- scene->_field41A = 1;
- R2_GLOBALS._events.setCursor(CURSOR_USE);
- setup2(1003, 1, 1, 100, 40);
- setup3(1200, 11, -1, -1);
- R2_GLOBALS._sound2.play(259);
- _jumper1.init(1);
- _jumper2.init(2);
- _jumper3.init(3);
+void Scene1500::dispatch() {
+ if (_sceneMode > 10) {
+ float yDiff = sqrt((float) (_smallShip._position.x * _smallShip._position.x) + (_smallShip._position.y * _smallShip._position.y));
+ if (yDiff > 6)
+ _smallShip.setPosition(_smallShip._position, (int) yDiff);
+ }
- R2_GLOBALS._player._canWalk = false;
+ Scene::dispatch();
}
-void Scene1200::LaserPanel::remove() {
- Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene;
-
- scene->_field41A = 0;
- scene->_sceneAreas.remove(&_jumper1);
- scene->_sceneAreas.remove(&_jumper2);
- scene->_sceneAreas.remove(&_jumper3);
- _jumper1.remove();
- _jumper2.remove();
- _jumper3.remove();
-
- ModalWindow::remove();
- R2_GLOBALS._player._canWalk = true;
-}
+/*--------------------------------------------------------------------------
+ * Scene 1525 - Cutscene - Ship
+ *
+ *--------------------------------------------------------------------------*/
-void Scene1200::postInit(SceneObjectList *OwnerList) {
- loadScene(1200);
+void Scene1525::postInit(SceneObjectList *OwnerList) {
+ loadScene(1525);
+ R2_GLOBALS._uiElements._active = false;
SceneExt::postInit();
- if (R2_GLOBALS._sceneManager._previousScene < 3200)
- R2_GLOBALS._sound1.play(257);
-
- _nextCrawlDirection = CRAWL_EAST;
- _field414 = 0;
- _field416 = 0;
- _field418 = 0;
- _field41A = 0;
-
- if ((R2_GLOBALS._ductMazePanel1State == 1) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
- _field418 = 1;
- else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1))
- _field418 = 2;
- else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 2))
- _field418 = 3;
- else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 3) && (R2_GLOBALS._ductMazePanel3State == 1))
- _field418 = 4;
-
R2_GLOBALS._player.postInit();
+ if (R2_GLOBALS._sceneManager._previousScene == 525)
+ R2_GLOBALS._player.setup(1525, 1, 1);
+ else
+ R2_GLOBALS._player.setup(1525, 1, 16);
+ R2_GLOBALS._player.setPosition(Common::Point(244, 148));
R2_GLOBALS._player.disableControl();
- R2_GLOBALS._player.setup(3156, 1, 6);
- R2_GLOBALS._player.setPosition(Common::Point(160, 70));
- R2_GLOBALS._player._numFrames = 10;
- R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 1200;
-
- _actor1.postInit();
- _actor1.hide();
-
- _mazeUI.setDisplayBounds(Rect(110, 20, 210, 120));
- _mazeUI.postInit();
- _mazeUI.load(1);
- _mazeUI.setMazePosition(R2_GLOBALS._ventCellPos);
-
- R2_GLOBALS._player.enableControl();
- _item1.setDetails(Rect(0, 0, 320, 200), 1200, 0, 1, 2, 1, NULL);
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
}
-void Scene1200::signal() {
+void Scene1525::signal() {
switch (_sceneMode++) {
- case 1:
- // No break on purpose
- case 1200:
- // No break on purpose
- case 1201:
- // No break on purpose
- case 1202:
- // No break on purpose
- case 1203:
- R2_GLOBALS._player.enableControl();
- // CHECKME: The original is calling _eventManager.waitEvent();
- _sceneMode = 2;
- break;
- case 10:
- _field416 = 1;
- _field414 = 6;
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.setStrip(1);
- R2_GLOBALS._player.setFrame(5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ case 0:
+ if (R2_GLOBALS._sceneManager._previousScene == 525)
+ setAction(&_sequenceManager, this, 1525, &R2_GLOBALS._player, NULL);
+ else
+ setAction(&_sequenceManager, this, 1526, &R2_GLOBALS._player, NULL);
break;
- case 11:
- // No break on purpose
- case 21:
- // No break on purpose
- case 31:
- // No break on purpose
- case 41:
- _field416 = 0;
+ case 1:
+ setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
break;
- case 12:
- _field414 = 14;
- R2_GLOBALS._player._numFrames = 10;
- R2_GLOBALS._player.setup(3155, 1, 4);
- R2_GLOBALS._player.setPosition(Common::Point(160, 70));
- R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
- break;
- case 13:
- // No break on purpose
- case 16:
- // No break on purpose
- case 23:
- // No break on purpose
- case 26:
- // No break on purpose
- case 33:
- // No break on purpose
- case 36:
- // No break on purpose
- case 43:
- // No break on purpose
- case 46:
- R2_GLOBALS._player.setFrame(4);
- _sceneMode = 1;
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 15:
- // No break on purpose
- case 25:
- // No break on purpose
- case 35:
- // No break on purpose
- case 45:
- _field414 = 20;
- R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
- break;
- case 20:
- _field416 = 1;
- _field414 = 6;
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.setStrip(2);
- R2_GLOBALS._player.setFrame(5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 22:
- _field414 = 14;
- R2_GLOBALS._player._numFrames = 10;
- R2_GLOBALS._player.setup(3155, 2, 4);
- R2_GLOBALS._player.setPosition(Common::Point(160, 70));
- R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
- break;
- case 30:
- _field416 = 1;
- _field414 = 6;
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.setStrip(3);
- R2_GLOBALS._player.setFrame(5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 32:
- _field414 = 14;
- R2_GLOBALS._player._numFrames = 10;
- R2_GLOBALS._player.setup(3155, 3, 4);
- R2_GLOBALS._player.setPosition(Common::Point(160, 70));
- R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
- break;
- case 40:
- _field416 = 1;
- _field414 = 6;
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.setStrip(4);
- R2_GLOBALS._player.setFrame(5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 42:
- _field414 = 14;
- R2_GLOBALS._player._numFrames = 10;
- R2_GLOBALS._player.setup(3155, 4, 4);
- R2_GLOBALS._player.setPosition(Common::Point(160, 70));
- R2_GLOBALS._player.animate(ANIM_MODE_2, NULL);
- break;
- case 50:
- // No break on purpose
- case 55:
- // No break on purpose
- case 60:
- R2_GLOBALS._player.setup(3156, 5, 1);
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 51:
- // No break on purpose
- case 56:
- // No break on purpose
- case 117:
- R2_GLOBALS._player.setup(3157, 1, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 52:
- // No break on purpose
- case 82:
- // No break on purpose
- case 118:
- R2_GLOBALS._player.setup(3156, 3, 6);
- _sceneMode = 1;
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 57:
- // No break on purpose
- case 91:
- // No break on purpose
- case 96:
- R2_GLOBALS._player.setup(3157, 2, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 58:
- // No break on purpose
- case 92:
- // No break on purpose
- case 122:
- R2_GLOBALS._player.setup(3156, 2, 6);
- _sceneMode = 1;
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 61:
- R2_GLOBALS._player.setup(3157, 4, 5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 62:
- // No break on purpose
- case 72:
- // No break on purpose
- case 98:
- R2_GLOBALS._player.setup(3156, 4, 6);
- _sceneMode = 1;
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 70:
- // No break on purpose
- case 75:
- // No break on purpose
- case 80:
- R2_GLOBALS._player.setup(3156, 6, 1);
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 71:
- // No break on purpose
- case 76:
- // No break on purpose
- case 97:
- R2_GLOBALS._player.setup(3157, 3, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 77:
- // No break on purpose
- case 111:
- // No break on purpose
- case 116:
- R2_GLOBALS._player.setup(3157, 4, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 78:
- // No break on purpose
- case 102:
- // No break on purpose
- case 112:
- R2_GLOBALS._player.setup(3156, 1, 6);
- _sceneMode = 1;
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 81:
- R2_GLOBALS._player.setup(3157, 2, 5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 90:
- // No break on purpose
- case 95:
- // No break on purpose
- case 100:
- R2_GLOBALS._player.setup(3156, 7, 1);
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 101:
- R2_GLOBALS._player.setup(3157, 1, 5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 110:
- // No break on purpose
- case 115:
- // No break on purpose
- case 120:
- R2_GLOBALS._player.setup(3156, 8, 1);
- R2_GLOBALS._player._numFrames = 5;
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 121:
- R2_GLOBALS._player.setup(3157, 3, 5);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- default:
- // CHECKME: The original is walling _eventManager.waitEvent();
- _sceneMode = 2;
+ case 2:
+ if (R2_GLOBALS._sceneManager._previousScene == 1530)
+ R2_GLOBALS._sceneManager.changeScene(1550);
+ else
+ R2_GLOBALS._sceneManager.changeScene(1530);
+ default:
break;
}
}
-void Scene1200::process(Event &event) {
- if (_field414 != 0)
- return;
+/*--------------------------------------------------------------------------
+ * Scene 1530 - Cutscene - Crashing on Rimwall
+ *
+ *--------------------------------------------------------------------------*/
- Scene::process(event);
+void Scene1530::postInit(SceneObjectList *OwnerList) {
+ if (R2_GLOBALS._sceneManager._previousScene == 1000)
+ loadScene(1650);
+ else if (R2_GLOBALS._sceneManager._previousScene == 1580)
+ loadScene(1550);
+ else
+ loadScene(1530);
- if (!R2_GLOBALS._player._canWalk)
- return;
+ R2_GLOBALS._uiElements._active = false;
+ SceneExt::postInit();
+ R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
- if (event.eventType == EVENT_BUTTON_DOWN) {
- Common::Point cellPos = R2_GLOBALS._ventCellPos;
- _mazeUI.pixelToCellXY(cellPos);
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_seekerSpeaker);
- int cellId = _mazeUI.getCellFromPixelXY(event.mousePos);
- switch (R2_GLOBALS._events.getCursor()) {
- case CURSOR_WALK:
- event.handled = true;
- if ((event.mousePos.x > 179) && (event.mousePos.x < 210) && (event.mousePos.y > 50) && (event.mousePos.y < 89))
- startCrawling(CRAWL_EAST);
+ if (R2_GLOBALS._sceneManager._previousScene == 1000) {
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.hide();
+ R2_GLOBALS._player.disableControl();
- if ((event.mousePos.x > 109) && (event.mousePos.x < 140) && (event.mousePos.y > 50) && (event.mousePos.y < 89))
- startCrawling(CRAWL_WEST);
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(538, this);
+ R2_GLOBALS._sound1.play(114);
- if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 89) && (event.mousePos.y < 120))
- startCrawling(CRAWL_SOUTH);
+ _sceneMode = 3;
+ } else if (R2_GLOBALS._sceneManager._previousScene == 1580) {
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player._characterIndex = R2_QUINN;
+ R2_GLOBALS._player.setObjectWrapper(NULL);
+ R2_GLOBALS._player.setup(1516, 6, 1);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 125));
+ R2_GLOBALS._player._moveRate = 30;
+ R2_GLOBALS._player._moveDiff = Common::Point(4, 1);
- if ((event.mousePos.x > 140) && (event.mousePos.x < 179) && (event.mousePos.y > 19) && (event.mousePos.y < 50))
- startCrawling(CRAWL_NORTH);
- break;
- case CURSOR_USE:
- if (cellId > 36) {
- if ( ((cellPos.x == 3) && (cellPos.y == 33))
- || ((cellPos.x == 7) && (cellPos.y == 33))
- || ((cellPos.x == 33) && (cellPos.y == 41))
- || ((cellPos.x == 5) && (cellPos.y == 5))
- || ((cellPos.x == 13) && (cellPos.y == 21))
- || ((cellPos.x == 17) && (cellPos.y == 21))
- || ((cellPos.x == 17) && (cellPos.y == 5))
- || ((cellPos.x == 17) && (cellPos.y == 9))
- || ((cellPos.x == 29) && (cellPos.y == 17))
- || ((cellPos.x == 33) && (cellPos.y == 17))
- || ((cellPos.x == 35) && (cellPos.y == 17))
- || ((cellPos.x == 41) && (cellPos.y == 21)) ) {
- _laserPanel.postInit();
- event.handled = true;
- }
- }
+ _leftReactor.postInit();
+ _leftReactor.setup(1516, 7, 1);
+ _leftReactor.setPosition(Common::Point(121, 41));
+ _leftReactor.animate(ANIM_MODE_2, NULL);
- if ((cellId == 1) || (cellId == 4) || (cellId == 11) || (cellId == 14)) {
- if ( ((cellPos.x == 3) && (cellPos.y == 9))
- || ((cellPos.x == 11) && (cellPos.y == 27))
- || ((cellPos.x == 17) && (cellPos.y == 7))
- || ((cellPos.x == 17) && (cellPos.y == 27))
- || ((cellPos.x == 17) && (cellPos.y == 33))
- || (cellPos.x == 33) ) {
- switch (cellPos.x) {
- case 3:
- R2_GLOBALS._sceneManager.changeScene(3150);
- break;
- case 33:
- if (R2_GLOBALS._scientistConvIndex >= 4)
- R2_GLOBALS._sceneManager.changeScene(3250);
- else
- SceneItem::display(1200, 6, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, LIST_END);
- break;
- default:
- SceneItem::display(1200, 5, 0, 280, 1, 160, 9, 1, 2, 20, 7, 154, LIST_END);
- break;
- }
- event.handled = true;
- }
- }
- break;
- case CURSOR_LOOK:
- if ((cellId == 1) || (cellId == 4) || (cellId == 11) || (cellId == 14)) {
- event.handled = true;
- switch (cellPos.x) {
- case 3:
- // It was your cell.
- SceneItem::display(1200, 8, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- case 9:
- R2_GLOBALS._sceneManager.changeScene(3240);
- break;
- case 11:
- if (cellPos.y == 27)
- R2_GLOBALS._sceneManager.changeScene(3210);
- else
- // A vent grill
- SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- case 17:
- switch (cellPos.y) {
- case 5:
- R2_GLOBALS._sceneManager.changeScene(3230);
- break;
- case 21:
- R2_GLOBALS._sceneManager.changeScene(3220);
- break;
- case 33:
- R2_GLOBALS._sceneManager.changeScene(3200);
- break;
- default:
- // A vent grill
- SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- }
- break;
- case 33:
- R2_GLOBALS._sceneManager.changeScene(3245);
- break;
- default:
- SceneItem::display(1200, 10, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- }
- }
- if (cellId > 36) {
- // "An anti-pest laser"
- event.handled = true;
- SceneItem::display(1200, 9, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- }
- break;
- case CURSOR_TALK:
- event.handled = true;
- break;
- default:
- return;
- }
- } else if (event.eventType == EVENT_KEYPRESS) {
- if (_field414) {
- event.handled = false;
- return;
- }
+ _rightReactor.postInit();
+ _rightReactor.setup(1516, 8, 1);
+ _rightReactor.setPosition(Common::Point(107, 116));
+ _rightReactor.animate(ANIM_MODE_2, NULL);
- switch (event.kbd.keycode) {
- case Common::KEYCODE_KP8:
- case Common::KEYCODE_UP:
- startCrawling(CRAWL_NORTH);
- break;
- case Common::KEYCODE_KP4:
- case Common::KEYCODE_LEFT:
- startCrawling(CRAWL_WEST);
- break;
- case Common::KEYCODE_KP6:
- case Common::KEYCODE_RIGHT:
- startCrawling(CRAWL_EAST);
- break;
- case Common::KEYCODE_KP2:
- case Common::KEYCODE_DOWN:
- startCrawling(CRAWL_SOUTH);
- break;
- default:
- event.handled = false;
- return;
- break;
- }
- } else
- return;
-}
+ R2_GLOBALS._player.disableControl();
+ Common::Point pt(480, 75);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ R2_GLOBALS._sound1.play(111);
-void Scene1200::dispatch() {
- Rect tmpRect;
- Scene::dispatch();
+ _sceneMode = 1;
+ } else {
+ _seeker.postInit();
+ _seeker._effect = EFFECT_SHADED;
- if (_fixupMaze) {
- _mazeUI.setMazePosition(R2_GLOBALS._ventCellPos);
- //_mazeUI.draw();
- _fixupMaze = false;
- }
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player.disableControl();
- if (_field414 != 0) {
- tmpRect.set(110, 20, 210, 120);
- _field414--;
+ setAction(&_sequenceManager, this, 1530, &R2_GLOBALS._player, &_seeker, NULL);
- switch (_nextCrawlDirection) {
- case CRAWL_EAST:
- R2_GLOBALS._ventCellPos.x += 2;
- break;
- case CRAWL_WEST:
- R2_GLOBALS._ventCellPos.x -= 2;
- break;
- case CRAWL_SOUTH:
- R2_GLOBALS._ventCellPos.y += 2;
- break;
- case CRAWL_NORTH:
- R2_GLOBALS._ventCellPos.y -= 2;
- break;
- default:
- break;
- }
+ _sceneMode = 2;
+ }
- _mazeUI.setMazePosition(R2_GLOBALS._ventCellPos);
- //_mazeUI.draw();
+}
- if (_field416 != 0) {
- switch(_nextCrawlDirection) {
- case CRAWL_EAST:
- R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x - 2, R2_GLOBALS._player._position.y));
- break;
- case CRAWL_WEST:
- R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x + 2, R2_GLOBALS._player._position.y));
- break;
- case CRAWL_SOUTH:
- R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 2));
- break;
- case CRAWL_NORTH:
- R2_GLOBALS._player.setPosition(Common::Point(R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y + 2));
- break;
- default:
- break;
- }
- }
- if (_field414 == 0) {
- if (_field416 == 0)
- R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL);
- signal();
- }
+void Scene1530::signal() {
+ switch (_sceneMode - 1) {
+ case 0:
+ R2_GLOBALS._sceneManager.changeScene(1000);
+ break;
+ case 1:
+ R2_GLOBALS._sceneManager.changeScene(1525);
+ break;
+ case 2:
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 4;
+ R2_GLOBALS._player.show();
+ setAction(&_sequenceManager, this, 1650, &R2_GLOBALS._player, NULL);
+ break;
+ case 3:
+ R2_GLOBALS._sceneManager.changeScene(1700);
+ break;
+ default:
+ break;
}
}
-void Scene1200::saveCharacter(int characterIndex) {
- R2_GLOBALS._sound1.fadeOut2(NULL);
- SceneExt::saveCharacter(characterIndex);
+void Scene1530::dispatch() {
+ int16 x = R2_GLOBALS._player._position.x;
+ int16 y = R2_GLOBALS._player._position.y;
+
+ _leftReactor.setPosition(Common::Point(x - 39, y - 85));
+ _rightReactor.setPosition(Common::Point(x - 53, y - 9));
+
+ Scene::dispatch();
}
-void Scene1200::startCrawling(CrawlDirection dir) {
- Common::Point cellPos = R2_GLOBALS._ventCellPos;
- _mazeUI.pixelToCellXY(cellPos);
+/*--------------------------------------------------------------------------
+ * Scene 1550 - Spaceport
+ *
+ *--------------------------------------------------------------------------*/
- switch (dir) {
- case CRAWL_EAST:
- if ( ((_mazeUI.getCellFromPixelXY(Common::Point(200, 50)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(200, 88)) > 36))
- && ( ((cellPos.x == 3) && (cellPos.y == 33) && (_field418 != 4))
- || ((cellPos.x == 13) && (cellPos.y == 21) && (_field418 != 2))
- || ((cellPos.x == 29) && (cellPos.y == 17) && (_field418 != 1))
- || ((cellPos.x == 33) && (cellPos.y == 41)) )
- ) {
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1200;
- setAction(&_sequenceManager, this, 1200, &_actor1, NULL);
- } else if (_mazeUI.getCellFromPixelXY(Common::Point(200, 69)) == 36) {
- switch (_nextCrawlDirection) {
- case CRAWL_EAST:
- if (R2_GLOBALS._player._visage == 3155)
- _sceneMode = 15;
- else
- _sceneMode = 10;
- break;
- case CRAWL_WEST:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 76;
- else
- _sceneMode = 75;
- break;
- case CRAWL_SOUTH:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 101;
- else
- _sceneMode = 100;
- break;
- case CRAWL_NORTH:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 111;
- else
- _sceneMode = 110;
- break;
- default:
- break;
- }
- R2_GLOBALS._player.disableControl();
- _nextCrawlDirection = 1;
- signal();
- }
- break;
- case CRAWL_WEST:
- if ( ((_mazeUI.getCellFromPixelXY(Common::Point(120, 50)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(120, 88)) > 36))
- && ( ((cellPos.x == 7) && (cellPos.y == 33) && (_field418 != 4))
- || ((cellPos.x == 17) && (cellPos.y == 21) && (_field418 != 2))
- || ((cellPos.x == 33) && (cellPos.y == 17) && (_field418 != 1))
- || ((cellPos.x == 5) && (cellPos.y == 5)) )
- ) {
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1201;
- setAction(&_sequenceManager, this, 1201, &_actor1, NULL);
- } else if (_mazeUI.getCellFromPixelXY(Common::Point(120, 69)) == 36) {
- switch (_nextCrawlDirection) {
- case CRAWL_EAST:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 56;
- else
- _sceneMode = 55;
- break;
- case CRAWL_WEST:
- if (R2_GLOBALS._player._visage == 3155)
- _sceneMode = 25;
- else
- _sceneMode = 20;
- break;
- case CRAWL_SOUTH:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 91;
- else
- _sceneMode = 90;
- break;
- case CRAWL_NORTH:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 121;
- else
- _sceneMode = 120;
- break;
- default:
- break;
- }
+Scene1550::Junk::Junk() {
+ _junkNumber = 0;
+}
+
+void Scene1550::Junk::synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
+
+ s.syncAsSint16LE(_junkNumber);
+}
+
+bool Scene1550::Junk::startAction(CursorType action, Event &event) {
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (_visage == 1561) {
R2_GLOBALS._player.disableControl();
- _nextCrawlDirection = 2;
- signal();
+ scene->_sceneMode = 40;
+ Common::Point pt(_position.x + 5, _position.y + 20);
+ PlayerMover *mover = new PlayerMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+ return true;
}
+ return SceneActor::startAction(action, event);
break;
- case CRAWL_SOUTH:
- if ( ((_mazeUI.getCellFromPixelXY(Common::Point(140, 110)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(178, 110)) > 36))
- && ( ((cellPos.x == 17) && (cellPos.y == 5) && (_field418 != 3))
- || ((cellPos.x == 41) && (cellPos.y == 21)) )
- ) {
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1203;
- setAction(&_sequenceManager, this, 1203, &_actor1, NULL);
- } else if (_mazeUI.getCellFromPixelXY(Common::Point(160, 110)) == 36) {
- switch (_nextCrawlDirection) {
- case CRAWL_EAST:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 51;
- else
- _sceneMode = 50;
- break;
- case CRAWL_WEST:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 81;
- else
- _sceneMode = 80;
+ case CURSOR_LOOK:
+ if (_visage == 1561) {
+ switch (_frame) {
+ case 2:
+ SceneItem::display(1550, 23, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
break;
- case CRAWL_SOUTH:
- if (R2_GLOBALS._player._visage == 3155)
- _sceneMode = 35;
- else
- _sceneMode = 30;
+ case 3:
+ SceneItem::display(1550, 26, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
break;
- case CRAWL_NORTH:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 116;
- else
- _sceneMode = 115;
+ case 4:
+ SceneItem::display(1550, 35, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
break;
default:
break;
}
- R2_GLOBALS._player.disableControl();
- _nextCrawlDirection = 3;
- signal();
- }
- break;
- case CRAWL_NORTH:
- if ( ((_mazeUI.getCellFromPixelXY(Common::Point(140, 30)) > 36) || (_mazeUI.getCellFromPixelXY(Common::Point(178, 30)) > 36))
- && ( ((cellPos.x == 17) && (cellPos.y == 9) && (_field418 != 3))
- || ((cellPos.x == 35) && (cellPos.y == 17)) )
- ) {
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1202;
- setAction(&_sequenceManager, this, 1202, &_actor1, NULL);
- } else if (_mazeUI.getCellFromPixelXY(Common::Point(160, 30)) == 36) {
- switch (_nextCrawlDirection) {
- case CRAWL_EAST:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 61;
- else
- _sceneMode = 60;
- break;
- case CRAWL_WEST:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 71;
- else
- _sceneMode = 70;
+ } else {
+ switch ((((_strip - 1) * 5) + _frame) % 3) {
+ case 0:
+ SceneItem::display(1550, 62, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
break;
- case CRAWL_SOUTH:
- if (R2_GLOBALS._player._visage == 3156)
- _sceneMode = 96;
- else
- _sceneMode = 95;
+ case 1:
+ SceneItem::display(1550, 53, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
break;
- case CRAWL_NORTH:
- if (R2_GLOBALS._player._visage == 3155)
- _sceneMode = 45;
- else
- _sceneMode = 40;
+ case 2:
+ SceneItem::display(1550, 76, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
break;
default:
- _sceneMode = 1;
- R2_GLOBALS._player.setup(3156, 4, 6);
break;
}
- R2_GLOBALS._player.disableControl();
- _nextCrawlDirection = 4;
- signal();
}
+ return true;
break;
default:
+ return SceneActor::startAction(action, event);
break;
}
}
-/*--------------------------------------------------------------------------
- * Scene 1500 - Cutscene: Ship landing
- *
- *--------------------------------------------------------------------------*/
-
-void Scene1500::postInit(SceneObjectList *OwnerList) {
- loadScene(1500);
- R2_GLOBALS._uiElements._active = false;
- setZoomPercents(170, 13, 240, 100);
- SceneExt::postInit();
- R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
-
- scalePalette(65, 65, 65);
-
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.hide();
- R2_GLOBALS._player.disableControl();
-
- _starshipShadow.postInit();
- _starshipShadow.setup(1401, 1, 1);
- _starshipShadow._effect = EFFECT_SHADOW_MAP;
- _starshipShadow.fixPriority(10);
- _starshipShadow._shadowMap = _shadowPaletteMap;
-
- _starship.postInit();
- _starship.setup(1400, 1, 1);
- _starship._moveDiff = Common::Point(1, 1);
- _starship._linkedActor = &_starshipShadow;
-
- if (R2_GLOBALS._sceneManager._previousScene != 1010) {
- _smallShipShadow.postInit();
- _smallShipShadow.setup(1401, 2, 1);
- _smallShipShadow._effect = EFFECT_SHADOW_MAP;
- _smallShipShadow.fixPriority(10);
- _smallShipShadow._shadowMap = _shadowPaletteMap;
-
- _smallShip.postInit();
- _smallShip._moveRate = 30;
- _smallShip._moveDiff = Common::Point(1, 1);
- _smallShip._linkedActor = &_smallShipShadow;
- }
-
- if (R2_GLOBALS._sceneManager._previousScene == 300) {
- _starship.setPosition(Common::Point(189, 139), 5);
-
- _smallShip.setup(1400, 1, 2);
- _smallShip.setPosition(Common::Point(148, 108), 0);
-
- _sceneMode = 20;
- R2_GLOBALS._sound1.play(110);
- } else if (R2_GLOBALS._sceneManager._previousScene == 1550) {
- _starship.setPosition(Common::Point(189, 139), 5);
-
- _smallShip.setup(1400, 2, 1);
- _smallShip.changeZoom(-1);
- _smallShip.setPosition(Common::Point(298, 258), 5);
-
- _sceneMode = 10;
- R2_GLOBALS._sound1.play(106);
- } else {
- _starship.setPosition(Common::Point(289, 239), -30);
- _sceneMode = 0;
- R2_GLOBALS._sound1.play(102);
- }
-
- signal();
+Scene1550::ShipComponent::ShipComponent() {
+ _componentId = 0;
}
-void Scene1500::remove() {
- R2_GLOBALS._uiElements._active = true;
- R2_GLOBALS._uiElements._visible = true;
+void Scene1550::ShipComponent::synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
- SceneExt::remove();
+ s.syncAsSint16LE(_componentId);
}
-void Scene1500::signal() {
- switch(_sceneMode++) {
- case 0:
- R2_GLOBALS.setFlag(25);
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- // No break on purpose
- case 1:
- if (_starship._yDiff < 50) {
- _starship.setPosition(Common::Point(289, 239), _starship._yDiff + 1);
- _sceneMode = 1;
- }
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 2: {
- Common::Point pt(189, 139);
- NpcMover *mover = new NpcMover();
- _starship.addMover(mover, &pt, this);
- }
- break;
- case 3:
- if (_starship._yDiff > 5) {
- _starship.setPosition(Common::Point(189, 139), _starship._yDiff - 1);
- _sceneMode = 3;
+bool Scene1550::ShipComponent::startAction(CursorType action, Event &event) {
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (_componentId == 8) {
+ scene->_dontExit = true;
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->_sceneMode = 1576;
+ else
+ scene->_sceneMode = 1584;
+ // strcpy(scene->_shipComponents[7]._actorName, 'hatch');
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[7], NULL);
+ return true;
}
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
- case 13:
- R2_GLOBALS._player._characterIndex = R2_MIRANDA;
- // No break on purpose
- case 4:
- R2_GLOBALS._sceneManager.changeScene(300);
+ return SceneActor::startAction(action, event);
break;
- case 10:
- // No break on purpose
- case 20:
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ case CURSOR_LOOK:
+ if (_componentId == 8)
+ SceneItem::display(1550, 75, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ else if (_frame == 1)
+ SceneItem::display(1550, 70, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ else
+ SceneItem::display(1550, 71, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ return true;
break;
- case 11: {
- Common::Point pt(148, 108);
- NpcMover *mover = new NpcMover();
- _smallShip.addMover(mover, &pt, this);
+ case R2_FUEL_CELL:
+ scene->_dontExit = true;
+ if (_componentId == 6) {
+ R2_GLOBALS._player.disableControl();
+ scene->_wreckage2.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->_shipComponents[5], &scene->_wreckage2, NULL);
+ return true;
}
+ return SceneActor::startAction(action, event);
break;
- case 12:
- setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
- break;
- case 21: {
- Common::Point pt(-2, -42);
- NpcMover *mover = new NpcMover();
- _smallShip.addMover(mover, &pt, NULL);
- signal();
+ case R2_GYROSCOPE:
+ scene->_dontExit = true;
+ if (_componentId == 3) {
+ R2_GLOBALS._player.disableControl();
+ scene->_wreckage2.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->_shipComponents[2], &scene->_wreckage2, NULL);
+ return true;
}
+ return SceneActor::startAction(action, event);
break;
- case 22:
- if (_starship._yDiff < 50) {
- _starship.setPosition(Common::Point(189, 139), _starship._yDiff + 1);
- _sceneMode = 22;
+ case R2_GUIDANCE_MODULE:
+ scene->_dontExit = true;
+ if (_componentId == 1) {
+ R2_GLOBALS._player.disableControl();
+ scene->_wreckage2.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->_shipComponents[0], &scene->_wreckage2, NULL);
+ return true;
}
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ return SceneActor::startAction(action, event);
break;
- case 23: {
- Common::Point pt(-13, -61);
- NpcMover *mover = new NpcMover();
- _starship.addMover(mover, &pt, this);
+ case R2_THRUSTER_VALVE:
+ scene->_dontExit = true;
+ if (_componentId == 4) {
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1572;
+ scene->_wreckage2.postInit();
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[3], &scene->_wreckage2, NULL);
+ return true;
}
+ return SceneActor::startAction(action, event);
break;
- case 24:
- R2_GLOBALS._sceneManager.changeScene(1550);
+ case R2_RADAR_MECHANISM:
+ scene->_dontExit = true;
+ if (_componentId == 2) {
+ R2_GLOBALS._player.disableControl();
+ scene->_wreckage2.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->_shipComponents[1], &scene->_wreckage2, NULL);
+ return true;
+ }
+ return SceneActor::startAction(action, event);
+ break;
+ case R2_IGNITOR:
+ scene->_dontExit = true;
+ if (_componentId == 5) {
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1573;
+ scene->_wreckage2.postInit();
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[4], &scene->_wreckage2, NULL);
+ return true;
+ }
+ return SceneActor::startAction(action, event);
+ break;
+ case R2_BATTERY:
+ scene->_dontExit = true;
+ if (_componentId == 7) {
+ R2_GLOBALS._player.disableControl();
+ scene->_wreckage2.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->_shipComponents[6], &scene->_wreckage2, NULL);
+ return true;
+ }
+ return SceneActor::startAction(action, event);
break;
default:
+ return SceneActor::startAction(action, event);
break;
}
}
-void Scene1500::dispatch() {
- if (_sceneMode > 10) {
- float yDiff = sqrt((float) (_smallShip._position.x * _smallShip._position.x) + (_smallShip._position.y * _smallShip._position.y));
- if (yDiff > 6)
- _smallShip.setPosition(_smallShip._position, (int) yDiff);
+void Scene1550::ShipComponent::setupShipComponent(int componentId) {
+ _componentId = componentId;
+ postInit();
+ 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 2:
+ if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) == 0)
+ setFrame(5);
+ setPosition(Common::Point(248, 100));
+ break;
+ case 3:
+ if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 0)
+ setFrame(5);
+ setPosition(Common::Point(217, 85));
+ break;
+ case 4:
+ if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 0)
+ setFrame(5);
+ setPosition(Common::Point(161, 121));
+ break;
+ case 5:
+ if (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 0)
+ setFrame(5);
+ setPosition(Common::Point(117, 121));
+ break;
+ case 6:
+ if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) == 0)
+ setFrame(5);
+ setPosition(Common::Point(111, 85));
+ break;
+ case 7:
+ if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 0)
+ setFrame(5);
+ setPosition(Common::Point(95, 84));
+ break;
+ case 8: {
+ setup(1516, 1, 1);
+ setPosition(Common::Point(201, 45));
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+ if ((scene->_sceneMode == 1577) || (scene->_sceneMode == 1578))
+ hide();
+ fixPriority(92);
+ setDetails(1550, 70, -1, -1, 2, (SceneItem *) NULL);
+ }
+ break;
+ default:
+ break;
}
- Scene::dispatch();
+ fixPriority(92);
+ setDetails(1550, 70, -1, -1, 2, (SceneItem *)NULL);
}
-/*--------------------------------------------------------------------------
- * Scene 1525 - Cutscene - Ship
- *
- *--------------------------------------------------------------------------*/
-
-void Scene1525::postInit(SceneObjectList *OwnerList) {
- loadScene(1525);
- R2_GLOBALS._uiElements._active = false;
- SceneExt::postInit();
+Scene1550::DishControlsWindow::DishControl::DishControl() {
+ _controlId = 0;
+}
- R2_GLOBALS._player.postInit();
- if (R2_GLOBALS._sceneManager._previousScene == 525)
- R2_GLOBALS._player.setup(1525, 1, 1);
- else
- R2_GLOBALS._player.setup(1525, 1, 16);
- R2_GLOBALS._player.setPosition(Common::Point(244, 148));
- R2_GLOBALS._player.disableControl();
+void Scene1550::DishControlsWindow::DishControl::synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
- _sceneMode = 0;
- setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
+ s.syncAsSint16LE(_controlId);
}
-void Scene1525::signal() {
- switch (_sceneMode++) {
- case 0:
- if (R2_GLOBALS._sceneManager._previousScene == 525)
- setAction(&_sequenceManager, this, 1525, &R2_GLOBALS._player, NULL);
- else
- setAction(&_sequenceManager, this, 1526, &R2_GLOBALS._player, NULL);
- break;
+bool Scene1550::DishControlsWindow::DishControl::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (_controlId) {
case 1:
- setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
+ // Button control
+ if (scene->_dish._frame == 5) {
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 25;
+ if (scene->_walkway._frame == 1) {
+ scene->setAction(&scene->_sequenceManager1, scene, 1560, &scene->_walkway, NULL);
+ R2_GLOBALS.setFlag(20);
+ setFrame(2);
+ } else {
+ scene->setAction(&scene->_sequenceManager1, scene, 1561, &scene->_walkway, NULL);
+ R2_GLOBALS.clearFlag(20);
+ setFrame(1);
+ }
+ scene->_dishControlsWindow.remove();
+ }
break;
case 2:
- if (R2_GLOBALS._sceneManager._previousScene == 1530)
- R2_GLOBALS._sceneManager.changeScene(1550);
- else
- R2_GLOBALS._sceneManager.changeScene(1530);
+ // Lever control
+ R2_GLOBALS._player.disableControl();
+ if (scene->_dish._frame == 1) {
+ scene->_sceneMode = 23;
+ scene->setAction(&scene->_sequenceManager1, scene, 1560, this, NULL);
+ } else {
+ if (scene->_walkway._frame == 1)
+ scene->_sceneMode = 24;
+ else
+ scene->_sceneMode = 22;
+ scene->setAction(&scene->_sequenceManager1, scene, 1561, this, NULL);
+ }
+ break;
default:
break;
}
+ return true;
}
-/*--------------------------------------------------------------------------
- * Scene 1530 - Cutscene - Crashing on Rimwall
- *
- *--------------------------------------------------------------------------*/
+void Scene1550::DishControlsWindow::remove() {
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-void Scene1530::postInit(SceneObjectList *OwnerList) {
- if (R2_GLOBALS._sceneManager._previousScene == 1000)
- loadScene(1650);
- else if (R2_GLOBALS._sceneManager._previousScene == 1580)
- loadScene(1550);
- else
- loadScene(1530);
+ _button.remove();
+ _lever.remove();
- R2_GLOBALS._uiElements._active = false;
- SceneExt::postInit();
- R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
+ ModalWindow::remove();
- _stripManager.addSpeaker(&_quinnSpeaker);
- _stripManager.addSpeaker(&_seekerSpeaker);
+ if ((scene->_sceneMode >= 20) && (scene->_sceneMode <= 29))
+ return;
- if (R2_GLOBALS._sceneManager._previousScene == 1000) {
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.hide();
- R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._player.disableControl();
+ if (scene->_walkway._frame == 1) {
+ scene->_sceneMode = 1559;
+ scene->setAction(&scene->_sequenceManager1, scene, 1559, &R2_GLOBALS._player, NULL);
+ } else {
+ scene->_sceneMode = 1562;
+ scene->setAction(&scene->_sequenceManager1, scene, 1562, &R2_GLOBALS._player, NULL);
+ }
+}
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(538, this);
- R2_GLOBALS._sound1.play(114);
+void Scene1550::DishControlsWindow::setup2(int visage, int stripFrameNum, int frameNum,
+ int posX, int posY) {
+ // Call inherited setup
+ ModalWindow::setup2(visage, stripFrameNum, frameNum, posX, posY);
- _sceneMode = 3;
- } else if (R2_GLOBALS._sceneManager._previousScene == 1580) {
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player._characterIndex = R2_QUINN;
- R2_GLOBALS._player.setObjectWrapper(NULL);
- R2_GLOBALS._player.setup(1516, 6, 1);
- R2_GLOBALS._player.setPosition(Common::Point(160, 125));
- R2_GLOBALS._player._moveRate = 30;
- R2_GLOBALS._player._moveDiff = Common::Point(4, 1);
+ // Further setup
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+ setup3(1550, 67, -1, -1);
+ _button.postInit();
+ _button._controlId = 1;
+ if (scene->_walkway._frame == 1)
+ _button.setup(1559, 3, 1);
+ else
+ _button.setup(1559, 3, 2);
+ _button.setPosition(Common::Point(142, 79));
+ _button.fixPriority(251);
+ _button.setDetails(1550, 68, -1, -1, 2, (SceneItem *) NULL);
- _leftReactor.postInit();
- _leftReactor.setup(1516, 7, 1);
- _leftReactor.setPosition(Common::Point(121, 41));
- _leftReactor.animate(ANIM_MODE_2, NULL);
+ _lever.postInit();
+ _lever._numFrames = 5;
+ _lever._controlId = 2;
+ if (scene->_dish._frame == 1)
+ _lever.setup(1559, 2, 1);
+ else
+ _lever.setup(1559, 2, 5);
+ _lever.setPosition(Common::Point(156, 103));
+ _lever.fixPriority(251);
+ _lever.setDetails(1550, 69, -1, -1, 2, (SceneItem *) NULL);
+}
- _rightReactor.postInit();
- _rightReactor.setup(1516, 8, 1);
- _rightReactor.setPosition(Common::Point(107, 116));
- _rightReactor.animate(ANIM_MODE_2, NULL);
+bool Scene1550::WorkingShip::startAction(CursorType action, Event &event) {
+ return SceneHotspot::startAction(action, event);
+}
- R2_GLOBALS._player.disableControl();
- Common::Point pt(480, 75);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- R2_GLOBALS._sound1.play(111);
+bool Scene1550::Wreckage::startAction(CursorType action, Event &event) {
+ return SceneActor::startAction(action, event);
+}
- _sceneMode = 1;
- } else {
- _seeker.postInit();
- _seeker._effect = EFFECT_SHADED;
+bool Scene1550::Companion::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_TALK)
+ return SceneActor::startAction(action, event);
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
- R2_GLOBALS._player.disableControl();
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+ scene->_sceneMode = 80;
+ scene->signal();
- setAction(&_sequenceManager, this, 1530, &R2_GLOBALS._player, &_seeker, NULL);
+ return true;
+}
- _sceneMode = 2;
- }
+bool Scene1550::AirBag::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ R2_GLOBALS._player.disableControl();
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+ scene->_dontExit = true;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->_sceneMode = 1552;
+ else
+ scene->_sceneMode = 1588;
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_airbag, NULL);
+ return true;
}
-void Scene1530::signal() {
- switch (_sceneMode - 1) {
- case 0:
- R2_GLOBALS._sceneManager.changeScene(1000);
- break;
- case 1:
- R2_GLOBALS._sceneManager.changeScene(1525);
- break;
- case 2:
+bool Scene1550::Joystick::startAction(CursorType action, Event &event) {
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ scene->_sceneMode = 50;
R2_GLOBALS._player.disableControl();
- _sceneMode = 4;
- R2_GLOBALS._player.show();
- setAction(&_sequenceManager, this, 1650, &R2_GLOBALS._player, NULL);
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->_stripManager.start(518, scene);
+ else
+ scene->_stripManager.start(520, scene);
+ return true;
break;
- case 3:
- R2_GLOBALS._sceneManager.changeScene(1700);
+ case CURSOR_LOOK:
+ SceneItem::display(1550, 41, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ return true;
break;
default:
- break;
+ return SceneActor::startAction(action, event);
}
}
-void Scene1530::dispatch() {
- int16 x = R2_GLOBALS._player._position.x;
- int16 y = R2_GLOBALS._player._position.y;
+bool Scene1550::Gyroscope::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
- _leftReactor.setPosition(Common::Point(x - 39, y - 85));
- _rightReactor.setPosition(Common::Point(x - 53, y - 9));
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->_sceneMode = 1555;
+ else
+ scene->_sceneMode = 1589;
- Scene::dispatch();
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
+ &scene->_gyroscope, NULL);
+ return true;
}
-/*--------------------------------------------------------------------------
- * Scene 1550 - Spaceport
- *
- *--------------------------------------------------------------------------*/
+bool Scene1550::DiagnosticsDisplay::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
-Scene1550::Junk::Junk() {
- _junkNumber = 0;
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+ R2_GLOBALS._player.disableControl();
+ scene->_dontExit = true;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->_sceneMode = 1586;
+ else
+ scene->_sceneMode = 1587;
+
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
+ &scene->_diagnosticsDisplay, NULL);
+ return true;
}
-void Scene1550::Junk::synchronize(Serializer &s) {
- SceneActor::synchronize(s);
+bool Scene1550::DishTower::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
+
+ if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1585;
+ scene->setAction(&scene->_sequenceManager1, scene, 1585, &R2_GLOBALS._player, NULL);
+ } else {
+ R2_GLOBALS._player.disableControl();
+ switch(scene->_dishMode) {
+ case 0:
+ scene->_dish.fixPriority(168);
+ scene->_walkway.fixPriority(125);
+ scene->_sceneMode = 1558;
+ scene->setAction(&scene->_sequenceManager1, scene, 1558, &R2_GLOBALS._player, NULL);
+ break;
+ case 1:
+ return SceneActor::startAction(action, event);
+ break;
+ case 2:
+ scene->_dishMode = 1;
+ scene->_sceneMode = 1563;
+ scene->setAction(&scene->_sequenceManager1, scene, 1563, &R2_GLOBALS._player, &scene->_walkway, NULL);
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
- s.syncAsSint16LE(_junkNumber);
}
-bool Scene1550::Junk::startAction(CursorType action, Event &event) {
+bool Scene1550::Dish::startAction(CursorType action, Event &event) {
Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
switch (action) {
case CURSOR_USE:
- if (_visage == 1561) {
+ if (scene->_dishMode != 2)
+ return SceneActor::startAction(action, event);
+
+ if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) {
R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 40;
- Common::Point pt(_position.x + 5, _position.y + 20);
- PlayerMover *mover = new PlayerMover();
- R2_GLOBALS._player.addMover(mover, &pt, scene);
- return true;
- }
- return SceneActor::startAction(action, event);
+ scene->_sceneMode = 1564;
+ scene->setAction(&scene->_sequenceManager1, scene, 1564, &R2_GLOBALS._player, NULL);
+ } else
+ SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ return true;
break;
case CURSOR_LOOK:
- if (_visage == 1561) {
- switch (_frame) {
- case 2:
- SceneItem::display(1550, 23, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- case 3:
- SceneItem::display(1550, 26, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- case 4:
- SceneItem::display(1550, 35, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- default:
- break;
- }
- } else {
- switch ((((_strip - 1) * 5) + _frame) % 3) {
- case 0:
- SceneItem::display(1550, 62, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- case 1:
- SceneItem::display(1550, 53, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- case 2:
- SceneItem::display(1550, 76, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- break;
- default:
- break;
- }
- }
+ if (scene->_dishMode != 2)
+ return SceneActor::startAction(action, event);
+
+ if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) {
+ SceneItem::display(1550, 74, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ } else
+ SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
return true;
break;
default:
@@ -2572,758 +2150,301 @@ bool Scene1550::Junk::startAction(CursorType action, Event &event) {
}
}
-Scene1550::ShipComponent::ShipComponent() {
- _componentId = 0;
+/*--------------------------------------------------------------------------*/
+
+Scene1550::Scene1550() {
+ _dontExit = false;
+ _wallType = 0;
+ _dishMode = 0;
+ _sceneResourceId = 0;
+ _walkRegionsId = 0;
}
-void Scene1550::ShipComponent::synchronize(Serializer &s) {
- SceneActor::synchronize(s);
+void Scene1550::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
- s.syncAsSint16LE(_componentId);
+ s.syncAsSint16LE(_dontExit);
+ s.syncAsByte(_wallType);
+ s.syncAsSint16LE(_dishMode);
+ s.syncAsSint16LE(_sceneResourceId);
+ s.syncAsSint16LE(_walkRegionsId);
}
-bool Scene1550::ShipComponent::startAction(CursorType action, Event &event) {
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- switch (action) {
- case CURSOR_USE:
- if (_componentId == 8) {
- scene->_dontExit = true;
- R2_GLOBALS._player.disableControl();
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->_sceneMode = 1576;
- else
- scene->_sceneMode = 1584;
- // 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 (_componentId == 8)
- SceneItem::display(1550, 75, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- else if (_frame == 1)
- SceneItem::display(1550, 70, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- else
- SceneItem::display(1550, 71, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- return true;
- break;
- case R2_FUEL_CELL:
- scene->_dontExit = true;
- if (_componentId == 6) {
- R2_GLOBALS._player.disableControl();
- scene->_wreckage2.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->_shipComponents[5], &scene->_wreckage2, NULL);
- return true;
- }
- return SceneActor::startAction(action, event);
- break;
- case R2_GYROSCOPE:
- scene->_dontExit = true;
- if (_componentId == 3) {
- R2_GLOBALS._player.disableControl();
- scene->_wreckage2.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->_shipComponents[2], &scene->_wreckage2, NULL);
- return true;
- }
- return SceneActor::startAction(action, event);
- break;
- case R2_GUIDANCE_MODULE:
- scene->_dontExit = true;
- if (_componentId == 1) {
- R2_GLOBALS._player.disableControl();
- scene->_wreckage2.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->_shipComponents[0], &scene->_wreckage2, NULL);
- return true;
- }
- return SceneActor::startAction(action, event);
- break;
- case R2_THRUSTER_VALVE:
- scene->_dontExit = true;
- if (_componentId == 4) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1572;
- scene->_wreckage2.postInit();
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[3], &scene->_wreckage2, NULL);
- return true;
- }
- return SceneActor::startAction(action, event);
- break;
- case R2_RADAR_MECHANISM:
- scene->_dontExit = true;
- if (_componentId == 2) {
- R2_GLOBALS._player.disableControl();
- scene->_wreckage2.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->_shipComponents[1], &scene->_wreckage2, NULL);
- return true;
- }
- return SceneActor::startAction(action, event);
- break;
- case R2_IGNITOR:
- scene->_dontExit = true;
- if (_componentId == 5) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1573;
- scene->_wreckage2.postInit();
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[4], &scene->_wreckage2, NULL);
- return true;
- }
- return SceneActor::startAction(action, event);
+void Scene1550::postInit(SceneObjectList *OwnerList) {
+ 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);
+ _sceneResourceId = 1550;
+ _walkRegionsId = 0;
+
+ if (R2_GLOBALS._sceneManager._previousScene == -1)
+ R2_GLOBALS.setFlag(16);
+
+ 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);
+ _stripManager.setFontNumber(3);
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_seekerSpeaker);
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player._effect = EFFECT_SHADED2;
+
+ 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._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));
+
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player.disableControl();
+
+ _wallType = 0;
+ _companion.changeZoom(-1);
+ R2_GLOBALS._player.changeZoom(-1);
+
+ switch (R2_GLOBALS._sceneManager._previousScene) {
+ case 1530:
+ R2_GLOBALS._stripModifier = 0;
+ // No break on purpose
+ case 300:
+ // No break on purpose
+ case 1500:
+ // No break on purpose
+ case 3150:
+ R2_GLOBALS._sound1.play(105);
break;
- case R2_BATTERY:
- scene->_dontExit = true;
- if (_componentId == 7) {
+ case 1580:
+ // Leaving intact ship
+ if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1580) {
R2_GLOBALS._player.disableControl();
- scene->_wreckage2.postInit();
+ R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL);
+
+ _dontExit = true;
+
+ _wreckage2.postInit();
+ _shipComponents[7].setupShipComponent(8);
+ _shipComponents[7].hide();
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->_sceneMode = 1575;
+ _sceneMode = 1577;
else
- scene->_sceneMode = 1583;
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[6], &scene->_wreckage2, NULL);
- return true;
+ _sceneMode = 1578;
+
+ setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_wreckage2, &_shipComponents[7], NULL);
+ R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550;
+ } else {
+ R2_GLOBALS._player.enableControl();
}
- return SceneActor::startAction(action, event);
break;
default:
- return SceneActor::startAction(action, event);
break;
}
-}
-void Scene1550::ShipComponent::setupShipComponent(int componentId) {
- _componentId = componentId;
- postInit();
- setup(1517, _componentId, 1);
+ enterArea();
- switch (_componentId) {
+ _intactHull1.setDetails(16, 1550, 10, -1, -1);
+ _intactHull2.setDetails(24, 1550, 10, -1, -1);
+ _background.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(&_companion))
+ _companion.postInit();
+
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ _companion.setVisage(1505);
+ else
+ _companion.setVisage(1500);
+
+ _companion.changeZoom(77);
+ _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
+
+ assert(_walkRegionsId >= 1550);
+ R2_GLOBALS._walkRegions.disableRegion(k5A750[_walkRegionsId - 1550]);
+
+ setAction(&_sequenceManager1, this, 1590, &_companion, NULL);
+ } else if ((_sceneMode != 1577) && (_sceneMode != 1578))
+ R2_GLOBALS._player.enableControl();
+}
+
+void Scene1550::signal() {
+ switch (_sceneMode) {
case 1:
- if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) == 0)
- setFrame(5);
- setPosition(Common::Point(287, 85));
- break;
- case 2:
- if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) == 0)
- setFrame(5);
- setPosition(Common::Point(248, 100));
- break;
+ // No break on purpose
case 3:
- if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 0)
- setFrame(5);
- setPosition(Common::Point(217, 85));
- break;
- case 4:
- if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 0)
- setFrame(5);
- setPosition(Common::Point(161, 121));
- break;
+ // No break on purpose
case 5:
- if (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 0)
- setFrame(5);
- setPosition(Common::Point(117, 121));
- break;
- case 6:
- if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) == 0)
- setFrame(5);
- setPosition(Common::Point(111, 85));
- break;
+ // No break on purpose
case 7:
- if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 0)
- setFrame(5);
- setPosition(Common::Point(95, 84));
- break;
- case 8: {
- setup(1516, 1, 1);
- setPosition(Common::Point(201, 45));
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- if ((scene->_sceneMode == 1577) || (scene->_sceneMode == 1578))
- hide();
- fixPriority(92);
- setDetails(1550, 70, -1, -1, 2, (SceneItem *) NULL);
- }
+ _dontExit = false;
+ R2_GLOBALS._player.enableControl(CURSOR_WALK);
break;
- default:
+ case 20:
+ // No break on purpose
+ case 21:
+ // No break on purpose
+ case 25:
+ // No break on purpose
+ case 1563:
+ // Show the communication dish controls window
+ R2_GLOBALS.clearFlag(20);
+ _dishControlsWindow.setup2(1559, 1, 1, 160, 125);
+ R2_GLOBALS._player.enableControl();
+ _sceneMode = 0;
break;
- }
-
- fixPriority(92);
- setDetails(1550, 70, -1, -1, 2, (SceneItem *)NULL);
-}
-
-Scene1550::DishControlsWindow::DishControl::DishControl() {
- _controlId = 0;
-}
-
-void Scene1550::DishControlsWindow::DishControl::synchronize(Serializer &s) {
- SceneActor::synchronize(s);
-
- s.syncAsSint16LE(_controlId);
-}
-
-bool Scene1550::DishControlsWindow::DishControl::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- switch (_controlId) {
- case 1:
- // Button control
- if (scene->_dish._frame == 5) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 25;
- if (scene->_walkway._frame == 1) {
- scene->setAction(&scene->_sequenceManager1, scene, 1560, &scene->_walkway, NULL);
- R2_GLOBALS.setFlag(20);
- setFrame(2);
- } else {
- scene->setAction(&scene->_sequenceManager1, scene, 1561, &scene->_walkway, NULL);
- R2_GLOBALS.clearFlag(20);
- setFrame(1);
- }
- scene->_dishControlsWindow.remove();
+ case 22:
+ _dishControlsWindow.remove();
+ _sceneMode = 24;
+ setAction(&_sequenceManager1, this, 1561, &_walkway, NULL);
+ R2_GLOBALS.clearFlag(20);
+ break;
+ case 23:
+ _dishControlsWindow.remove();
+ _sceneMode = 20;
+ setAction(&_sequenceManager1, this, 1566, &_dish, &_dishTowerShadow, NULL);
+ R2_GLOBALS.setFlag(19);
+ break;
+ case 24:
+ _dishControlsWindow.remove();
+ _sceneMode = 21;
+ setAction(&_sequenceManager1, this, 1567, &_dish, &_dishTowerShadow, NULL);
+ R2_GLOBALS.clearFlag(19);
+ break;
+ case 30:
+ // No break on purpose
+ case 1556:
+ // No break on purpose
+ case 1557:
+ // Nothing on purpose
+ break;
+ case 40: {
+ _sceneMode = 41;
+ Common::Point pt(_junk[0]._position.x, _junk[0]._position.y + 20);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
}
break;
- case 2:
- // Lever control
- R2_GLOBALS._player.disableControl();
- if (scene->_dish._frame == 1) {
- scene->_sceneMode = 23;
- scene->setAction(&scene->_sequenceManager1, scene, 1560, this, NULL);
+ case 41:
+ _sceneMode = 42;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ R2_GLOBALS._player.setup(1502, 8, 1);
} else {
- if (scene->_walkway._frame == 1)
- scene->_sceneMode = 24;
- else
- scene->_sceneMode = 22;
- scene->setAction(&scene->_sequenceManager1, scene, 1561, this, NULL);
+ R2_GLOBALS._player.changeZoom(R2_GLOBALS._player._percent + 14);
+ R2_GLOBALS._player.setup(1516, 4, 1);
}
- break;
- default:
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
break;
- }
- return true;
-}
-
-void Scene1550::DishControlsWindow::remove() {
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- _button.remove();
- _lever.remove();
- ModalWindow::remove();
+ case 42: {
+ _sceneMode = 43;
+ int junkRegionIndex = R2_GLOBALS._scene1550JunkLocations[_junk[0]._junkNumber + 3];
+ R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[junkRegionIndex]);
- if ((scene->_sceneMode >= 20) && (scene->_sceneMode <= 29))
- return;
+ switch (_junk[0]._frame) {
+ case 1:
+ R2_INVENTORY.setObjectScene(R2_JOYSTICK, R2_GLOBALS._player._characterIndex);
+ break;
+ case 2:
+ R2_INVENTORY.setObjectScene(R2_FUEL_CELL, R2_GLOBALS._player._characterIndex);
+ break;
+ case 3:
+ R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, R2_GLOBALS._player._characterIndex);
+ break;
+ case 4:
+ R2_INVENTORY.setObjectScene(R2_RADAR_MECHANISM, R2_GLOBALS._player._characterIndex);
+ break;
+ case 5:
+ 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;
+ }
- R2_GLOBALS._player.disableControl();
- if (scene->_walkway._frame == 1) {
- scene->_sceneMode = 1559;
- scene->setAction(&scene->_sequenceManager1, scene, 1559, &R2_GLOBALS._player, NULL);
- } else {
- scene->_sceneMode = 1562;
- scene->setAction(&scene->_sequenceManager1, scene, 1562, &R2_GLOBALS._player, NULL);
+ _junk[0].remove();
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
}
-}
-
-void Scene1550::DishControlsWindow::setup2(int visage, int stripFrameNum, int frameNum,
- int posX, int posY) {
- // Call inherited setup
- ModalWindow::setup2(visage, stripFrameNum, frameNum, posX, posY);
-
- // Further setup
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- setup3(1550, 67, -1, -1);
- _button.postInit();
- _button._controlId = 1;
- if (scene->_walkway._frame == 1)
- _button.setup(1559, 3, 1);
- else
- _button.setup(1559, 3, 2);
- _button.setPosition(Common::Point(142, 79));
- _button.fixPriority(251);
- _button.setDetails(1550, 68, -1, -1, 2, (SceneItem *) NULL);
-
- _lever.postInit();
- _lever._numFrames = 5;
- _lever._controlId = 2;
- if (scene->_dish._frame == 1)
- _lever.setup(1559, 2, 1);
- else
- _lever.setup(1559, 2, 5);
- _lever.setPosition(Common::Point(156, 103));
- _lever.fixPriority(251);
- _lever.setDetails(1550, 69, -1, -1, 2, (SceneItem *) NULL);
-}
-
-bool Scene1550::WorkingShip::startAction(CursorType action, Event &event) {
- return SceneHotspot::startAction(action, event);
-}
-
-bool Scene1550::Wreckage::startAction(CursorType action, Event &event) {
- return SceneActor::startAction(action, event);
-}
-
-bool Scene1550::Companion::startAction(CursorType action, Event &event) {
- if (action != CURSOR_TALK)
- return SceneActor::startAction(action, event);
-
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- scene->_sceneMode = 80;
- scene->signal();
-
- return true;
-}
-
-bool Scene1550::AirBag::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- R2_GLOBALS._player.disableControl();
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- scene->_dontExit = true;
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->_sceneMode = 1552;
- else
- scene->_sceneMode = 1588;
-
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_airbag, NULL);
- return true;
-}
-
-bool Scene1550::Joystick::startAction(CursorType action, Event &event) {
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- switch (action) {
- case CURSOR_USE:
- scene->_sceneMode = 50;
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ case 43:
+ R2_GLOBALS._scene1550JunkLocations[_junk[0]._junkNumber + 2] = 0;
if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->_stripManager.start(518, scene);
- else
- scene->_stripManager.start(520, scene);
- return true;
- break;
- case CURSOR_LOOK:
- SceneItem::display(1550, 41, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- return true;
+ R2_GLOBALS._player.setVisage(1500);
+ else {
+ R2_GLOBALS._player.changeZoom(-1);
+ R2_GLOBALS._player.setVisage(1505);
+ }
+ R2_GLOBALS._player.animate(ANIM_MODE_1, this);
+ R2_GLOBALS._player.setStrip(8);
+ R2_GLOBALS._player.enableControl();
break;
- default:
- return SceneActor::startAction(action, event);
- }
-}
-
-bool Scene1550::Gyroscope::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- R2_GLOBALS._player.disableControl();
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->_sceneMode = 1555;
- else
- scene->_sceneMode = 1589;
-
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
- &scene->_gyroscope, NULL);
- return true;
-}
-
-bool Scene1550::DiagnosticsDisplay::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- R2_GLOBALS._player.disableControl();
- scene->_dontExit = true;
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->_sceneMode = 1586;
- else
- scene->_sceneMode = 1587;
-
- scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player,
- &scene->_diagnosticsDisplay, NULL);
- return true;
-}
-
-bool Scene1550::DishTower::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1585;
- scene->setAction(&scene->_sequenceManager1, scene, 1585, &R2_GLOBALS._player, NULL);
- } else {
- R2_GLOBALS._player.disableControl();
- switch(scene->_dishMode) {
- case 0:
- scene->_dish.fixPriority(168);
- scene->_walkway.fixPriority(125);
- scene->_sceneMode = 1558;
- scene->setAction(&scene->_sequenceManager1, scene, 1558, &R2_GLOBALS._player, NULL);
- break;
- case 1:
- return SceneActor::startAction(action, event);
- break;
- case 2:
- scene->_dishMode = 1;
- scene->_sceneMode = 1563;
- scene->setAction(&scene->_sequenceManager1, scene, 1563, &R2_GLOBALS._player, &scene->_walkway, NULL);
- break;
- default:
- break;
+ case 50:
+ // Removed (useless ?) call to sub_1D227
+ ++_sceneMode;
+ setAction(&_sequenceManager1, this, 1591, &R2_GLOBALS._player, NULL);
+ if (g_globals->_sceneObjects->contains(&_companion))
+ signal();
+ else {
+ _companion.postInit();
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ _companion.setVisage(1505);
+ else
+ _companion.setVisage(1500);
+ _companion.changeZoom(77);
+ _companion.setAction(&_sequenceManager2, this, 1590, &_companion, NULL);
+ _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
}
- }
- return true;
-
-}
-
-bool Scene1550::Dish::startAction(CursorType action, Event &event) {
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- switch (action) {
- case CURSOR_USE:
- if (scene->_dishMode != 2)
- return SceneActor::startAction(action, event);
-
- if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1564;
- scene->setAction(&scene->_sequenceManager1, scene, 1564, &R2_GLOBALS._player, NULL);
- } else
- SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- return true;
break;
- case CURSOR_LOOK:
- if (scene->_dishMode != 2)
- return SceneActor::startAction(action, event);
-
- if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) {
- SceneItem::display(1550, 74, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- } else
- SceneItem::display(1550, 64, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- return true;
+ case 51:
+ ++_sceneMode;
break;
- default:
- return SceneActor::startAction(action, event);
+ case 52:
+ _companion.changeZoom(-1);
+ _sceneMode = 1592;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_companion,
+ &_junk[0], &_joystick, NULL);
+ else
+ setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_companion,
+ &_junk[0], &_joystick, NULL);
break;
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Scene1550::Scene1550() {
- _dontExit = false;
- _wallType = 0;
- _dishMode = 0;
- _sceneResourceId = 0;
- _walkRegionsId = 0;
-}
-
-void Scene1550::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
-
- s.syncAsSint16LE(_dontExit);
- s.syncAsByte(_wallType);
- s.syncAsSint16LE(_dishMode);
- s.syncAsSint16LE(_sceneResourceId);
- s.syncAsSint16LE(_walkRegionsId);
-}
-
-void Scene1550::postInit(SceneObjectList *OwnerList) {
- 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);
- _sceneResourceId = 1550;
- _walkRegionsId = 0;
-
- if (R2_GLOBALS._sceneManager._previousScene == -1)
- R2_GLOBALS.setFlag(16);
-
- 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);
- _stripManager.setFontNumber(3);
- _stripManager.addSpeaker(&_quinnSpeaker);
- _stripManager.addSpeaker(&_seekerSpeaker);
-
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player._effect = EFFECT_SHADED2;
-
- 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._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));
-
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
- R2_GLOBALS._player.disableControl();
-
- _wallType = 0;
- _companion.changeZoom(-1);
- R2_GLOBALS._player.changeZoom(-1);
-
- switch (R2_GLOBALS._sceneManager._previousScene) {
- case 1530:
- R2_GLOBALS._stripModifier = 0;
- // No break on purpose
- case 300:
- // No break on purpose
- case 1500:
- // No break on purpose
- case 3150:
- R2_GLOBALS._sound1.play(105);
+ case 61:
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
+ _dishMode = 2;
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);
-
- _dontExit = true;
-
- _wreckage2.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, &_wreckage2, &_shipComponents[7], NULL);
- R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550;
- } else {
- R2_GLOBALS._player.enableControl();
+ case 62:
+ R2_GLOBALS._player.enableControl(CURSOR_TALK);
+ if (_dishMode == 2) {
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
}
break;
- default:
- break;
- }
-
- enterArea();
-
- _intactHull1.setDetails(16, 1550, 10, -1, -1);
- _intactHull2.setDetails(24, 1550, 10, -1, -1);
- _background.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(&_companion))
- _companion.postInit();
-
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _companion.setVisage(1505);
- else
- _companion.setVisage(1500);
-
- _companion.changeZoom(77);
- _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
-
- assert(_walkRegionsId >= 1550);
- R2_GLOBALS._walkRegions.disableRegion(k5A750[_walkRegionsId - 1550]);
-
- setAction(&_sequenceManager1, this, 1590, &_companion, NULL);
- } else if ((_sceneMode != 1577) && (_sceneMode != 1578))
- R2_GLOBALS._player.enableControl();
-}
-
-void Scene1550::signal() {
- switch (_sceneMode) {
- case 1:
- // No break on purpose
- case 3:
- // No break on purpose
- case 5:
- // No break on purpose
- case 7:
- _dontExit = false;
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- break;
- case 20:
- // No break on purpose
- case 21:
- // No break on purpose
- case 25:
- // No break on purpose
- case 1563:
- // Show the communication dish controls window
- R2_GLOBALS.clearFlag(20);
- _dishControlsWindow.setup2(1559, 1, 1, 160, 125);
- R2_GLOBALS._player.enableControl();
- _sceneMode = 0;
- break;
- case 22:
- _dishControlsWindow.remove();
- _sceneMode = 24;
- setAction(&_sequenceManager1, this, 1561, &_walkway, NULL);
- R2_GLOBALS.clearFlag(20);
- break;
- case 23:
- _dishControlsWindow.remove();
- _sceneMode = 20;
- setAction(&_sequenceManager1, this, 1566, &_dish, &_dishTowerShadow, NULL);
- R2_GLOBALS.setFlag(19);
- break;
- case 24:
- _dishControlsWindow.remove();
- _sceneMode = 21;
- setAction(&_sequenceManager1, this, 1567, &_dish, &_dishTowerShadow, NULL);
- R2_GLOBALS.clearFlag(19);
- break;
- case 30:
- // No break on purpose
- case 1556:
- // No break on purpose
- case 1557:
- // Nothing on purpose
- break;
- case 40: {
- _sceneMode = 41;
- Common::Point pt(_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 == R2_QUINN) {
- R2_GLOBALS._player.setup(1502, 8, 1);
- } else {
- R2_GLOBALS._player.changeZoom(R2_GLOBALS._player._percent + 14);
- R2_GLOBALS._player.setup(1516, 4, 1);
- }
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
-
- case 42: {
- _sceneMode = 43;
- int junkRegionIndex = R2_GLOBALS._scene1550JunkLocations[_junk[0]._junkNumber + 3];
- R2_GLOBALS._walkRegions.enableRegion(scene1550JunkRegions[junkRegionIndex]);
-
- switch (_junk[0]._frame) {
- case 1:
- R2_INVENTORY.setObjectScene(R2_JOYSTICK, R2_GLOBALS._player._characterIndex);
- break;
- case 2:
- R2_INVENTORY.setObjectScene(R2_FUEL_CELL, R2_GLOBALS._player._characterIndex);
- break;
- case 3:
- R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, R2_GLOBALS._player._characterIndex);
- break;
- case 4:
- R2_INVENTORY.setObjectScene(R2_RADAR_MECHANISM, R2_GLOBALS._player._characterIndex);
- break;
- case 5:
- 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;
- }
-
- _junk[0].remove();
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- }
- case 43:
- 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);
- R2_GLOBALS._player.setVisage(1505);
- }
- R2_GLOBALS._player.animate(ANIM_MODE_1, this);
- R2_GLOBALS._player.setStrip(8);
- R2_GLOBALS._player.enableControl();
- break;
- case 50:
- // Removed (useless ?) call to sub_1D227
- ++_sceneMode;
- setAction(&_sequenceManager1, this, 1591, &R2_GLOBALS._player, NULL);
- if (g_globals->_sceneObjects->contains(&_companion))
- signal();
- else {
- _companion.postInit();
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _companion.setVisage(1505);
- else
- _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:
- _companion.changeZoom(-1);
- _sceneMode = 1592;
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_companion,
- &_junk[0], &_joystick, NULL);
- else
- setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_companion,
- &_junk[0], &_joystick, NULL);
- break;
- case 61:
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- R2_GLOBALS._player._canWalk = false;
- _dishMode = 2;
- break;
- case 62:
- R2_GLOBALS._player.enableControl(CURSOR_TALK);
- if (_dishMode == 2) {
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- R2_GLOBALS._player._canWalk = false;
- }
- break;
- case 70:
- 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);
+ case 70:
+ 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);
break;
case 80:
if (R2_GLOBALS.getFlag(16)) {
@@ -3453,7191 +2574,5400 @@ void Scene1550::signal() {
// No break on purpose
case 1582:
_dontExit = false;
- _wreckage2.remove();
- R2_INVENTORY.setObjectScene(R2_FUEL_CELL, 0);
- R2_GLOBALS._player.enableControl();
- break;
- case 1575:
- // No break on purpose
- case 1583:
- _dontExit = false;
- _wreckage2.remove();
- R2_INVENTORY.setObjectScene(R2_BATTERY, 0);
- R2_GLOBALS._player.enableControl();
- break;
- case 1576:
- // No break on purpose
- case 1584:
- R2_GLOBALS._sceneManager.changeScene(1580);
- R2_GLOBALS._player.enableControl();
- break;
- case 1577:
- // No break on purpose
- case 1578:
- _sceneMode = 0;
- _wreckage2.remove();
- _dontExit = false;
- R2_GLOBALS._player.fixPriority(-1);
- R2_GLOBALS._player.enableControl();
- break;
- case 1585:
- SceneItem::display(1550, 66, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- R2_GLOBALS._player.enableControl();
- break;
- case 1586:
- // No break on purpose
- case 1587:
- R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, R2_GLOBALS._player._characterIndex);
- _diagnosticsDisplay.remove();
- _dontExit = false;
- R2_GLOBALS._player.enableControl();
- break;
- case 1592:
- _joystick.remove();
- R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_GLOBALS._s1550PlayerArea[R2_SEEKER] = R2_GLOBALS._s1550PlayerArea[R2_QUINN];
- } else {
- R2_GLOBALS._s1550PlayerArea[R2_QUINN] = R2_GLOBALS._s1550PlayerArea[R2_SEEKER];
- }
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- break;
- default:
- _sceneMode = 62;
- setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL);
- break;
- }
-}
-
-void Scene1550::process(Event &event) {
- if ((!R2_GLOBALS._player._canWalk) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) && (event.eventType == EVENT_BUTTON_DOWN) && (this->_screenNumber == 1234)) {
- int curReg = R2_GLOBALS._sceneRegions.indexOf(event.mousePos);
- if (curReg == 0)
- _dontExit = true;
- else if (((R2_GLOBALS._player._position.y < 90) && (event.mousePos.y > 90)) || ((R2_GLOBALS._player._position.y > 90) && (event.mousePos.y < 90)))
- _dontExit = true;
- else
- _dontExit = false;
-
- if ((curReg == 13) || (curReg == 14))
- _dontExit = false;
- }
-
- Scene::process(event);
-}
-
-void Scene1550::dispatch() {
- Scene::dispatch();
-
- // Arrays related to this scene are all hacky in the origina: they are based on the impossibility to use Miranda
- assert ((R2_GLOBALS._player._characterIndex == R2_QUINN) || (R2_GLOBALS._player._characterIndex == R2_SEEKER));
-
- if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 15) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 16)) {
- R2_GLOBALS._player._shade = 0;
-
- // NOTE: Original game contains a switch based on an uninitialized variable.
- // We're leaving this code here, but ifdef'ed out, in case we can ever figure out
- // what the original programmers intended the value to come from
-#if 0
- int missingVariable = 0;
- switch (missingVariable) {
- case 144:
- // No break on purpose
- case 146:
- _dish._frame = 5;
- R2_GLOBALS._player._shade = 3;
- break;
- case 148:
- // No break on purpose
- case 149:
- _dish._frame = 1;
- // No break on purpose
- case 147:
- // No break on purpose
- case 150:
- R2_GLOBALS._player._shade = 3;
- break;
- default:
- break;
- }
-#endif
- }
-
- if (_dontExit)
- return;
-
- switch (R2_GLOBALS._player.getRegionIndex() - 11) {
- case 0:
- // No break on purpose
- case 5:
- // Exiting the top of the screen
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1;
- _dontExit = true;
- --R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y;
-
- 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) {
- Common::Point pt(R2_GLOBALS._player._position.x + 5, 135);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- } else if (R2_GLOBALS._player._position.x <= 160) { // the check is really in the original...
- Common::Point pt(R2_GLOBALS._player._position.x, 135);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- } else {
- Common::Point pt(R2_GLOBALS._player._position.x - 5, 135);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- }
- break;
- case 1:
- // Exiting the bottom of the screen
- R2_GLOBALS._player.disableControl();
- _sceneMode = 3;
- _dontExit = true;
- ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y;
-
- 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) {
- Common::Point pt(R2_GLOBALS._player._position.x + 5, 29);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- } else if (R2_GLOBALS._player._position.x <= 160) { // the check is really in the original...
- Common::Point pt(R2_GLOBALS._player._position.x, 29);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- } else {
- Common::Point pt(R2_GLOBALS._player._position.x - 5, 29);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- }
- break;
- case 2:
- // Exiting the right of the screen
- R2_GLOBALS._player.disableControl();
- _sceneMode = 5;
- _dontExit = true;
- ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x;
-
- enterArea();
-
- 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);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- } else {
- R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 10));
- Common::Point pt(R2_GLOBALS._player._position.x + 30, R2_GLOBALS._player._position.y - 20);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- }
- } else {
- R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y));
- Common::Point pt(R2_GLOBALS._player._position.x + 10, R2_GLOBALS._player._position.y);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- }
- break;
- case 3:
- // Exiting to the left of the screen
- R2_GLOBALS._player.disableControl();
- _sceneMode = 7;
- _dontExit = true;
- --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._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);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- } else {
- R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 10));
- Common::Point pt(R2_GLOBALS._player._position.x - 30, R2_GLOBALS._player._position.y - 20);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- }
- } else {
- R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y));
- Common::Point pt(R2_GLOBALS._player._position.x - 10, R2_GLOBALS._player._position.y);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- }
- break;
- default:
- break;
- }
-}
-
-void Scene1550::saveCharacter(int characterIndex) {
- if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
- R2_GLOBALS._sound1.fadeOut2(NULL);
-
- SceneExt::saveCharacter(characterIndex);
-}
-
-void Scene1550::Wall::setupWall(int frameNumber, int strip) {
- Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
-
- postInit();
- if (scene->_wallType == 2)
- setup(1551, strip, frameNumber);
- else
- setup(1554, strip, frameNumber);
-
- switch (strip) {
- case 0:
- switch (frameNumber - 1) {
- case 0:
- setup(1551, 1, 1);
- setPosition(Common::Point(30, 67));
- break;
- case 1:
- setup(1560, 1, 5);
- setPosition(Common::Point(141, 54));
- break;
- case 2:
- setup(1560, 2, 5);
- setPosition(Common::Point(178, 54));
- break;
- case 3:
- setup(1560, 2, 1);
- setPosition(Common::Point(289, 67));
- break;
- case 4:
- setup(1560, 2, 2);
- setPosition(Common::Point(298, 132));
- break;
- case 5:
- setup(1560, 1, 2);
- setPosition(Common::Point(21, 132));
- break;
- case 6:
- setup(1560, 2, 4);
- setPosition(Common::Point(285, 123));
- break;
- case 7:
- setup(1560, 1, 3);
- setPosition(Common::Point(30, 111));
- break;
- case 8:
- setup(1560, 2, 3);
- setPosition(Common::Point(289, 111));
- break;
- case 9:
- setup(1560, 1, 4);
- setPosition(Common::Point(34, 123));
- break;
- default:
- break;
- }
- fixPriority(1);
- break;
- case 1:
- if (frameNumber == 3) {
- setup(1553, 3, 1);
- setPosition(Common::Point(48, 44));
- fixPriority(2);
- } else {
- fixPriority(1);
- setPosition(Common::Point(32, 17));
- }
-
- switch (frameNumber) {
- case 2:
- setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 3:
- setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
- break;
- default:
- setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
- break;
- }
- break;
- case 2:
- fixPriority(1);
- switch (frameNumber) {
- case 4:
- setup(1553, 4, 1);
- setPosition(Common::Point(48, 168));
- break;
- case 5:
- setup(1553, 3, 2);
- setPosition(Common::Point(20, 168));
- fixPriority(250);
- break;
- default:
- setPosition(Common::Point(28, 116));
- break;
- }
-
- switch (frameNumber) {
- case 2:
- setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 4:
- setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 5:
- setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
- break;
- default:
- setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
- break;
- }
- break;
- case 3:
- switch (frameNumber) {
- case 2:
- fixPriority(2);
- if (scene->_wallType == 2)
- setup(1553, 2, 1);
- else
- setup(1556, 2, 1);
- setPosition(Common::Point(160, 44));
- break;
- case 3:
- fixPriority(2);
- setup(1553, 5, 1);
- setPosition(Common::Point(178, 44));
- break;
- default:
- fixPriority(1);
- setPosition(Common::Point(160, 17));
- break;
- }
-
- if (frameNumber == 1)
- setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
- else
- setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 4:
- if (frameNumber == 2) {
- fixPriority(250);
- if (scene->_wallType == 2)
- setup(1553, 1, 1);
- else
- setup(1556, 1, 1);
- } else {
- fixPriority(2);
- }
-
- if (frameNumber != 1)
- setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
-
- setPosition(Common::Point(160, 168));
- break;
- case 5:
- fixPriority(1);
- setPosition(Common::Point(287, 17));
-
- switch (frameNumber) {
- case 2:
- setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 3:
- setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
- break;
- default:
- setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
- break;
- }
- break;
- case 6:
- fixPriority(1);
- setPosition(Common::Point(291, 116));
-
- if (frameNumber == 2)
- setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
- else
- setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
- break;
- default:
- break;
- }
-
-}
-
-void Scene1550::enterArea() {
- _walkRegionsId = 0;
- _dishMode = 0;
-
- _wallCorner1.remove();
- _westWall.remove();
- _northWall.remove();
- _southWall.remove();
- _wallCorner2.remove();
- _eastWall.remove();
-
- for (int i = 0; i < 8; ++i)
- _junk[i].remove();
-
- _wreckage.remove();
-
- for (int i = 0; i < 8; ++i)
- _shipComponents[i].remove();
-
- _airbag.remove();
- _joystick.remove();
- _gyroscope.remove();
- _wreckage4.remove();
- _diagnosticsDisplay.remove();
-
- if ((_sceneMode != 1577) && (_sceneMode != 1578))
- _wreckage2.remove();
-
- _wreckage3.remove();
- _companion.remove();
- _dish.remove();
- _dishTowerShadow.remove();
- _dishTower.remove();
- _walkway.remove();
-
- // Set up of special walk regions for certain areas
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y) {
- case 0:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
- case 3:
- R2_GLOBALS._walkRegions.load(1554);
- _walkRegionsId = 1554;
- break;
- case 4:
- R2_GLOBALS._walkRegions.load(1553);
- _walkRegionsId = 1553;
- break;
- default:
- break;
- }
- break;
- case 3:
- // No break on purpose
- case 4:
- 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);
- _walkRegionsId = 1559;
- }
- }
- break;
- case 7:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
- case 10:
- R2_GLOBALS._walkRegions.load(1555);
- _walkRegionsId = 1555;
- break;
- case 11:
- R2_GLOBALS._walkRegions.load(1556);
- _walkRegionsId = 1556;
- break;
- default:
- break;
- }
- break;
- case 11:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
- case 24:
- R2_GLOBALS._walkRegions.load(1558);
- _walkRegionsId = 1558;
- break;
- case 25:
- R2_GLOBALS._walkRegions.load(1557);
- _walkRegionsId = 1557;
- break;
- default:
- break;
- }
- break;
- case 16:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
- case 2:
- R2_GLOBALS._walkRegions.load(1552);
- _walkRegionsId = 1552;
- break;
- case 3:
- R2_GLOBALS._walkRegions.load(1551);
- _walkRegionsId = 1551;
- break;
- case 15:
- R2_GLOBALS._walkRegions.load(1575);
- _walkRegionsId = 1575;
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- int varA = 0;
-
- // This section handles checks if the ARM spacecraft have not yet seized
- // control of Lance of Truth.
- if (!R2_GLOBALS.getFlag(16)) {
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y - 2) {
- case 0:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 22) {
- case 0:
- varA = 1553;
- _northWall.setupWall(6, 0);
- break;
- case 1:
- // No break on purpose
- case 2:
- // No break on purpose
- case 3:
- // No break on purpose
- case 4:
- varA = 1553;
- break;
- case 5:
- varA = 1553;
- _northWall.setupWall(6, 0);
- break;
- default:
- break;
- }
- break;
- case 1:
- // No break on purpose
- case 2:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) {
- case 0:
- varA = 1550;
- _northWall.setupWall(9, 0);
- break;
- case 1:
- varA = 1552;
- _northWall.setupWall(10, 0);
- break;
- case 2:
- // No break on purpose
- case 3:
- // No break on purpose
- case 4:
- // No break on purpose
- case 5:
- varA = 1552;
- break;
- case 6:
- varA = 1552;
- _northWall.setupWall(7, 0);
- break;
- case 7:
- varA = 1550;
- _northWall.setupWall(8, 0);
- break;
- default:
- break;
- }
- break;
- case 3:
- switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) {
- case 0:
- varA = 1550;
- _northWall.setupWall(4, 0);
- break;
- case 1:
- varA = 1550;
- _northWall.setupWall(3, 0);
- break;
- case 2:
- // No break on purpose
- case 3:
- // No break on purpose
- case 4:
- // No break on purpose
- case 5:
- varA = 1551;
- break;
- case 6:
- varA = 1550;
- _northWall.setupWall(2, 0);
- break;
- case 7:
- varA = 1550;
- _northWall.setupWall(1, 0);
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- 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))) {
- // In an area where the cutscene can be triggered, so start it
- R2_GLOBALS.setFlag(16);
- R2_GLOBALS._sceneManager.changeScene(1500);
- }
- }
-
- 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;
- _wallType = 0;
- }
- } else if (_screenNumber == 1234) {
- R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE;
- loadScene(1550);
- R2_GLOBALS._sceneManager._hasPalette = false;
- }
-
- if (_screenNumber == 1234)
- _walkRegionsId = 1576;
-
- if (_wallType == 0) {
- _wallType = 1;
- } else {
- if (_wallType == 2) {
- _wallType = 3;
- } else {
- _wallType = 2;
- }
-
- if (R2_GLOBALS._sceneManager._sceneNumber == 1550){
-#if 0
- warning("Mouse_hideIfNeeded()");
- warning("gfx_set_pane_p");
- for (int i = 3; i != 168; ++i) {
- warning("sub294D2(4, i, 312, var14C)");
- warning("missing for loop, to be implemented");
- warning("gfx_draw_slice");
- }
- warning("gfx_flip_screen()");
- warning("gfx_set_pane_p()");
-#endif
- R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE;
-
- if (varA == 0) {
- if (_sceneResourceId != 1550) {
- g_globals->_scenePalette.loadPalette(1550);
- R2_GLOBALS._sceneManager._hasPalette = true;
- }
- } else {
- g_globals->_scenePalette.loadPalette(varA);
- R2_GLOBALS._sceneManager._hasPalette = true;
- }
-
- if (R2_GLOBALS._sceneManager._hasPalette)
- _sceneResourceId = varA;
-
-// warning("sub_2C429()");
- }
- }
-
- // 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 (_walkRegionsId == 0) {
- R2_GLOBALS._walkRegions.load(1550);
- _walkRegionsId = 1550;
- }
- break;
- case 1:
- // North end of the spaceport
- if (_walkRegionsId == 0) {
- R2_GLOBALS._walkRegions.load(1560);
- _walkRegionsId = 1560;
- }
- _wallCorner1.setupWall(2, 1);
- _northWall.setupWall(1, 3);
- _wallCorner2.setupWall(2, 5);
- break;
- case 2:
- R2_GLOBALS._walkRegions.load(1561);
- _walkRegionsId = 1561;
- _wallCorner1.setupWall(2, 1);
- _westWall.setupWall(2, 2);
- _northWall.setupWall(1, 3);
- _wallCorner2.setupWall(2, 5);
- break;
- case 3:
- R2_GLOBALS._walkRegions.load(1562);
- _walkRegionsId = 1562;
- _wallCorner1.setupWall(2, 1);
- _northWall.setupWall(1, 3);
- _wallCorner2.setupWall(2, 5);
- _eastWall.setupWall(2, 6);
- break;
- case 4:
- R2_GLOBALS._walkRegions.load(1563);
- _walkRegionsId = 1563;
- _northWall.setupWall(2, 3);
- break;
- case 5:
- R2_GLOBALS._walkRegions.load(1564);
- _walkRegionsId = 1564;
- _southWall.setupWall(2, 4);
- break;
- case 6:
- R2_GLOBALS._walkRegions.load(1565);
- _walkRegionsId = 1565;
- _wallCorner1.setupWall(1, 1);
- _westWall.setupWall(1, 2);
- _northWall.setupWall(3, 3);
- break;
- case 7:
- R2_GLOBALS._walkRegions.load(1566);
- _walkRegionsId = 1566;
- _wallCorner1.setupWall(1, 1);
- _westWall.setupWall(1, 2);
- _northWall.setupWall(2, 4);
- break;
- case 8:
- R2_GLOBALS._walkRegions.load(1567);
- _walkRegionsId = 1567;
- _westWall.setupWall(5, 2);
- break;
- case 9:
- R2_GLOBALS._walkRegions.load(1568);
- _walkRegionsId = 1568;
- _westWall.setupWall(4, 2);
- break;
- case 10:
- R2_GLOBALS._walkRegions.load(1569);
- _walkRegionsId = 1569;
- _wallCorner1.setupWall(3, 1);
- break;
- case 11:
- R2_GLOBALS._walkRegions.load(1570);
- _walkRegionsId = 1570;
- _wallCorner1.setupWall(1, 1);
- _westWall.setupWall(1, 2);
- break;
- case 12:
- R2_GLOBALS._walkRegions.load(1571);
- _walkRegionsId = 1571;
- _wallCorner2.setupWall(1, 5);
- _eastWall.setupWall(1, 6);
- break;
- case 13:
- R2_GLOBALS._walkRegions.load(1572);
- _walkRegionsId = 1572;
- _wallCorner1.setupWall(1, 1);
- _westWall.setupWall(1, 2);
- _southWall.setupWall(1, 4);
- break;
- case 14:
- R2_GLOBALS._walkRegions.load(1573);
- _walkRegionsId = 1573;
- _southWall.setupWall(1, 4);
- _wallCorner2.setupWall(1, 5);
- _eastWall.setupWall(1, 6);
- break;
- case 15:
- // South wall
- R2_GLOBALS._walkRegions.load(1574);
- _walkRegionsId = 1574;
- _southWall.setupWall(1, 4);
- break;
- case 16:
- R2_GLOBALS._walkRegions.load(1570);
- _walkRegionsId = 1570;
- _wallCorner1.setupWall(2, 1);
- _westWall.setupWall(2, 2);
- break;
- case 17:
- R2_GLOBALS._walkRegions.load(1570);
- _walkRegionsId = 1570;
- _wallCorner1.setupWall(2, 1);
- _westWall.setupWall(3, 2);
- break;
- case 18:
- R2_GLOBALS._walkRegions.load(1571);
- _walkRegionsId = 1571;
- _wallCorner2.setupWall(2, 5);
- _eastWall.setupWall(2, 6);
- break;
- case 19:
- R2_GLOBALS._walkRegions.load(1571);
- _walkRegionsId = 1571;
- _wallCorner2.setupWall(2, 5);
- _eastWall.setupWall(3, 6);
- break;
- default:
- break;
- }
-
- int di = 0;
- int tmpIdx = 0;
- 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 = EFFECT_SHADED2;
- _junk[di]._shade = 0;
- //_junk[di]._junkState = 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.disableRegion(scene1550JunkRegions[2]);
- R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[3]);
- R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[6]);
- R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[7]);
-
- if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1550) {
- _joystick.postInit();
- _joystick.setup(1562, 3, 1);
- _joystick.setPosition(Common::Point(150, 70));
- _joystick.fixPriority(10);
- _joystick.setDetails(1550, 41, -1, 42, 2, (SceneItem *) NULL);
- }
- } else {
- if (R2_GLOBALS._scene1550JunkLocations[i + 2] > 40) {
- _junk[di].changeZoom(100);
- _junk[di].setup(1561, 1, R2_GLOBALS._scene1550JunkLocations[i + 2] - 40);
- } else {
- _junk[di].changeZoom(-1);
- _junk[di].setup(1552, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) / 5) + 1, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) % 5) + 1);
- }
- _junk[di].setPosition(Common::Point(scene1550JunkX[tmpIdx], scene1550JunkY[tmpIdx]));
- if (scene1550JunkRegions[tmpIdx] != 0)
- R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[tmpIdx]);
- di++;
- }
- }
- }
-
- // Loop for detecting and setting up certain special areas within the map
- for (int i = 0; i < 15 * 3; i += 3) {
- if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == scene1550SpecialAreas[i])
- && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == scene1550SpecialAreas[i + 1])) {
- int areaType = scene1550SpecialAreas[i + 2];
- switch (areaType) {
- case 1:
- if (!R2_GLOBALS.getFlag(16)) {
- _wreckage2.postInit();
- if (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 3)
- _wreckage2.setup(1555, 2, 1);
- else
- _wreckage2.setup(1555, 1, 1);
- _wreckage2.setPosition(Common::Point(150, 100));
- _wreckage2.fixPriority(92);
- _wreckage2.setDetails(1550, 73, -1, -1, 2, (SceneItem *) NULL);
- }
- break;
- case 2:
- _dish.postInit();
- if (R2_GLOBALS.getFlag(19))
- _dish.setup(1556, 3, 5);
- else
- _dish.setup(1556, 3, 1);
- _dish.changeZoom(95);
- _dish.setPosition(Common::Point(165, 83));
- _dish.fixPriority(168);
- _dish.setDetails(1550, 17, -1, 19, 2, (SceneItem *) NULL);
-
- _dishTower.postInit();
- _dishTower.setup(1556, 4, 1);
- _dishTower.setPosition(Common::Point(191, 123));
- _dishTower.changeZoom(95);
- _dishTower.setDetails(1550, 65, -1, 66, 2, (SceneItem *) NULL);
-
- _dishTowerShadow.postInit();
- _dishTowerShadow._numFrames = 5;
- if (R2_GLOBALS.getFlag(19))
- _dishTowerShadow.setup(1556, 8, 5);
- else
- _dishTowerShadow.setup(1556, 8, 1);
-
- _dishTowerShadow.setPosition(Common::Point(156, 151));
- _dishTowerShadow.fixPriority(10);
-
- _walkway.postInit();
- if (R2_GLOBALS.getFlag(20))
- _walkway.setup(1558, 3, 10);
- else
- _walkway.setup(1558, 3, 1);
-
- _walkway.setPosition(Common::Point(172, 48));
- _walkway.fixPriority(169);
- R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[15]);
- break;
- case 3:
- _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);
-
- _wreckage2.postInit();
- _wreckage2.setup(1550, 1, 2);
- _wreckage2.setPosition(Common::Point(259, 133));
- _wreckage2.fixPriority(105);
- _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
- if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 1550) {
- _gyroscope.postInit();
- _gyroscope.setup(1550, 7, 2);
- _gyroscope.setPosition(Common::Point(227, 30));
- _gyroscope.fixPriority(130);
- _gyroscope.setDetails(1550, 29, -1, 63, 2, (SceneItem *) NULL);
- }
- break;
- case 4:
- _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);
-
- _wreckage2.postInit();
- _wreckage2.setup(1550, 1, 3);
- _wreckage2.setPosition(Common::Point(76, 64));
- _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
- if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1550) {
- _diagnosticsDisplay.postInit();
- _diagnosticsDisplay.setup(1504, 4, 1);
- _diagnosticsDisplay.setPosition(Common::Point(49, 35));
- _diagnosticsDisplay.animate(ANIM_MODE_2, NULL);
- _diagnosticsDisplay._numFrames = 4;
- _diagnosticsDisplay.fixPriority(65);
- _diagnosticsDisplay.setDetails(1550, 14, 15, 63, 2, (SceneItem *) NULL);
- }
- if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1550) {
- _airbag.postInit();
- _airbag.setup(1550, 7, 1);
- _airbag.setPosition(Common::Point(45, 44));
- _airbag.fixPriority(150);
- _airbag.setDetails(1550, 44, -1, 63, 2, (SceneItem *) NULL);
- }
- break;
- case 5:
- _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);
-
- _wreckage2.postInit();
- _wreckage2.setup(1550, 2, 3);
- _wreckage2.setPosition(Common::Point(243, 64));
- _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 6:
- _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);
-
- _wreckage2.postInit();
- _wreckage2.setup(1550, 2, 2);
- _wreckage2.setPosition(Common::Point(60, 133));
- _wreckage2.fixPriority(106);
- _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 7:
- _wreckage.postInit();
- _wreckage.setup(1550, 3, 1);
- _wreckage.setPosition(Common::Point(281, 132));
- _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 8:
- _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);
-
- _wreckage2.postInit();
- _wreckage2.setup(1550, 3, 3);
- _wreckage2.setPosition(Common::Point(145, 88));
- _wreckage2.fixPriority(55);
- _wreckage2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
-
- _wreckage3.postInit();
- _wreckage3.setup(1550, 3, 4);
- _wreckage3.setPosition(Common::Point(64, 137));
- _wreckage3.fixPriority(115);
- _wreckage3.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
-
- _wreckage4.postInit();
- _wreckage4.setup(1550, 5, 1);
- _wreckage4.setPosition(Common::Point(60, 90));
- _wreckage4.fixPriority(45);
- break;
- case 9:
- _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);
-
- _wreckage2.postInit();
- _wreckage2.setup(1550, 4, 3);
- _wreckage2.setPosition(Common::Point(174, 88));
- _wreckage2.fixPriority(55);
- _wreckage2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
-
- _wreckage3.postInit();
- _wreckage3.setup(1550, 4, 4);
- _wreckage3.setPosition(Common::Point(255, 137));
- _wreckage3.fixPriority(115);
- _wreckage3.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
-
- _wreckage4.postInit();
- _wreckage4.setup(1550, 6, 1);
- _wreckage4.setPosition(Common::Point(259, 90));
- _wreckage4.fixPriority(45);
- break;
- case 10:
- _wreckage.postInit();
- _wreckage.setup(1550, 4, 1);
- _wreckage.setPosition(Common::Point(38, 132));
- _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
- break;
- case 12:
- // 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);
- break;
- default:
- break;
- }
- }
- }
-
- if (R2_GLOBALS._s1550PlayerArea[R2_QUINN] == R2_GLOBALS._s1550PlayerArea[R2_SEEKER]) {
- _companion.postInit();
- _companion._effect = EFFECT_SHADED2;
- _companion.changeZoom(-1);
-
- assert((_walkRegionsId >= 1550) && (_walkRegionsId <= 2008));
- R2_GLOBALS._walkRegions.disableRegion(k5A750[_walkRegionsId - 1550]);
- _companion.setPosition(Common::Point(scene1550JunkX[k5A76D[_walkRegionsId - 1550]], scene1550JunkY[k5A76D[_walkRegionsId - 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 {
- _companion.setup(1505, 6, 1);
- _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
- }
- } else {
- 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 {
- _companion.setup(1500, 6, 1);
- _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
- }
- }
- }
- R2_GLOBALS._uiElements.updateInventory();
-}
-
-/*--------------------------------------------------------------------------
- * Scene 1575 - Spaceport - unused ship scene
- *
- *--------------------------------------------------------------------------*/
-
-Scene1575::Button::Button() {
- _buttonId = 0;
- _pressed = false;
-}
-
-void Scene1575::Button::synchronize(Serializer &s) {
- NamedHotspot::synchronize(s);
-
- s.syncAsSint16LE(_buttonId);
- s.syncAsSint16LE(_pressed);
-}
-
-void Scene1575::Button::process(Event &event) {
- Scene1575 *scene = (Scene1575 *)R2_GLOBALS._sceneManager._scene;
- bool isInBounds = _bounds.contains(event.mousePos);
- CursorType cursor = R2_GLOBALS._events.getCursor();
-
- if ((event.eventType == EVENT_BUTTON_DOWN && cursor == CURSOR_USE && isInBounds) ||
- (_pressed && _buttonId != 1 && event.eventType == EVENT_BUTTON_UP && isInBounds)) {
- // Button pressed
- _pressed = true;
- Common::Point pos = scene->_actor1._position;
- event.handled = true;
-
- if (!R2_GLOBALS.getFlag(18) || _buttonId <= 1 || _buttonId >= 6) {
- switch (_buttonId) {
- case 1:
- if (R2_GLOBALS.getFlag(18)) {
- scene->_actor14.hide();
- scene->_actor15.hide();
- R2_GLOBALS.clearFlag(18);
- } else if ((scene->_actor12._position.x == 85) && (scene->_actor12._position.y == 123)) {
- scene->_actor14.show();
- scene->_actor15.show();
- R2_GLOBALS.setFlag(18);
- } else {
- SceneItem::display("That's probably not a good thing, ya know!");
- }
- break;
- case 2:
- if (scene->_field41A < 780) {
- if (pos.x > 54)
- pos.x -= 65;
- pos.x += 2;
- scene->_field41A += 2;
-
- for (int i = 0; i < 17; i++)
- scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y));
-
- scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y));
- scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y));
- scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
- scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
- scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
- }
- break;
- case 3:
- if (scene->_field41A > 0) {
- if (pos.x < -8)
- pos.x += 65;
-
- pos.x -= 2;
- scene->_field41A -= 2;
- for (int i = 0; i < 17; i++)
- scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y));
-
- scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y));
- scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y));
- scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
- scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
- scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
- }
- break;
- case 4: {
- if (pos.y < 176) {
- ++pos.y;
- for (int i = 0; i < 17; ++i)
- scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y + 1));
-
- scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y + 1));
- scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y + 1));
- scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
- scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
- scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
- }
- }
- break;
- case 5: {
- if (pos.y > 145) {
- --pos.y;
- for (int i = 0; i < 17; ++i)
- scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y - 1));
-
- scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y - 1));
- scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y - 1));
- scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
- scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
- scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
- }
- }
- break;
- case 6:
- R2_GLOBALS._sceneManager.changeScene(1550);
- break;
- default:
- break;
- }
-
- int j = 0;
- for (int i = 0; i < 17; i++) {
- if (scene->_arrActor[i]._bounds.contains(85, 116))
- j = i;
- }
-
- if (scene->_actor13._bounds.contains(85, 116))
- j = 18;
-
- if (scene->_actor12._bounds.contains(85, 116))
- j = 19;
-
- if (j)
- scene->_actor11.show();
- else
- scene->_actor11.hide();
- } else {
- SceneItem::display("Better not move the laser while it's firing!");
- }
- } else {
- _pressed = false;
- }
-}
-
-bool Scene1575::Button::startAction(CursorType action, Event &event) {
- if (action == CURSOR_USE)
- return false;
- return SceneHotspot::startAction(action, event);
-}
-
-void Scene1575::Button::initButton(int buttonId) {
- _buttonId = buttonId;
- _pressed = false;
- EventHandler::postInit();
-
- switch (_buttonId) {
- case 1:
- setDetails(Rect(53, 165, 117, 190), -1, -1, -1, 2, 1, NULL);
- break;
- case 2:
- setDetails(Rect(151, 142, 189, 161), -1, -1, -1, 2, 1, NULL);
- break;
- case 3:
- setDetails(Rect(225, 142, 263, 161), -1, -1, -1, 2, 1, NULL);
- break;
- case 4:
- setDetails(Rect(188, 122, 226, 140), -1, -1, -1, 2, 1, NULL);
- break;
- case 5:
- setDetails(Rect(188, 162, 226, 180), -1, -1, -1, 2, 1, NULL);
- break;
- case 6:
- setDetails(Rect(269, 169, 301, 185), -1, -1, -1, 2, 1, NULL);
- break;
- default:
- break;
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Scene1575::Scene1575() {
- _field412 = 0;
- _field414 = 390;
- _field416 = 0;
- _field418 = 0;
- _field41A = 0;
-}
-
-void Scene1575::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
-
- s.syncAsSint16LE(_field412);
- s.syncAsSint16LE(_field414);
- s.syncAsSint16LE(_field416);
- s.syncAsSint16LE(_field418);
- s.syncAsSint16LE(_field41A);
-}
-
-double hypotenuse(double v1, double v2) {
- return sqrt(v1 * v1 + v2 * v2);
-}
-
-void Scene1575::postInit(SceneObjectList *OwnerList) {
- loadScene(1575);
- R2_GLOBALS._uiElements._active = false;
- SceneExt::postInit();
- R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
-
- _actor1.postInit();
- _actor1.setup(1575, 1, 1);
- _actor1.setPosition(Common::Point(54, 161));
- _actor1.fixPriority(5);
-
- _actor2.postInit();
- _actor2.setup(1575, 1, 1);
- _actor2.setPosition(Common::Point(119, 161));
- _actor2.fixPriority(5);
-
- _actor3.postInit();
- _actor3.setup(1575, 1, 1);
- _actor3.setPosition(Common::Point(184, 161));
- _actor3.fixPriority(5);
-
- for (int i = 0; i < 17; i++) {
- _arrActor[i].postInit();
- _arrActor[i].setup(1575, 2, k5A7F6[3 * i + 2]);
-
- double v1 = hypotenuse(2.0, 3 - k5A7F6[3 * i]);
- v1 += hypotenuse(2.0, 3 - k5A7F6[3 * i + 1]);
- int yp = (int)(sqrt(v1) * 75.0 / 17.0 - 161.0);
-
- int angle = R2_GLOBALS._gfxManagerInstance.getAngle(
- Common::Point(3, 16), Common::Point(k5A7F6[3 * i], k5A7F6[3 * i + 1]));
- int xp = angle * 78 / 9 - 319;
-
- _arrActor[i].setPosition(Common::Point(xp, yp));
- _arrActor[i].fixPriority(6);
- }
-
- _actor4.postInit();
- _actor4.setup(1575, 3, 1);
- _actor4.setPosition(Common::Point(48, 81));
-
- _actor5.postInit();
- _actor5.setup(1575, 3,1);
- _actor5.setPosition(Common::Point(121, 81));
-
- _actor6.postInit();
- _actor6.setup(1575, 3, 2);
- _actor6.setPosition(Common::Point(203, 80));
-
- _actor7.postInit();
- _actor7.setup(1575, 3, 2);
- _actor7.setPosition(Common::Point(217, 80));
-
- _actor8.postInit();
- _actor8.setup(1575, 3, 2);
- _actor8.setPosition(Common::Point(231, 80));
-
- _actor9.postInit();
- _actor9.setup(1575, 3, 2);
- _actor9.setPosition(Common::Point(273, 91));
-
- _actor10.postInit();
- _actor10.setup(1575, 3, 2);
- _actor10.setPosition(Common::Point(287, 91));
-
- // Initialize buttons
- _button1.initButton(1);
- _button2.initButton(2);
- _button3.initButton(3);
- _button4.initButton(4);
- _button5.initButton(5);
- _button6.initButton(6);
-
- _actor11.postInit();
- _actor11.setup(1575, 4, 2);
- _actor11.setPosition(Common::Point(84, 116));
- _actor11.hide();
-
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.hide();
- R2_GLOBALS._player.enableControl();
-
- do {
- _field412 = R2_GLOBALS._randomSource.getRandomNumber(20) - 10;
- _field414 = R2_GLOBALS._randomSource.getRandomNumber(20) - 10;
- } while ((_field412) && (_field414));
-
- if (_field412 < 0)
- _actor4.hide();
-
- if (_field414 < 0)
- _actor5.hide();
-
- _field416 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
- _field418 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
-
- _actor13.postInit();
- _actor13.setup(1575, 2, 4);
-
- // TODO
- warning("TODO: another immense pile of floating operations");
-
- _actor12.postInit();
- _actor12.fixPriority(12);
-
- if (R2_GLOBALS.getFlag(17)) {
- _actor13.setPosition(Common::Point(_actor13._position.x + 5, _actor13._position.y));
- _actor12.setPosition(Common::Point(_actor12._position.x + 5, _actor12._position.y));
- }
-
- _actor14.postInit();
- _actor14.setup(1575, 5, 1);
- _actor14.setPosition(Common::Point(85, 176));
- _actor14.fixPriority(7);
- _actor14.hide();
-
- _actor15.postInit();
- _actor15.setup(1575, 5, 2);
- _actor15.setPosition(Common::Point(85, 147));
- _actor15.fixPriority(7);
- _actor15.hide();
-}
-
-void Scene1575::remove() {
- SceneExt::remove();
- R2_GLOBALS._uiElements._active = true;
-}
-
-void Scene1575::signal() {
- R2_GLOBALS._player.enableControl();
-}
-
-void Scene1575::process(Event &event) {
- Scene::process(event);
-
- g_globals->_sceneObjects->recurse(SceneHandler::dispatchObject);
-}
-
-void Scene1575::dispatch() {
- if (_field412 <= 0) {
- ++_field412;
- if (_field412 == 0) {
- _actor4.show();
- _field412 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
- }
- } else {
- _field412--;
- if (_field412 ==0) {
- _actor4.hide();
- _field412 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
- }
- }
-
- if (_field414 <= 0) {
- ++_field414;
- if (_field414 == 0) {
- _actor5.show();
- _field414 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
- }
- } else {
- _field414--;
- if (_field414 == 0) {
- _actor5.hide();
- _field414 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
- }
- }
-
- if (_field416 == 0) {
- switch(R2_GLOBALS._randomSource.getRandomNumber(3)) {
- case 0:
- _actor6.hide();
- _actor7.hide();
- _actor8.hide();
- break;
- case 1:
- _actor6.show();
- _actor7.hide();
- _actor8.hide();
- break;
- case 2:
- _actor6.show();
- _actor7.show();
- _actor8.hide();
- break;
- case 3:
- _actor6.show();
- _actor7.show();
- _actor8.show();
- break;
- default:
- break;
- }
- _field416 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
- } else {
- --_field416;
- }
-
- if (_field418 == 0) {
- switch(R2_GLOBALS._randomSource.getRandomNumber(2)) {
- case 0:
- _actor9.hide();
- _actor10.hide();
- break;
- case 1:
- _actor9.show();
- _actor10.hide();
- break;
- case 2:
- _actor9.show();
- _actor10.show();
- break;
- default:
- break;
+ _wreckage2.remove();
+ R2_INVENTORY.setObjectScene(R2_FUEL_CELL, 0);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1575:
+ // No break on purpose
+ case 1583:
+ _dontExit = false;
+ _wreckage2.remove();
+ R2_INVENTORY.setObjectScene(R2_BATTERY, 0);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1576:
+ // No break on purpose
+ case 1584:
+ R2_GLOBALS._sceneManager.changeScene(1580);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1577:
+ // No break on purpose
+ case 1578:
+ _sceneMode = 0;
+ _wreckage2.remove();
+ _dontExit = false;
+ R2_GLOBALS._player.fixPriority(-1);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1585:
+ SceneItem::display(1550, 66, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1586:
+ // No break on purpose
+ case 1587:
+ R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, R2_GLOBALS._player._characterIndex);
+ _diagnosticsDisplay.remove();
+ _dontExit = false;
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1592:
+ _joystick.remove();
+ R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1);
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ R2_GLOBALS._s1550PlayerArea[R2_SEEKER] = R2_GLOBALS._s1550PlayerArea[R2_QUINN];
+ } else {
+ R2_GLOBALS._s1550PlayerArea[R2_QUINN] = R2_GLOBALS._s1550PlayerArea[R2_SEEKER];
}
- _field418 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
- } else {
- _field418--;
- }
- Scene::dispatch();
-}
-
-/*--------------------------------------------------------------------------
- * Scene 1580 - Inside wreck
- *
- *--------------------------------------------------------------------------*/
-
-Scene1580::Scene1580() {
-}
-
-void Scene1580::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
-}
-
-bool Scene1580::JoystickPlug::startAction(CursorType action, Event &event) {
- if (action == R2_JOYSTICK) {
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
-
- R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1580);
- R2_GLOBALS._sceneItems.remove(&scene->_joystickPlug);
- scene->_joystick.postInit();
- scene->_joystick.setup(1580, 1, 4);
- scene->_joystick.setPosition(Common::Point(159, 163));
- scene->_joystick.setDetails(1550, 78, -1, -1, 2, (SceneItem *) NULL);
-
- scene->_arrActor[5].remove();
-
- return true;
+ R2_GLOBALS._player.enableControl(CURSOR_WALK);
+ break;
+ default:
+ _sceneMode = 62;
+ setAction(&_sequenceManager1, this, 1, &R2_GLOBALS._player, NULL);
+ break;
}
-
- return SceneHotspot::startAction(action, event);
}
-bool Scene1580::ScreenSlot::startAction(CursorType action, Event &event) {
- if (action == R2_DIAGNOSTICS_DISPLAY) {
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
-
- R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, 1580);
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._sceneItems.remove(&scene->_screenSlot);
-
- scene->_screen.postInit();
- scene->_screen.setup(1580, 1, 1);
- scene->_screen.setPosition(Common::Point(124, 108));
- scene->_screen.fixPriority(10);
-
- if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1580)
- scene->_screen.setDetails(1550, 14, -1, -1, 5, &scene->_joystick);
+void Scene1550::process(Event &event) {
+ if ((!R2_GLOBALS._player._canWalk) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) && (event.eventType == EVENT_BUTTON_DOWN) && (this->_screenNumber == 1234)) {
+ int curReg = R2_GLOBALS._sceneRegions.indexOf(event.mousePos);
+ if (curReg == 0)
+ _dontExit = true;
+ else if (((R2_GLOBALS._player._position.y < 90) && (event.mousePos.y > 90)) || ((R2_GLOBALS._player._position.y > 90) && (event.mousePos.y < 90)))
+ _dontExit = true;
else
- scene->_screen.setDetails(1550, 14, -1, -1, 2, (SceneItem *)NULL);
-
- scene->_screenDisplay.postInit();
- scene->_screenDisplay.setup(1580, 3, 1);
- scene->_screenDisplay.setPosition(Common::Point(124, 109));
- scene->_screenDisplay.fixPriority(20);
- //scene->_field412 = 1;
- scene->_sceneMode = 10;
- scene->setAction(&scene->_sequenceManager, scene, 1, &R2_GLOBALS._player, NULL);
+ _dontExit = false;
- return true;
+ if ((curReg == 13) || (curReg == 14))
+ _dontExit = false;
}
- return SceneHotspot::startAction(action, event);
+ Scene::process(event);
}
-bool Scene1580::Joystick::startAction(CursorType action, Event &event) {
- 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 == R2_QUINN)
- scene->_stripManager.start(536, scene);
- else
- scene->_stripManager.start(537, scene);
-
- return true;
- }
+void Scene1550::dispatch() {
+ Scene::dispatch();
- return SceneActor::startAction(action, 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 == R2_QUINN) || (R2_GLOBALS._player._characterIndex == R2_SEEKER));
-bool Scene1580::Screen::startAction(CursorType action, Event &event) {
- if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(R2_BROKEN_DISPLAY) == 1580)) {
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
+ if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 15) && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 16)) {
+ R2_GLOBALS._player._shade = 0;
- R2_INVENTORY.setObjectScene(R2_BROKEN_DISPLAY, R2_GLOBALS._player._characterIndex);
- scene->_screenSlot.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 2, NULL);
- scene->_screenDisplay.remove();
- remove();
- return true;
+ // NOTE: Original game contains a switch based on an uninitialized variable.
+ // We're leaving this code here, but ifdef'ed out, in case we can ever figure out
+ // what the original programmers intended the value to come from
+#if 0
+ int missingVariable = 0;
+ switch (missingVariable) {
+ case 144:
+ // No break on purpose
+ case 146:
+ _dish._frame = 5;
+ R2_GLOBALS._player._shade = 3;
+ break;
+ case 148:
+ // No break on purpose
+ case 149:
+ _dish._frame = 1;
+ // No break on purpose
+ case 147:
+ // No break on purpose
+ case 150:
+ R2_GLOBALS._player._shade = 3;
+ break;
+ default:
+ break;
+ }
+#endif
}
- return SceneActor::startAction(action, event);
-}
-
-bool Scene1580::StorageCompartment::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._sceneItems.remove(&scene->_storageCompartment);
- scene->_sceneMode = 0;
- animate(ANIM_MODE_5, scene);
-
- return true;
-}
-
-bool Scene1580::HatchButton::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- setFrame(2);
- scene->_sceneMode = 20;
- scene->setAction(&scene->_sequenceManager, scene, 2, &R2_GLOBALS._player, NULL);
+ if (_dontExit)
+ return;
- return true;
-}
+ switch (R2_GLOBALS._player.getRegionIndex() - 11) {
+ case 0:
+ // No break on purpose
+ case 5:
+ // Exiting the top of the screen
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 1;
+ _dontExit = true;
+ --R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y;
-bool Scene1580::ThrusterValve::startAction(CursorType action, Event &event) {
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
+ enterArea();
- switch (action) {
- case CURSOR_USE:
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_INVENTORY.setObjectScene(R2_THRUSTER_VALVE, 1);
- remove();
- return true;
- }
- break;
- case R2_COM_SCANNER:
- scene->_sceneMode = 30;
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- scene->_stripManager.start(529, scene);
- return true;
- break;
- case R2_COM_SCANNER_2:
- scene->_sceneMode = 30;
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- scene->_stripManager.start(527, scene);
- return true;
- break;
- default:
+ R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 108) * 172) / 100), 145));
+ if (R2_GLOBALS._player._position.x < 160) {
+ Common::Point pt(R2_GLOBALS._player._position.x + 5, 135);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else if (R2_GLOBALS._player._position.x <= 160) { // the check is really in the original...
+ Common::Point pt(R2_GLOBALS._player._position.x, 135);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else {
+ Common::Point pt(R2_GLOBALS._player._position.x - 5, 135);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
break;
- }
-
- return SceneActor::startAction(action, event);
-}
+ case 1:
+ // Exiting the bottom of the screen
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 3;
+ _dontExit = true;
+ ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y;
-bool Scene1580::Ignitor::startAction(CursorType action, Event &event) {
- Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
+ enterArea();
- switch (action) {
- case CURSOR_USE:
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_INVENTORY.setObjectScene(R2_IGNITOR, 1);
- remove();
- return true;
+ R2_GLOBALS._player.setPosition(Common::Point( 160 - (((((160 - R2_GLOBALS._player._position.x) * 100) / 172) * 108) / 100), 19));
+ if (R2_GLOBALS._player._position.x < 160) {
+ Common::Point pt(R2_GLOBALS._player._position.x + 5, 29);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else if (R2_GLOBALS._player._position.x <= 160) { // the check is really in the original...
+ Common::Point pt(R2_GLOBALS._player._position.x, 29);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else {
+ Common::Point pt(R2_GLOBALS._player._position.x - 5, 29);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
}
break;
- case R2_COM_SCANNER:
- scene->_sceneMode = 30;
+ case 2:
+ // Exiting the right of the screen
R2_GLOBALS._player.disableControl();
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- scene->_stripManager.start(529, scene);
- return true;
+ _sceneMode = 5;
+ _dontExit = true;
+ ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x;
+
+ enterArea();
+
+ 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);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 10));
+ Common::Point pt(R2_GLOBALS._player._position.x + 30, R2_GLOBALS._player._position.y - 20);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y));
+ Common::Point pt(R2_GLOBALS._player._position.x + 10, R2_GLOBALS._player._position.y);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
break;
- case R2_COM_SCANNER_2:
- scene->_sceneMode = 30;
+ case 3:
+ // Exiting to the left of the screen
R2_GLOBALS._player.disableControl();
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- scene->_stripManager.start(527, scene);
- return true;
+ _sceneMode = 7;
+ _dontExit = true;
+ --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._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);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y - 10));
+ Common::Point pt(R2_GLOBALS._player._position.x - 30, R2_GLOBALS._player._position.y - 20);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(320 - R2_GLOBALS._player._position.x, R2_GLOBALS._player._position.y));
+ Common::Point pt(R2_GLOBALS._player._position.x - 10, R2_GLOBALS._player._position.y);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
break;
default:
break;
}
-
- return SceneActor::startAction(action, event);
}
-void Scene1580::postInit(SceneObjectList *OwnerList) {
- loadScene(1580);
- R2_GLOBALS._sceneManager._fadeMode = FADEMODE_GRADUAL;
- SceneExt::postInit();
-
- _stripManager.setColors(60, 255);
- _stripManager.setFontNumber(3);
- _stripManager.addSpeaker(&_quinnSpeaker);
- _stripManager.addSpeaker(&_seekerSpeaker);
-
- _sceneMode = 0;
-
- R2_GLOBALS._player.disableControl();
- if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1580) {
- _joystick.postInit();
- _joystick.setup(1580, 1, 4);
- _joystick.setPosition(Common::Point(159, 163));
- _joystick.setDetails(1550, 78, -1, -1, 1, (SceneItem *) NULL);
- } else {
- _joystickPlug.setDetails(Rect(141, 148, 179, 167), 1550, 79, -1, -1, 1, NULL);
- }
-
- if (R2_INVENTORY.getObjectScene(R2_BROKEN_DISPLAY) == 1580) {
- _screen.postInit();
- _screen.setup(1580, 1, 1);
- _screen.setPosition(Common::Point(124, 108));
- _screen.fixPriority(10);
- _screen.setDetails(1550, 13, -1, -1, 1, (SceneItem *) NULL);
-
- _screenDisplay.postInit();
- _screenDisplay.setup(1580, 1, 3);
- _screenDisplay.setPosition(Common::Point(124, 96));
- _screenDisplay.fixPriority(20);
- } else if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1580) {
- _screen.postInit();
- _screen.setup(1580, 1, 1);
- _screen.setPosition(Common::Point(124, 108));
- _screen.fixPriority(10);
- _screen.setDetails(1550, 14, -1, -1, 1, (SceneItem *) NULL);
-
- _screenDisplay.postInit();
- _screenDisplay.setup(1580, 3, 1);
- _screenDisplay.setPosition(Common::Point(124, 109));
- _screenDisplay.fixPriority(20);
-
- _sceneMode = 10;
- } else {
- _screenSlot.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 1, NULL);
- }
-
- _storageCompartment.postInit();
- if (R2_GLOBALS.getFlag(58) == 0) {
- _storageCompartment.setup(1580, 5, 1);
- _storageCompartment.setDetails(1550, 80, -1, -1, 1, (SceneItem *) NULL);
- } else {
- _storageCompartment.setup(1580, 5, 6);
- }
-
- _storageCompartment.setPosition(Common::Point(216, 108));
- _storageCompartment.fixPriority(100);
-
- _hatchButton.postInit();
- _hatchButton.setup(1580, 4, 1);
- _hatchButton.setPosition(Common::Point(291, 147));
- _hatchButton.fixPriority(100);
- _hatchButton.setDetails(1550, 81, -1, -1, 1, (SceneItem *) NULL);
-
- if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 1580) {
- _thrusterValve.postInit();
- _thrusterValve.setup(1580, 6, 2);
- _thrusterValve.setPosition(Common::Point(222, 108));
- _thrusterValve.fixPriority(50);
- _thrusterValve.setDetails(1550, 32, -1, 34, 1, (SceneItem *) NULL);
- }
-
- if (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 1580) {
- _ignitor.postInit();
- _ignitor.setup(1580, 6, 1);
- _ignitor.setPosition(Common::Point(195, 108));
- _ignitor.fixPriority(50);
- _ignitor.setDetails(1550, 38, -1, 34, 1, (SceneItem *) NULL);
- }
+void Scene1550::saveCharacter(int characterIndex) {
+ if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
+ R2_GLOBALS._sound1.fadeOut2(NULL);
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.hide();
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- _background.setDetails(Rect(0, 0, 320, 200), 1550, 50, -1, -1, 1, NULL);
+ SceneExt::saveCharacter(characterIndex);
}
-void Scene1580::signal() {
- switch (_sceneMode++) {
- case 10:
- _screenDisplay.animate(ANIM_MODE_5, this);
- break;
- case 11:
- _screenDisplay.setup(1580, 1, 2);
- _screenDisplay.setPosition(Common::Point(124, 94));
+void Scene1550::Wall::setupWall(int frameNumber, int strip) {
+ Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene;
- if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) != 0) {
- _arrActor[0].postInit();
- _arrActor[0].setup(1580, 2, 1);
- _arrActor[0].setPosition(Common::Point(138, 56));
+ postInit();
+ if (scene->_wallType == 2)
+ setup(1551, strip, frameNumber);
+ else
+ setup(1554, strip, frameNumber);
+
+ switch (strip) {
+ case 0:
+ switch (frameNumber - 1) {
+ case 0:
+ setup(1551, 1, 1);
+ setPosition(Common::Point(30, 67));
+ break;
+ case 1:
+ setup(1560, 1, 5);
+ setPosition(Common::Point(141, 54));
+ break;
+ case 2:
+ setup(1560, 2, 5);
+ setPosition(Common::Point(178, 54));
+ break;
+ case 3:
+ setup(1560, 2, 1);
+ setPosition(Common::Point(289, 67));
+ break;
+ case 4:
+ setup(1560, 2, 2);
+ setPosition(Common::Point(298, 132));
+ break;
+ case 5:
+ setup(1560, 1, 2);
+ setPosition(Common::Point(21, 132));
+ break;
+ case 6:
+ setup(1560, 2, 4);
+ setPosition(Common::Point(285, 123));
+ break;
+ case 7:
+ setup(1560, 1, 3);
+ setPosition(Common::Point(30, 111));
+ break;
+ case 8:
+ setup(1560, 2, 3);
+ setPosition(Common::Point(289, 111));
+ break;
+ case 9:
+ setup(1560, 1, 4);
+ setPosition(Common::Point(34, 123));
+ break;
+ default:
+ break;
}
-
- if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) != 0) {
- _arrActor[1].postInit();
- _arrActor[1].setup(1580, 2, 2);
- _arrActor[1].setPosition(Common::Point(140, 66));
+ fixPriority(1);
+ break;
+ case 1:
+ if (frameNumber == 3) {
+ setup(1553, 3, 1);
+ setPosition(Common::Point(48, 44));
+ fixPriority(2);
+ } else {
+ fixPriority(1);
+ setPosition(Common::Point(32, 17));
}
- if (R2_INVENTORY.getObjectScene(R2_IGNITOR) != 0) {
- _arrActor[2].postInit();
- _arrActor[2].setup(1580, 2, 3);
- _arrActor[2].setPosition(Common::Point(142, 85));
+ switch (frameNumber) {
+ case 2:
+ setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 3:
+ setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ default:
+ setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
+ break;
}
-
- if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) != 0) {
- _arrActor[3].postInit();
- _arrActor[3].setup(1580, 2, 4);
- _arrActor[3].setPosition(Common::Point(142, 92));
+ break;
+ case 2:
+ fixPriority(1);
+ switch (frameNumber) {
+ case 4:
+ setup(1553, 4, 1);
+ setPosition(Common::Point(48, 168));
+ break;
+ case 5:
+ setup(1553, 3, 2);
+ setPosition(Common::Point(20, 168));
+ fixPriority(250);
+ break;
+ default:
+ setPosition(Common::Point(28, 116));
+ break;
}
- if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) != 0) {
- _arrActor[4].postInit();
- _arrActor[4].setup(1580, 2, 5);
- _arrActor[4].setPosition(Common::Point(108, 54));
+ switch (frameNumber) {
+ case 2:
+ setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 4:
+ setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 5:
+ setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ default:
+ setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
+ break;
}
-
- if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) != 1580) {
- _arrActor[5].postInit();
- _arrActor[5].setup(1580, 2, 6);
- _arrActor[5].setPosition(Common::Point(110, 64));
+ break;
+ case 3:
+ switch (frameNumber) {
+ case 2:
+ fixPriority(2);
+ if (scene->_wallType == 2)
+ setup(1553, 2, 1);
+ else
+ setup(1556, 2, 1);
+ setPosition(Common::Point(160, 44));
+ break;
+ case 3:
+ fixPriority(2);
+ setup(1553, 5, 1);
+ setPosition(Common::Point(178, 44));
+ break;
+ default:
+ fixPriority(1);
+ setPosition(Common::Point(160, 17));
+ break;
}
- if (R2_INVENTORY.getObjectScene(R2_BATTERY) != 0) {
- _arrActor[6].postInit();
- _arrActor[6].setup(1580, 2, 7);
- _arrActor[6].setPosition(Common::Point(108, 80));
+ if (frameNumber == 1)
+ setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
+ else
+ setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 4:
+ if (frameNumber == 2) {
+ fixPriority(250);
+ if (scene->_wallType == 2)
+ setup(1553, 1, 1);
+ else
+ setup(1556, 1, 1);
+ } else {
+ fixPriority(2);
}
- if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) != 0) {
- _arrActor[7].postInit();
- _arrActor[7].setup(1580, 2, 8);
- _arrActor[7].setPosition(Common::Point(111, 92));
- }
+ if (frameNumber != 1)
+ setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- R2_GLOBALS._player._canWalk = false;
+ setPosition(Common::Point(160, 168));
break;
- case 20:
- R2_GLOBALS._sceneManager.changeScene(1550);
+ case 5:
+ fixPriority(1);
+ setPosition(Common::Point(287, 17));
+
+ switch (frameNumber) {
+ case 2:
+ setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 3:
+ setDetails(1550, 6, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ default:
+ setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ }
break;
- case 31:
- R2_GLOBALS._sceneManager.changeScene(1530);
+ case 6:
+ fixPriority(1);
+ setPosition(Common::Point(291, 116));
+
+ if (frameNumber == 2)
+ setDetails(1550, 3, -1, -1, 2, (SceneItem *) NULL);
+ else
+ setDetails(1550, 72, -1, -1, 2, (SceneItem *) NULL);
break;
default:
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- R2_GLOBALS._player._canWalk = false;
break;
}
-}
-
-/*--------------------------------------------------------------------------
- * Scene 1625 - Miranda being questioned
- *
- *--------------------------------------------------------------------------*/
-
-bool Scene1625::Wire::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
- R2_GLOBALS._player.disableControl();
-
- scene->_sceneMode = 1631;
- scene->_mirandaMouth.postInit();
- scene->setAction(&scene->_sequenceManager, scene, 1631, &scene->_mirandaMouth, &scene->_wire, NULL);
- return true;
-}
-
-Scene1625::Scene1625() {
-}
-void Scene1625::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
}
-void Scene1625::postInit(SceneObjectList *OwnerList) {
- loadScene(1625);
- R2_GLOBALS._player._characterIndex = R2_MIRANDA;
- SceneExt::postInit();
-
- _stripManager.addSpeaker(&_mirandaSpeaker);
- _stripManager.addSpeaker(&_tealSpeaker);
- _stripManager.addSpeaker(&_soldierSpeaker);
-
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.hide();
-
- _wire.postInit();
- _wire.setup(1626, 2, 1);
- _wire.setPosition(Common::Point(206, 133));
- _wire.setDetails(1625, 0, -1, -1, 1, (SceneItem *) NULL);
-
- _wristRestraints.postInit();
- _wristRestraints.setup(1625, 8, 1);
- _wristRestraints.setPosition(Common::Point(190, 131));
- _wristRestraints.setDetails(1625, 6, -1, 2, 1, (SceneItem *) NULL);
+void Scene1550::enterArea() {
+ _walkRegionsId = 0;
+ _dishMode = 0;
- if (R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] == 1625) {
- if (!R2_GLOBALS.getFlag(83)) {
- _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;
- } else {
- _teal.postInit();
- _teal.fixPriority(10);
+ _wallCorner1.remove();
+ _westWall.remove();
+ _northWall.remove();
+ _southWall.remove();
+ _wallCorner2.remove();
+ _eastWall.remove();
- _tealRightArm.postInit();
+ for (int i = 0; i < 8; ++i)
+ _junk[i].remove();
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1625;
- setAction(&_sequenceManager, this, 1625, &_teal, &_tealRightArm, NULL);
- }
+ _wreckage.remove();
- R2_GLOBALS._sound1.play(245);
- _background.setDetails(Rect(0, 0, 320, 200), 1625, 12, -1, -1, 1, NULL);
- R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 1625;
- R2_GLOBALS._player._characterScene[R2_MIRANDA] = 1625;
-}
+ for (int i = 0; i < 8; ++i)
+ _shipComponents[i].remove();
-void Scene1625::remove() {
- R2_GLOBALS._sound1.fadeOut2(NULL);
- SceneExt::remove();
-}
+ _airbag.remove();
+ _joystick.remove();
+ _gyroscope.remove();
+ _wreckage4.remove();
+ _diagnosticsDisplay.remove();
-void Scene1625::signal() {
- switch (_sceneMode) {
- case 10:
- R2_GLOBALS._player.disableControl();
- _glass.postInit();
- _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL);
- _sceneMode = 1626;
- setAction(&_sequenceManager, this, 1626, &_tealHead, &_glass, NULL);
- break;
- case 12:
- MessageDialog::show(DONE_MSG, OK_BTN_STRING);
+ if ((_sceneMode != 1577) && (_sceneMode != 1578))
+ _wreckage2.remove();
+
+ _wreckage3.remove();
+ _companion.remove();
+ _dish.remove();
+ _dishTowerShadow.remove();
+ _dishTower.remove();
+ _walkway.remove();
+
+ // Set up of special walk regions for certain areas
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y) {
+ case 0:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
+ case 3:
+ R2_GLOBALS._walkRegions.load(1554);
+ _walkRegionsId = 1554;
+ break;
+ case 4:
+ R2_GLOBALS._walkRegions.load(1553);
+ _walkRegionsId = 1553;
+ break;
+ default:
+ break;
+ }
break;
- case 14:
- _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);
+ case 3:
+ // No break on purpose
+ case 4:
+ 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);
+ _walkRegionsId = 1559;
+ }
+ }
break;
- case 99:
- R2_GLOBALS._player.disableControl();
- switch (_stripManager._exitMode) {
- case 1:
- _sceneMode = 1627;
- setAction(&_sequenceManager, this, 1627, &_mirandaMouth, &_glass, NULL);
- break;
- case 2:
- _sceneMode = 1629;
- setAction(&_sequenceManager, this, 1629, &_tealHead, &_wristRestraints, NULL);
+ case 7:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
+ case 10:
+ R2_GLOBALS._walkRegions.load(1555);
+ _walkRegionsId = 1555;
break;
- 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[R2_QUINN]);
+ case 11:
+ R2_GLOBALS._walkRegions.load(1556);
+ _walkRegionsId = 1556;
break;
- case 5:
- _sceneMode = 1628;
- _tealHead.remove();
- setAction(&_sequenceManager, this, 1628, &_mirandaMouth, &_glass, NULL);
+ default:
break;
- case 6:
- _glass.postInit();
- _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL);
- _sceneMode = 1632;
- setAction(&_sequenceManager, this, 1632, &_glass, NULL);
+ }
+ break;
+ case 11:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
+ case 24:
+ R2_GLOBALS._walkRegions.load(1558);
+ _walkRegionsId = 1558;
break;
- case 7:
- _sceneMode = 1633;
- setAction(&_sequenceManager, this, 1633, &_glass, NULL);
+ case 25:
+ R2_GLOBALS._walkRegions.load(1557);
+ _walkRegionsId = 1557;
break;
- case 8:
- _sceneMode = 1635;
- setAction(&_sequenceManager, this, 1635, &_mirandaMouth, &_wristRestraints, NULL);
+ default:
break;
- case 9:
- _glass.postInit();
- _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL);
- _sceneMode = 1634;
- setAction(&_sequenceManager, this, 1634, &_mirandaMouth, &_wristRestraints, NULL);
+ }
+ break;
+ case 16:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) {
+ case 2:
+ R2_GLOBALS._walkRegions.load(1552);
+ _walkRegionsId = 1552;
break;
case 3:
- // No break on purpose
+ R2_GLOBALS._walkRegions.load(1551);
+ _walkRegionsId = 1551;
+ break;
+ case 15:
+ R2_GLOBALS._walkRegions.load(1575);
+ _walkRegionsId = 1575;
default:
- _sceneMode = 1630;
- _tealHead.remove();
- setAction(&_sequenceManager, this, 1630, &_teal, &_tealRightArm, NULL);
break;
}
- //_field412 = _stripManager._field2E8;
- _stripManager._currObj44Id = 0;
- break;
- case 1625:
- _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:
- _tealHead.setup(1627, 1, 1);
- _tealHead.setPosition(Common::Point(68, 68));
- _tealHead.show();
-
- _mirandaMouth.postInit();
- _mirandaMouth.setup(1627, 3, 1);
- _mirandaMouth.setPosition(Common::Point(196, 65));
-
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(832, this);
+ default:
break;
- case 1627:
- _mirandaMouth.setup(1627, 3, 1);
- _mirandaMouth.setPosition(Common::Point(196, 65));
- _mirandaMouth.show();
+ }
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(833, this);
- break;
- case 1628:
- R2_GLOBALS.setFlag(83);
- _tealHead.postInit();
- _tealHead.setup(1627, 1, 1);
- _tealHead.setPosition(Common::Point(68, 68));
+ int varA = 0;
- _mirandaMouth.setup(1627, 3, 1);
- _mirandaMouth.setPosition(Common::Point(196, 65));
- _mirandaMouth.show();
+ // This section handles checks if the ARM spacecraft have not yet seized
+ // control of Lance of Truth.
+ if (!R2_GLOBALS.getFlag(16)) {
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y - 2) {
+ case 0:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 22) {
+ case 0:
+ varA = 1553;
+ _northWall.setupWall(6, 0);
+ break;
+ case 1:
+ // No break on purpose
+ case 2:
+ // No break on purpose
+ case 3:
+ // No break on purpose
+ case 4:
+ varA = 1553;
+ break;
+ case 5:
+ varA = 1553;
+ _northWall.setupWall(6, 0);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 1:
+ // No break on purpose
+ case 2:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) {
+ case 0:
+ varA = 1550;
+ _northWall.setupWall(9, 0);
+ break;
+ case 1:
+ varA = 1552;
+ _northWall.setupWall(10, 0);
+ break;
+ case 2:
+ // No break on purpose
+ case 3:
+ // No break on purpose
+ case 4:
+ // No break on purpose
+ case 5:
+ varA = 1552;
+ break;
+ case 6:
+ varA = 1552;
+ _northWall.setupWall(7, 0);
+ break;
+ case 7:
+ varA = 1550;
+ _northWall.setupWall(8, 0);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 3:
+ switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) {
+ case 0:
+ varA = 1550;
+ _northWall.setupWall(4, 0);
+ break;
+ case 1:
+ varA = 1550;
+ _northWall.setupWall(3, 0);
+ break;
+ case 2:
+ // No break on purpose
+ case 3:
+ // No break on purpose
+ case 4:
+ // No break on purpose
+ case 5:
+ varA = 1551;
+ break;
+ case 6:
+ varA = 1550;
+ _northWall.setupWall(2, 0);
+ break;
+ case 7:
+ varA = 1550;
+ _northWall.setupWall(1, 0);
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ 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))) {
+ // In an area where the cutscene can be triggered, so start it
+ R2_GLOBALS.setFlag(16);
+ R2_GLOBALS._sceneManager.changeScene(1500);
+ }
+ }
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(834, this);
- break;
- case 1629:
- _tealHead.setup(1627, 1, 1);
- _tealHead.setPosition(Common::Point(68, 68));
- _tealHead.show();
+ 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;
+ _wallType = 0;
+ }
+ } else if (_screenNumber == 1234) {
+ R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE;
+ loadScene(1550);
+ R2_GLOBALS._sceneManager._hasPalette = false;
+ }
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(805, this);
- break;
- case 1630:
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- R2_GLOBALS._player._canWalk = true;
- break;
- case 1631:
- _mirandaMouth.setup(1627, 3, 1);
- _mirandaMouth.setPosition(Common::Point(196, 65));
- _mirandaMouth.show();
+ if (_screenNumber == 1234)
+ _walkRegionsId = 1576;
- _wire.remove();
+ if (_wallType == 0) {
+ _wallType = 1;
+ } else {
+ if (_wallType == 2) {
+ _wallType = 3;
+ } else {
+ _wallType = 2;
+ }
- _teal.postInit();
- _teal.fixPriority(10);
+ if (R2_GLOBALS._sceneManager._sceneNumber == 1550){
+#if 0
+ warning("Mouse_hideIfNeeded()");
+ warning("gfx_set_pane_p");
+ for (int i = 3; i != 168; ++i) {
+ warning("sub294D2(4, i, 312, var14C)");
+ warning("missing for loop, to be implemented");
+ warning("gfx_draw_slice");
+ }
+ warning("gfx_flip_screen()");
+ warning("gfx_set_pane_p()");
+#endif
+ R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE;
- _tealRightArm.postInit();
+ if (varA == 0) {
+ if (_sceneResourceId != 1550) {
+ g_globals->_scenePalette.loadPalette(1550);
+ R2_GLOBALS._sceneManager._hasPalette = true;
+ }
+ } else {
+ g_globals->_scenePalette.loadPalette(varA);
+ R2_GLOBALS._sceneManager._hasPalette = true;
+ }
- R2_INVENTORY.setObjectScene(R2_SUPERCONDUCTOR_WIRE, 3);
- _sceneMode = 14;
+ if (R2_GLOBALS._sceneManager._hasPalette)
+ _sceneResourceId = varA;
- setAction(&_sequenceManager, this, 1625, &_teal, &_tealRightArm, NULL);
- break;
- case 1632:
- _tealHead.setup(1627, 1, 1);
- _tealHead.setPosition(Common::Point(68, 68));
- _tealHead.show();
+// warning("sub_2C429()");
+ }
+ }
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(835, this);
- break;
- case 1633:
- _glass.remove();
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(818, this);
+ // 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 (_walkRegionsId == 0) {
+ R2_GLOBALS._walkRegions.load(1550);
+ _walkRegionsId = 1550;
+ }
break;
- case 1634:
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(836, this);
+ case 1:
+ // North end of the spaceport
+ if (_walkRegionsId == 0) {
+ R2_GLOBALS._walkRegions.load(1560);
+ _walkRegionsId = 1560;
+ }
+ _wallCorner1.setupWall(2, 1);
+ _northWall.setupWall(1, 3);
+ _wallCorner2.setupWall(2, 5);
break;
- case 1635:
- _mirandaMouth.setup(1627, 3, 1);
- _mirandaMouth.setPosition(Common::Point(196, 65));
- _mirandaMouth.show();
-
- _sceneMode = 99;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(818, this);
+ case 2:
+ R2_GLOBALS._walkRegions.load(1561);
+ _walkRegionsId = 1561;
+ _wallCorner1.setupWall(2, 1);
+ _westWall.setupWall(2, 2);
+ _northWall.setupWall(1, 3);
+ _wallCorner2.setupWall(2, 5);
break;
- default:
+ case 3:
+ R2_GLOBALS._walkRegions.load(1562);
+ _walkRegionsId = 1562;
+ _wallCorner1.setupWall(2, 1);
+ _northWall.setupWall(1, 3);
+ _wallCorner2.setupWall(2, 5);
+ _eastWall.setupWall(2, 6);
+ break;
+ case 4:
+ R2_GLOBALS._walkRegions.load(1563);
+ _walkRegionsId = 1563;
+ _northWall.setupWall(2, 3);
+ break;
+ case 5:
+ R2_GLOBALS._walkRegions.load(1564);
+ _walkRegionsId = 1564;
+ _southWall.setupWall(2, 4);
+ break;
+ case 6:
+ R2_GLOBALS._walkRegions.load(1565);
+ _walkRegionsId = 1565;
+ _wallCorner1.setupWall(1, 1);
+ _westWall.setupWall(1, 2);
+ _northWall.setupWall(3, 3);
+ break;
+ case 7:
+ R2_GLOBALS._walkRegions.load(1566);
+ _walkRegionsId = 1566;
+ _wallCorner1.setupWall(1, 1);
+ _westWall.setupWall(1, 2);
+ _northWall.setupWall(2, 4);
+ break;
+ case 8:
+ R2_GLOBALS._walkRegions.load(1567);
+ _walkRegionsId = 1567;
+ _westWall.setupWall(5, 2);
+ break;
+ case 9:
+ R2_GLOBALS._walkRegions.load(1568);
+ _walkRegionsId = 1568;
+ _westWall.setupWall(4, 2);
+ break;
+ case 10:
+ R2_GLOBALS._walkRegions.load(1569);
+ _walkRegionsId = 1569;
+ _wallCorner1.setupWall(3, 1);
+ break;
+ case 11:
+ R2_GLOBALS._walkRegions.load(1570);
+ _walkRegionsId = 1570;
+ _wallCorner1.setupWall(1, 1);
+ _westWall.setupWall(1, 2);
+ break;
+ case 12:
+ R2_GLOBALS._walkRegions.load(1571);
+ _walkRegionsId = 1571;
+ _wallCorner2.setupWall(1, 5);
+ _eastWall.setupWall(1, 6);
+ break;
+ case 13:
+ R2_GLOBALS._walkRegions.load(1572);
+ _walkRegionsId = 1572;
+ _wallCorner1.setupWall(1, 1);
+ _westWall.setupWall(1, 2);
+ _southWall.setupWall(1, 4);
+ break;
+ case 14:
+ R2_GLOBALS._walkRegions.load(1573);
+ _walkRegionsId = 1573;
+ _southWall.setupWall(1, 4);
+ _wallCorner2.setupWall(1, 5);
+ _eastWall.setupWall(1, 6);
+ break;
+ case 15:
+ // South wall
+ R2_GLOBALS._walkRegions.load(1574);
+ _walkRegionsId = 1574;
+ _southWall.setupWall(1, 4);
+ break;
+ case 16:
+ R2_GLOBALS._walkRegions.load(1570);
+ _walkRegionsId = 1570;
+ _wallCorner1.setupWall(2, 1);
+ _westWall.setupWall(2, 2);
+ break;
+ case 17:
+ R2_GLOBALS._walkRegions.load(1570);
+ _walkRegionsId = 1570;
+ _wallCorner1.setupWall(2, 1);
+ _westWall.setupWall(3, 2);
+ break;
+ case 18:
+ R2_GLOBALS._walkRegions.load(1571);
+ _walkRegionsId = 1571;
+ _wallCorner2.setupWall(2, 5);
+ _eastWall.setupWall(2, 6);
+ break;
+ case 19:
+ R2_GLOBALS._walkRegions.load(1571);
+ _walkRegionsId = 1571;
+ _wallCorner2.setupWall(2, 5);
+ _eastWall.setupWall(3, 6);
+ break;
+ default:
break;
}
-}
-
-void Scene1625::process(Event &event) {
- if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE))
- event.handled = true;
- else
- Scene::process(event);
-}
-
-/*--------------------------------------------------------------------------
- * Scene 1700 - Rim
- *
- *--------------------------------------------------------------------------*/
-
-Scene1700::Scene1700() {
- _walkFlag = 0;
-}
-
-void Scene1700::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
-
- s.syncAsSint16LE(_walkFlag);
-}
-
-bool Scene1700::RimTransport::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
-
- Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 4;
-
- Common::Point pt(271, 90);
- PlayerMover *mover = new PlayerMover();
- R2_GLOBALS._player.addMover(mover, &pt, scene);
-
- return true;
-}
-
-bool Scene1700::Companion::startAction(CursorType action, Event &event) {
- if (action != CURSOR_TALK)
- return SceneActor::startAction(action, event);
-
- Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
- scene->_sceneMode = 30;
- scene->signal();
-
- return true;
-}
-
-void Scene1700::NorthExit::changeScene() {
- Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- _moving = false;
- scene->_sceneMode = 1;
-
- Common::Point pt(R2_GLOBALS._player._position.x, 0);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, scene);
-}
-
-void Scene1700::SouthExit::changeScene() {
- Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- _moving = false;
- scene->_sceneMode = 2;
-
- Common::Point pt(R2_GLOBALS._player._position.x, 170);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, scene);
-}
-
-void Scene1700::WestExit::changeScene() {
- Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- _moving = false;
- scene->_sceneMode = 6;
-
- Common::Point pt(0, R2_GLOBALS._player._position.y);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, scene);
-}
-
-void Scene1700::enterArea() {
- Rect tmpRect;
- R2_GLOBALS._walkRegions.load(1700);
-
- _slabWest.remove();
- _slabEast.remove();
- _slabShadowWest.remove();
- _slabShadowEast.remove();
- _westPlatform.remove();
- _rimTransportDoor.remove();
- _rimTransport.remove();
-
- if (_sceneMode != 40) {
- _ledgeHopper.remove();
- _hatch.remove();
- }
-
- // The original had manual code here to redraw the background manually when
- // changing areas within the scene. Which seems to be totally redundant.
-
- 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.disableRegion(2);
- R2_GLOBALS._walkRegions.disableRegion(12);
- }
-
- 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);
-
- _slabShadowWest.postInit();
- _slabShadowWest.setup(1700, 2, 1);
- _slabShadowWest.setPosition(Common::Point(177, 82));
- _slabShadowWest.fixPriority(0);
-
- _slabShadowEast.postInit();
- _slabShadowEast.setup(1700, 2, 2);
- _slabShadowEast.setPosition(Common::Point(332, 96));
- _slabShadowEast.fixPriority(0);
-
- _slabEast.postInit();
- _slabEast.setup(1700, 1, 2);
- _slabEast.setPosition(Common::Point(424, 84));
- R2_GLOBALS._walkRegions.disableRegion(11);
- }
+ int di = 0;
+ int tmpIdx = 0;
+ 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 = EFFECT_SHADED2;
+ _junk[di]._shade = 0;
+ //_junk[di]._junkState = 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);
- 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);
+ R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[2]);
+ R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[3]);
+ R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[6]);
+ R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[7]);
- _westExit._enabled = true;
- } else {
- R2_GLOBALS._walkRegions.disableRegion(1);
- _westExit._enabled = false;
+ if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1550) {
+ _joystick.postInit();
+ _joystick.setup(1562, 3, 1);
+ _joystick.setPosition(Common::Point(150, 70));
+ _joystick.fixPriority(10);
+ _joystick.setDetails(1550, 41, -1, 42, 2, (SceneItem *) NULL);
+ }
+ } else {
+ if (R2_GLOBALS._scene1550JunkLocations[i + 2] > 40) {
+ _junk[di].changeZoom(100);
+ _junk[di].setup(1561, 1, R2_GLOBALS._scene1550JunkLocations[i + 2] - 40);
+ } else {
+ _junk[di].changeZoom(-1);
+ _junk[di].setup(1552, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) / 5) + 1, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) % 5) + 1);
+ }
+ _junk[di].setPosition(Common::Point(scene1550JunkX[tmpIdx], scene1550JunkY[tmpIdx]));
+ if (scene1550JunkRegions[tmpIdx] != 0)
+ R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[tmpIdx]);
+ di++;
+ }
+ }
}
- if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._rimLocation == 25) || (R2_GLOBALS._rimLocation == -3)))
- || ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._rimLocation == R2_GLOBALS._rimTransportLocation))
- ) {
- // Rim transport vechile located
- R2_GLOBALS._rimTransportLocation = R2_GLOBALS._rimLocation;
- if (!R2_GLOBALS.getFlag(15))
- _walkFlag = true;
-
- _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);
-
- _rimTransportDoor.postInit();
- _rimTransportDoor.setup(1700, 4, 1);
- _rimTransportDoor.setPosition(Common::Point(312, 106));
- _rimTransportDoor.fixPriority(130);
- }
-}
+ // Loop for detecting and setting up certain special areas within the map
+ for (int i = 0; i < 15 * 3; i += 3) {
+ if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == scene1550SpecialAreas[i])
+ && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == scene1550SpecialAreas[i + 1])) {
+ int areaType = scene1550SpecialAreas[i + 2];
+ switch (areaType) {
+ case 1:
+ if (!R2_GLOBALS.getFlag(16)) {
+ _wreckage2.postInit();
+ if (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 3)
+ _wreckage2.setup(1555, 2, 1);
+ else
+ _wreckage2.setup(1555, 1, 1);
+ _wreckage2.setPosition(Common::Point(150, 100));
+ _wreckage2.fixPriority(92);
+ _wreckage2.setDetails(1550, 73, -1, -1, 2, (SceneItem *) NULL);
+ }
+ break;
+ case 2:
+ _dish.postInit();
+ if (R2_GLOBALS.getFlag(19))
+ _dish.setup(1556, 3, 5);
+ else
+ _dish.setup(1556, 3, 1);
+ _dish.changeZoom(95);
+ _dish.setPosition(Common::Point(165, 83));
+ _dish.fixPriority(168);
+ _dish.setDetails(1550, 17, -1, 19, 2, (SceneItem *) NULL);
-void Scene1700::postInit(SceneObjectList *OwnerList) {
- loadScene(1700);
- SceneExt::postInit();
- if (R2_GLOBALS._sceneManager._previousScene == -1)
- R2_GLOBALS._sceneManager._previousScene = 1530;
+ _dishTower.postInit();
+ _dishTower.setup(1556, 4, 1);
+ _dishTower.setPosition(Common::Point(191, 123));
+ _dishTower.changeZoom(95);
+ _dishTower.setDetails(1550, 65, -1, 66, 2, (SceneItem *) NULL);
- scalePalette(65, 65, 65);
- _stripManager.addSpeaker(&_quinnSpeaker);
- _stripManager.addSpeaker(&_seekerSpeaker);
+ _dishTowerShadow.postInit();
+ _dishTowerShadow._numFrames = 5;
+ if (R2_GLOBALS.getFlag(19))
+ _dishTowerShadow.setup(1556, 8, 5);
+ else
+ _dishTowerShadow.setup(1556, 8, 1);
- _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);
+ _dishTowerShadow.setPosition(Common::Point(156, 151));
+ _dishTowerShadow.fixPriority(10);
- R2_GLOBALS._player.postInit();
- R2_GLOBALS._player.setPosition(Common::Point(0, 0));
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_GLOBALS._player.setVisage(1501);
- R2_GLOBALS._player._moveDiff = Common::Point(2, 1);
- } else {
- R2_GLOBALS._player.setVisage(1506);
- R2_GLOBALS._player._moveDiff = Common::Point(3, 1);
- }
+ _walkway.postInit();
+ if (R2_GLOBALS.getFlag(20))
+ _walkway.setup(1558, 3, 10);
+ else
+ _walkway.setup(1558, 3, 1);
- _companion.postInit();
- _companion.animate(ANIM_MODE_1, NULL);
- _companion.setObjectWrapper(new SceneObjectWrapper());
+ _walkway.setPosition(Common::Point(172, 48));
+ _walkway.fixPriority(169);
+ R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[15]);
+ break;
+ case 3:
+ _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);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _companion.setVisage(1506);
- _companion._moveDiff = Common::Point(3, 1);
- _companion.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL);
- } else {
- _companion.setVisage(1501);
- _companion._moveDiff = Common::Point(2, 1);
- _companion.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL);
- }
+ _wreckage2.postInit();
+ _wreckage2.setup(1550, 1, 2);
+ _wreckage2.setPosition(Common::Point(259, 133));
+ _wreckage2.fixPriority(105);
+ _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
+ if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 1550) {
+ _gyroscope.postInit();
+ _gyroscope.setup(1550, 7, 2);
+ _gyroscope.setPosition(Common::Point(227, 30));
+ _gyroscope.fixPriority(130);
+ _gyroscope.setDetails(1550, 29, -1, 63, 2, (SceneItem *) NULL);
+ }
+ break;
+ case 4:
+ _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);
- R2_GLOBALS._sound1.play(134);
+ _wreckage2.postInit();
+ _wreckage2.setup(1550, 1, 3);
+ _wreckage2.setPosition(Common::Point(76, 64));
+ _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
+ if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1550) {
+ _diagnosticsDisplay.postInit();
+ _diagnosticsDisplay.setup(1504, 4, 1);
+ _diagnosticsDisplay.setPosition(Common::Point(49, 35));
+ _diagnosticsDisplay.animate(ANIM_MODE_2, NULL);
+ _diagnosticsDisplay._numFrames = 4;
+ _diagnosticsDisplay.fixPriority(65);
+ _diagnosticsDisplay.setDetails(1550, 14, 15, 63, 2, (SceneItem *) NULL);
+ }
+ if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1550) {
+ _airbag.postInit();
+ _airbag.setup(1550, 7, 1);
+ _airbag.setPosition(Common::Point(45, 44));
+ _airbag.fixPriority(150);
+ _airbag.setDetails(1550, 44, -1, 63, 2, (SceneItem *) NULL);
+ }
+ break;
+ case 5:
+ _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);
- _playerShadow.postInit();
- _playerShadow.fixPriority(10);
+ _wreckage2.postInit();
+ _wreckage2.setup(1550, 2, 3);
+ _wreckage2.setPosition(Common::Point(243, 64));
+ _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 6:
+ _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);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _playerShadow.setVisage(1112);
- else
- _playerShadow.setVisage(1111);
+ _wreckage2.postInit();
+ _wreckage2.setup(1550, 2, 2);
+ _wreckage2.setPosition(Common::Point(60, 133));
+ _wreckage2.fixPriority(106);
+ _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 7:
+ _wreckage.postInit();
+ _wreckage.setup(1550, 3, 1);
+ _wreckage.setPosition(Common::Point(281, 132));
+ _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 8:
+ _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);
- _playerShadow._effect = EFFECT_SHADOW_MAP;
- _playerShadow._shadowMap = _shadowPaletteMap;
- R2_GLOBALS._player._linkedActor = &_playerShadow;
+ _wreckage2.postInit();
+ _wreckage2.setup(1550, 3, 3);
+ _wreckage2.setPosition(Common::Point(145, 88));
+ _wreckage2.fixPriority(55);
+ _wreckage2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
- _companionShadow.postInit();
- _companionShadow.fixPriority(10);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _companionShadow.setVisage(1111);
- else
- _companionShadow.setVisage(1112);
+ _wreckage3.postInit();
+ _wreckage3.setup(1550, 3, 4);
+ _wreckage3.setPosition(Common::Point(64, 137));
+ _wreckage3.fixPriority(115);
+ _wreckage3.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
- _companionShadow._effect = EFFECT_SHADOW_MAP;
- _companionShadow._shadowMap = _shadowPaletteMap;
- _companion._linkedActor = &_companionShadow;
+ _wreckage4.postInit();
+ _wreckage4.setup(1550, 5, 1);
+ _wreckage4.setPosition(Common::Point(60, 90));
+ _wreckage4.fixPriority(45);
+ break;
+ case 9:
+ _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);
- R2_GLOBALS._sound1.play(134);
+ _wreckage2.postInit();
+ _wreckage2.setup(1550, 4, 3);
+ _wreckage2.setPosition(Common::Point(174, 88));
+ _wreckage2.fixPriority(55);
+ _wreckage2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
- switch (R2_GLOBALS._sceneManager._previousScene) {
- case 1530:
- R2_GLOBALS._player._characterIndex = R2_QUINN;
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._player.hide();
- _companion.hide();
+ _wreckage3.postInit();
+ _wreckage3.setup(1550, 4, 4);
+ _wreckage3.setPosition(Common::Point(255, 137));
+ _wreckage3.fixPriority(115);
+ _wreckage3.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
- _hatch.postInit();
- _hatch.hide();
+ _wreckage4.postInit();
+ _wreckage4.setup(1550, 6, 1);
+ _wreckage4.setPosition(Common::Point(259, 90));
+ _wreckage4.fixPriority(45);
+ break;
+ case 10:
+ _wreckage.postInit();
+ _wreckage.setup(1550, 4, 1);
+ _wreckage.setPosition(Common::Point(38, 132));
+ _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL);
+ break;
+ case 12:
+ // 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);
+ break;
+ default:
+ break;
+ }
+ }
+ }
- _ledgeHopper.postInit();
- _ledgeHopper.setup(1701, 1, 1);
- _ledgeHopper.setPosition(Common::Point(220, 137));
- _ledgeHopper.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL);
+ if (R2_GLOBALS._s1550PlayerArea[R2_QUINN] == R2_GLOBALS._s1550PlayerArea[R2_SEEKER]) {
+ _companion.postInit();
+ _companion._effect = EFFECT_SHADED2;
+ _companion.changeZoom(-1);
- _playerShadow.hide();
- _companionShadow.hide();
- R2_GLOBALS._events.setCursor(CURSOR_WALK);
- _stripManager.start(539, this);
- _sceneMode = 40;
- break;
- case 1750: {
- R2_GLOBALS._player.setPosition(Common::Point(282, 121));
- _companion.setPosition(Common::Point(282, 139));
- _sceneMode = 8;
- Common::Point pt(262, 101);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- Common::Point pt2(262, 119);
- NpcMover *mover2 = new NpcMover();
- _companion.addMover(mover2, &pt2, this);
- }
- break;
- case 1800: {
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._player.setPosition(Common::Point(0, 86));
- _companion.setPosition(Common::Point(0, 64));
- _sceneMode = 7;
- R2_GLOBALS._player.setObjectWrapper(NULL);
- R2_GLOBALS._player._strip = 1;
- Common::Point pt(64, 86);
- NpcMover *mover = new NpcMover();
- R2_GLOBALS._player.addMover(mover, &pt, this);
- _companion.setObjectWrapper(NULL);
- _companion._strip = 1;
- Common::Point pt2(77, 64);
- NpcMover *mover2 = new NpcMover();
- _companion.addMover(mover2, &pt2, NULL);
- }
- break;
- default:
+ assert((_walkRegionsId >= 1550) && (_walkRegionsId <= 2008));
+ R2_GLOBALS._walkRegions.disableRegion(k5A750[_walkRegionsId - 1550]);
+ _companion.setPosition(Common::Point(scene1550JunkX[k5A76D[_walkRegionsId - 1550]], scene1550JunkY[k5A76D[_walkRegionsId - 1550]] + 8));
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_GLOBALS._player.setPosition(Common::Point(109, 160));
- _companion.setPosition(Common::Point(156, 160));
- R2_GLOBALS._walkRegions.disableRegion(15);
+ 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 {
+ _companion.setup(1505, 6, 1);
+ _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
+ }
} else {
- R2_GLOBALS._player.setPosition(Common::Point(156, 160));
- _companion.setPosition(Common::Point(109, 160));
- R2_GLOBALS._walkRegions.disableRegion(17);
+ 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 {
+ _companion.setup(1500, 6, 1);
+ _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL);
+ }
}
- _sceneMode = 50;
- setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
- break;
}
- 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._uiElements.updateInventory();
+}
- enterArea();
+/*--------------------------------------------------------------------------
+ * Scene 1575 - Spaceport - unused ship scene
+ *
+ *--------------------------------------------------------------------------*/
- _surface.setDetails(1, 1700, 3, -1, -1);
- _background.setDetails(Rect(0, 0, 480, 200), 1700, 0, -1, -1, 1, NULL);
+Scene1575::Button::Button() {
+ _buttonId = 0;
+ _pressed = false;
}
-void Scene1700::remove() {
- R2_GLOBALS._sound1.fadeOut2(NULL);
- SceneExt::remove();
+void Scene1575::Button::synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+
+ s.syncAsSint16LE(_buttonId);
+ s.syncAsSint16LE(_pressed);
}
-void Scene1700::signal() {
- switch (_sceneMode) {
- case 1: {
- _sceneMode = 3;
- 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();
- R2_GLOBALS._player.addMover(mover, &pt, this);
+void Scene1575::Button::process(Event &event) {
+ Scene1575 *scene = (Scene1575 *)R2_GLOBALS._sceneManager._scene;
+ bool isInBounds = _bounds.contains(event.mousePos);
+ CursorType cursor = R2_GLOBALS._events.getCursor();
- if (R2_GLOBALS._player._position.x < 132) {
- _companion.setPosition(Common::Point(156, 170));
- Common::Point pt2(156, 160);
- NpcMover *mover2 = new NpcMover();
- _companion.addMover(mover2, &pt2, NULL);
- R2_GLOBALS._walkRegions.disableRegion(15);
- } else {
- _companion.setPosition(Common::Point(109, 170));
- Common::Point pt3(109, 160);
- NpcMover *mover3 = new NpcMover();
- _companion.addMover(mover3, &pt3, NULL);
- R2_GLOBALS._walkRegions.disableRegion(17);
- }
- }
- break;
- case 2: {
- _sceneMode = 3;
- 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();
- R2_GLOBALS._player.addMover(mover, &pt, this);
+ if ((event.eventType == EVENT_BUTTON_DOWN && cursor == CURSOR_USE && isInBounds) ||
+ (_pressed && _buttonId != 1 && event.eventType == EVENT_BUTTON_UP && isInBounds)) {
+ // Button pressed
+ _pressed = true;
+ Common::Point pos = scene->_actor1._position;
+ event.handled = true;
- if (R2_GLOBALS._player._position.x >= 171) {
- _companion.setPosition(Common::Point(155, 0));
- Common::Point pt2(155, 10);
- NpcMover *mover2 = new NpcMover();
- _companion.addMover(mover2, &pt2, NULL);
- R2_GLOBALS._walkRegions.disableRegion(15);
- } else {
- _companion.setPosition(Common::Point(188, 0));
- Common::Point pt3(188, 10);
- NpcMover *mover3 = new NpcMover();
- _companion.addMover(mover3, &pt3, NULL);
- R2_GLOBALS._walkRegions.disableRegion(17);
- }
- }
- break;
- case 3:
- if (!_walkFlag) {
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- } else {
- R2_GLOBALS.setFlag(15);
- _walkFlag = false;
- _sceneMode = 31;
- R2_GLOBALS._events.setCursor(CURSOR_WALK);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _stripManager.start(542, this);
- else
- _stripManager.start(543, this);
- }
- break;
- case 4: {
- _sceneMode = 5;
- Common::Point pt(271, 90);
- PlayerMover *mover = new PlayerMover();
- _companion.addMover(mover, &pt, 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, &_rimTransportDoor, NULL);
- }
- break;
- case 5:
- R2_GLOBALS._sceneManager.changeScene(1750);
- break;
- case 6:
- R2_GLOBALS._sceneManager.changeScene(1800);
- break;
- case 7:
- R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
- R2_GLOBALS._player._strip = 1;
- _companion.setObjectWrapper(new SceneObjectWrapper());
- _companion._strip = 1;
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- R2_GLOBALS._walkRegions.disableRegion(14);
- break;
- case 8:
- R2_GLOBALS._player._strip = 2;
- _companion._strip = 1;
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- R2_GLOBALS._walkRegions.disableRegion(12);
- break;
- case 30:
- _sceneMode = 31;
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _stripManager.start(540, this);
- else
- _stripManager.start(541, this);
- break;
- case 31:
- R2_GLOBALS._player.enableControl(CURSOR_TALK);
- break;
- case 40:
- R2_GLOBALS._player.disableControl();
- _sceneMode = 1704;
- setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_companion,
- &_hatch, &_ledgeHopper, &_playerShadow, &_companionShadow, NULL);
- break;
- case 50:
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- R2_GLOBALS._walkRegions.disableRegion(15);
- else
- R2_GLOBALS._walkRegions.disableRegion(17);
+ if (!R2_GLOBALS.getFlag(18) || _buttonId <= 1 || _buttonId >= 6) {
+ switch (_buttonId) {
+ case 1:
+ if (R2_GLOBALS.getFlag(18)) {
+ scene->_actor14.hide();
+ scene->_actor15.hide();
+ R2_GLOBALS.clearFlag(18);
+ } else if ((scene->_actor12._position.x == 85) && (scene->_actor12._position.y == 123)) {
+ scene->_actor14.show();
+ scene->_actor15.show();
+ R2_GLOBALS.setFlag(18);
+ } else {
+ SceneItem::display("That's probably not a good thing, ya know!");
+ }
+ break;
+ case 2:
+ if (scene->_field41A < 780) {
+ if (pos.x > 54)
+ pos.x -= 65;
+ pos.x += 2;
+ scene->_field41A += 2;
- R2_GLOBALS._player.enableControl();
- break;
- case 1704:
- R2_GLOBALS._sound1.play(134);
- R2_GLOBALS._walkRegions.disableRegion(15);
- R2_GLOBALS._walkRegions.disableRegion(2);
- R2_GLOBALS._walkRegions.disableRegion(12);
- R2_GLOBALS._player.fixPriority(-1);
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- break;
- default:
- R2_GLOBALS._player.enableControl();
- break;
- }
-}
+ for (int i = 0; i < 17; i++)
+ scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x + 2, scene->_arrActor[i]._position.y));
-/*--------------------------------------------------------------------------
- * Scene 1750 - Maintaiance Vechile
- *
- *--------------------------------------------------------------------------*/
+ scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x + 2, scene->_actor13._position.y));
+ scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x + 2, scene->_actor12._position.y));
+ scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+ scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+ scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+ }
+ break;
+ case 3:
+ if (scene->_field41A > 0) {
+ if (pos.x < -8)
+ pos.x += 65;
+
+ pos.x -= 2;
+ scene->_field41A -= 2;
+ for (int i = 0; i < 17; i++)
+ scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x - 2, scene->_arrActor[i]._position.y));
+
+ scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x - 2, scene->_actor13._position.y));
+ scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x - 2, scene->_actor12._position.y));
+ scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+ scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+ scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+ }
+ break;
+ case 4: {
+ if (pos.y < 176) {
+ ++pos.y;
+ for (int i = 0; i < 17; ++i)
+ scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y + 1));
+
+ scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y + 1));
+ scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y + 1));
+ scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+ scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+ scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+ }
+ }
+ break;
+ case 5: {
+ if (pos.y > 145) {
+ --pos.y;
+ for (int i = 0; i < 17; ++i)
+ scene->_arrActor[i].setPosition(Common::Point(scene->_arrActor[i]._position.x, scene->_arrActor[i]._position.y - 1));
+
+ scene->_actor13.setPosition(Common::Point(scene->_actor13._position.x, scene->_actor13._position.y - 1));
+ scene->_actor12.setPosition(Common::Point(scene->_actor12._position.x, scene->_actor12._position.y - 1));
+ scene->_actor1.setPosition(Common::Point(pos.x, pos.y));
+ scene->_actor2.setPosition(Common::Point(pos.x + 65, pos.y));
+ scene->_actor3.setPosition(Common::Point(pos.x + 130, pos.y));
+ }
+ }
+ break;
+ case 6:
+ R2_GLOBALS._sceneManager.changeScene(1550);
+ break;
+ default:
+ break;
+ }
-Scene1750::Button::Button() {
- _buttonId = 0;
-}
+ int j = 0;
+ for (int i = 0; i < 17; i++) {
+ if (scene->_arrActor[i]._bounds.contains(85, 116))
+ j = i;
+ }
-void Scene1750::Button::synchronize(Serializer &s) {
- SceneActor::synchronize(s);
+ if (scene->_actor13._bounds.contains(85, 116))
+ j = 18;
- s.syncAsSint16LE(_buttonId);
+ if (scene->_actor12._bounds.contains(85, 116))
+ j = 19;
+
+ if (j)
+ scene->_actor11.show();
+ else
+ scene->_actor11.hide();
+ } else {
+ SceneItem::display("Better not move the laser while it's firing!");
+ }
+ } else {
+ _pressed = false;
+ }
}
-bool Scene1750::Button::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
+bool Scene1575::Button::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE)
+ return false;
+ return SceneHotspot::startAction(action, event);
+}
- Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene;
+void Scene1575::Button::initButton(int buttonId) {
+ _buttonId = buttonId;
+ _pressed = false;
+ EventHandler::postInit();
switch (_buttonId) {
case 1:
- // Forward button
- show();
- scene->_backwardButton.hide();
- if (scene->_speed < 0)
- scene->_speed = -scene->_speed;
- scene->_direction = 1;
+ setDetails(Rect(53, 165, 117, 190), -1, -1, -1, 2, 1, NULL);
break;
case 2:
- // Backwards button
- show();
- scene->_forwardButton.hide();
- if (scene->_speed > 0)
- scene->_speed = -scene->_speed;
- scene->_direction = -1;
+ setDetails(Rect(151, 142, 189, 161), -1, -1, -1, 2, 1, NULL);
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);
- }
+ setDetails(Rect(225, 142, 263, 161), -1, -1, -1, 2, 1, NULL);
+ break;
+ case 4:
+ setDetails(Rect(188, 122, 226, 140), -1, -1, -1, 2, 1, NULL);
+ break;
+ case 5:
+ setDetails(Rect(188, 162, 226, 180), -1, -1, -1, 2, 1, NULL);
+ break;
+ case 6:
+ setDetails(Rect(269, 169, 301, 185), -1, -1, -1, 2, 1, NULL);
+ break;
default:
break;
}
-
- return true;
-}
-
-/*------------------------------------------------------------------------*/
-
-Scene1750::SpeedSlider::SpeedSlider() {
- _incrAmount = 0;
- _xp = 0;
- _ys = 0;
- _height = 0;
- _thumbHeight = 0;
- _mouseDown = false;
}
-void Scene1750::SpeedSlider::synchronize(Serializer &s) {
- SceneActor::synchronize(s);
+/*--------------------------------------------------------------------------*/
- s.syncAsSint16LE(_incrAmount);
- s.syncAsSint16LE(_xp);
- s.syncAsSint16LE(_ys);
- s.syncAsSint16LE(_height);
- s.syncAsSint16LE(_thumbHeight);
- s.syncAsSint16LE(_mouseDown);
+Scene1575::Scene1575() {
+ _field412 = 0;
+ _field414 = 390;
+ _field416 = 0;
+ _field418 = 0;
+ _field41A = 0;
}
-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;
+void Scene1575::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
- postInit();
- setup(1750, 1, 1);
- fixPriority(255);
- setPosition(Common::Point(_xp, _ys + ((_height * (incrAmount - 1)) / (_thumbHeight - 1))));
+ s.syncAsSint16LE(_field412);
+ s.syncAsSint16LE(_field414);
+ s.syncAsSint16LE(_field416);
+ s.syncAsSint16LE(_field418);
+ s.syncAsSint16LE(_field41A);
}
-void Scene1750::SpeedSlider::calculateSlider() {
- Scene1750 *scene = (Scene1750 *)R2_GLOBALS._sceneManager._scene;
-
- int tmpVar = (_height / (_thumbHeight - 1)) / 2;
- int tmpVar2 = ((_position.y - _ys + tmpVar) * _thumbHeight) / (_height + 2 * tmpVar);
-
- setPosition(Common::Point(_xp, _ys + ((_height * tmpVar2) / (_thumbHeight - 1))));
- scene->_speed = scene->_direction * tmpVar2;
+double hypotenuse(double v1, double v2) {
+ return sqrt(v1 * v1 + v2 * v2);
}
-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) && _mouseDown) {
- _mouseDown = false;
- event.handled = true;
- addMover(NULL);
- calculateSlider();
- }
-
- if (_mouseDown) {
- event.handled = true;
- if (event.mousePos.y >= _ys) {
- if (_ys + _height >= event.mousePos.y)
- setPosition(Common::Point(_xp, event.mousePos.y));
- else
- setPosition(Common::Point(_xp, _ys + _height));
- } else {
- setPosition(Common::Point(_xp, _ys));
- }
- }
-}
+void Scene1575::postInit(SceneObjectList *OwnerList) {
+ loadScene(1575);
+ R2_GLOBALS._uiElements._active = false;
+ SceneExt::postInit();
+ R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
-bool Scene1750::SpeedSlider::startAction(CursorType action, Event &event) {
- if (action == CURSOR_USE)
- return SceneActor::startAction(action, event);
+ _actor1.postInit();
+ _actor1.setup(1575, 1, 1);
+ _actor1.setPosition(Common::Point(54, 161));
+ _actor1.fixPriority(5);
- return false;
-}
+ _actor2.postInit();
+ _actor2.setup(1575, 1, 1);
+ _actor2.setPosition(Common::Point(119, 161));
+ _actor2.fixPriority(5);
-/*------------------------------------------------------------------------*/
+ _actor3.postInit();
+ _actor3.setup(1575, 1, 1);
+ _actor3.setPosition(Common::Point(184, 161));
+ _actor3.fixPriority(5);
-Scene1750::Scene1750() {
- _direction = 0;
- _speedCurrent = 0;
- _speed = 0;
- _speedDelta = 0;
- _rotationSegment = 0;
- _rotationSegCurrent = 0;
- _newRotation = 0;
+ for (int i = 0; i < 17; i++) {
+ _arrActor[i].postInit();
+ _arrActor[i].setup(1575, 2, k5A7F6[3 * i + 2]);
- _rotation = nullptr;
-}
+ double v1 = hypotenuse(2.0, 3 - k5A7F6[3 * i]);
+ v1 += hypotenuse(2.0, 3 - k5A7F6[3 * i + 1]);
+ int yp = (int)(sqrt(v1) * 75.0 / 17.0 - 161.0);
-void Scene1750::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
- SYNC_POINTER(_rotation);
+ int angle = R2_GLOBALS._gfxManagerInstance.getAngle(
+ Common::Point(3, 16), Common::Point(k5A7F6[3 * i], k5A7F6[3 * i + 1]));
+ int xp = angle * 78 / 9 - 319;
- s.syncAsSint16LE(_direction);
- s.syncAsSint16LE(_speedCurrent);
- s.syncAsSint16LE(_speed);
- s.syncAsSint16LE(_speedDelta);
- s.syncAsSint16LE(_rotationSegment);
- s.syncAsSint16LE(_rotationSegCurrent);
- s.syncAsSint16LE(_newRotation);
-}
+ _arrActor[i].setPosition(Common::Point(xp, yp));
+ _arrActor[i].fixPriority(6);
+ }
-void Scene1750::postInit(SceneObjectList *OwnerList) {
- loadScene(1750);
- R2_GLOBALS._sound1.play(115);
- R2_GLOBALS._uiElements._active = false;
+ _actor4.postInit();
+ _actor4.setup(1575, 3, 1);
+ _actor4.setPosition(Common::Point(48, 81));
- SceneExt::postInit();
- R2_GLOBALS._interfaceY = SCREEN_HEIGHT;
+ _actor5.postInit();
+ _actor5.setup(1575, 3,1);
+ _actor5.setPosition(Common::Point(121, 81));
- 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;
+ _actor6.postInit();
+ _actor6.setup(1575, 3, 2);
+ _actor6.setPosition(Common::Point(203, 80));
- _rotation = R2_GLOBALS._scenePalette.addRotation(224, 254, 1);
- _rotation->setDelay(0);
- _rotation->_idxChange = 0;
- _rotation->_countdown = 2;
+ _actor7.postInit();
+ _actor7.setup(1575, 3, 2);
+ _actor7.setPosition(Common::Point(217, 80));
- switch ((R2_GLOBALS._rimLocation + 2) % 4) {
- case 0:
- _rotation->_currIndex = 247;
- break;
- case 1:
- _rotation->_currIndex = 235;
- break;
- case 2:
- _rotation->_currIndex = 239;
- break;
- case 3:
- _rotation->_currIndex = 243;
- break;
- default:
- break;
- }
+ _actor8.postInit();
+ _actor8.setup(1575, 3, 2);
+ _actor8.setPosition(Common::Point(231, 80));
- byte tmpPal[768];
+ _actor9.postInit();
+ _actor9.setup(1575, 3, 2);
+ _actor9.setPosition(Common::Point(273, 91));
- for (int i = 224; i < 255; i++) {
- int tmpIndex = _rotation->_currIndex - 224;
- if (tmpIndex > 254)
- tmpIndex -= 31;
- tmpPal[3 * i] = R2_GLOBALS._scenePalette._palette[3 * tmpIndex];
- tmpPal[(3 * i) + 1] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 1];
- tmpPal[(3 * i) + 2] = R2_GLOBALS._scenePalette._palette[(3 * tmpIndex) + 2];
- }
+ _actor10.postInit();
+ _actor10.setup(1575, 3, 2);
+ _actor10.setPosition(Common::Point(287, 91));
- for (int i = 224; i < 255; i++) {
- R2_GLOBALS._scenePalette._palette[3 * i] = tmpPal[3 * i];
- R2_GLOBALS._scenePalette._palette[(3 * i) + 1] = tmpPal[(3 * i) + 1];
- R2_GLOBALS._scenePalette._palette[(3 * i) + 2] = tmpPal[(3 * i) + 2];
- }
+ // Initialize buttons
+ _button1.initButton(1);
+ _button2.initButton(2);
+ _button3.initButton(3);
+ _button4.initButton(4);
+ _button5.initButton(5);
+ _button6.initButton(6);
+
+ _actor11.postInit();
+ _actor11.setup(1575, 4, 2);
+ _actor11.setPosition(Common::Point(84, 116));
+ _actor11.hide();
R2_GLOBALS._player.postInit();
R2_GLOBALS._player.hide();
R2_GLOBALS._player.enableControl();
- _radarSweep.postInit();
- _radarSweep.setup(1750, 3, 1);
- _radarSweep.setPosition(Common::Point(49, 185));
- _radarSweep.fixPriority(7);
- _radarSweep.setDetails(1750, 30, -1, -1, 1, (SceneItem *) NULL);
-
- _scannerIcon.postInit();
- _scannerIcon.setup(1750, 2, 1);
- _scannerIcon.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._rimLocation % 800) * 4) - 1440));
- _scannerIcon.fixPriority(8);
+ do {
+ _field412 = R2_GLOBALS._randomSource.getRandomNumber(20) - 10;
+ _field414 = R2_GLOBALS._randomSource.getRandomNumber(20) - 10;
+ } while ((_field412) && (_field414));
- _redLights.postInit();
- _redLights.setup(1750, 1, 4);
+ if (_field412 < 0)
+ _actor4.hide();
- int tmpVar = ABS(_scannerIcon._position.y - 158) / 100;
+ if (_field414 < 0)
+ _actor5.hide();
- if (tmpVar >= 8)
- _redLights.hide();
- else if (_scannerIcon._position.y <= 158)
- _redLights.setPosition(Common::Point(137, (tmpVar * 7) + 122));
- else
- _redLights.setPosition(Common::Point(148, (tmpVar * 7) + 122));
+ _field416 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
+ _field418 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
- _speedSlider.setupSlider(1, 286, 143, 41, 15);
- _speedSlider.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL);
+ _actor13.postInit();
+ _actor13.setup(1575, 2, 4);
- _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);
+ // TODO
+ warning("TODO: another immense pile of floating operations");
- _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();
+ _actor12.postInit();
+ _actor12.fixPriority(12);
- _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);
+ if (R2_GLOBALS.getFlag(17)) {
+ _actor13.setPosition(Common::Point(_actor13._position.x + 5, _actor13._position.y));
+ _actor12.setPosition(Common::Point(_actor12._position.x + 5, _actor12._position.y));
+ }
- _direction = 1; // Forward by default
- _speedDelta = 0;
- _speedCurrent = 0;
- _speed = 0;
- _rotationSegment = ((_rotation->_currIndex - 218) / 4) % 4;
+ _actor14.postInit();
+ _actor14.setup(1575, 5, 1);
+ _actor14.setPosition(Common::Point(85, 176));
+ _actor14.fixPriority(7);
+ _actor14.hide();
- _redLightsDescr.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);
+ _actor15.postInit();
+ _actor15.setup(1575, 5, 2);
+ _actor15.setPosition(Common::Point(85, 147));
+ _actor15.fixPriority(7);
+ _actor15.hide();
}
-void Scene1750::remove() {
- if (R2_GLOBALS._rimLocation == 2400)
- R2_GLOBALS._rimLocation = 2399;
-
- if (R2_GLOBALS._rimLocation == -2400)
- R2_GLOBALS._rimLocation = -2399;
-
- R2_GLOBALS._rimTransportLocation = R2_GLOBALS._rimLocation;
-
+void Scene1575::remove() {
SceneExt::remove();
- R2_GLOBALS._sound1.fadeOut2(NULL);
R2_GLOBALS._uiElements._active = true;
}
-void Scene1750::signal() {
+void Scene1575::signal() {
R2_GLOBALS._player.enableControl();
}
-void Scene1750::process(Event &event) {
+void Scene1575::process(Event &event) {
Scene::process(event);
- if (!event.handled)
- _speedSlider.process(event);
-}
-void Scene1750::dispatch() {
- if (_rotation) {
- if (!_speedDelta && (_speed != _speedCurrent)) {
- if (_speedCurrent >= _speed)
- --_speedCurrent;
- else
- ++_speedCurrent;
+ g_globals->_sceneObjects->recurse(SceneHandler::dispatchObject);
+}
- _speedDelta = 21 - ABS(_speedCurrent);
+void Scene1575::dispatch() {
+ if (_field412 <= 0) {
+ ++_field412;
+ if (_field412 == 0) {
+ _actor4.show();
+ _field412 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
}
-
- if (_speedDelta == 1) {
- if (_speedCurrent == 0) {
- _radarSweep.show();
- _rotation->_idxChange = 0;
- } else {
- if (_rotation->_idxChange == 0)
- _radarSweep.hide();
-
- if (_speedCurrent < -12) {
- _rotation->setDelay(15 - ABS(_speedCurrent));
- _rotation->_idxChange = -2;
- } else if (_speedCurrent < 0) {
- _rotation->setDelay(10 - ABS(_speedCurrent));
- _rotation->_idxChange = -1;
- } else if (_speedCurrent < 11) {
- _rotation->setDelay(10 - _speedCurrent);
- _rotation->_idxChange = 1;
- } else {
- _rotation->setDelay(15 - _speedCurrent);
- _rotation->_idxChange = 2;
- }
- }
+ } else {
+ _field412--;
+ if (_field412 ==0) {
+ _actor4.hide();
+ _field412 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
}
+ }
- if (_speedDelta)
- --_speedDelta;
-
- _rotationSegCurrent = _rotationSegment;
- _rotationSegment = ((_rotation->_currIndex - 218) / 4) % 4;
-
- if ((_rotationSegCurrent + 1) == _rotationSegment || (_rotationSegCurrent - 3) == _rotationSegment) {
- if (R2_GLOBALS._rimLocation < 2400) {
- ++R2_GLOBALS._rimLocation;
- }
+ if (_field414 <= 0) {
+ ++_field414;
+ if (_field414 == 0) {
+ _actor5.show();
+ _field414 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
}
-
- if ((_rotationSegCurrent - 1) == _rotationSegment || (_rotationSegCurrent + 3) == _rotationSegment) {
- if (R2_GLOBALS._rimLocation > -2400) {
- --R2_GLOBALS._rimLocation;
- }
+ } else {
+ _field414--;
+ if (_field414 == 0) {
+ _actor5.hide();
+ _field414 = R2_GLOBALS._randomSource.getRandomNumber(9) + 1;
}
+ }
- if (_rotation->_currIndex != _newRotation) {
- // Handle setting the position of the lift icon in the scanner display
- _newRotation = _rotation->_currIndex;
- _scannerIcon.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) +
- ((R2_GLOBALS._rimLocation % 800) * 4) - 1440));
+ if (_field416 == 0) {
+ switch(R2_GLOBALS._randomSource.getRandomNumber(3)) {
+ case 0:
+ _actor6.hide();
+ _actor7.hide();
+ _actor8.hide();
+ break;
+ case 1:
+ _actor6.show();
+ _actor7.hide();
+ _actor8.hide();
+ break;
+ case 2:
+ _actor6.show();
+ _actor7.show();
+ _actor8.hide();
+ break;
+ case 3:
+ _actor6.show();
+ _actor7.show();
+ _actor8.show();
+ break;
+ default:
+ break;
}
+ _field416 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
+ } else {
+ --_field416;
}
- int v = ABS(_scannerIcon._position.y - 158) / 100;
- if (v < 8) {
- // Show how close the user is to the lift on the second column of lights
- _redLights.show();
- _redLights.setPosition(Common::Point((_scannerIcon._position.y <= 158) ? 137 : 148,
- v * 7 + 122));
+ if (_field418 == 0) {
+ switch(R2_GLOBALS._randomSource.getRandomNumber(2)) {
+ case 0:
+ _actor9.hide();
+ _actor10.hide();
+ break;
+ case 1:
+ _actor9.show();
+ _actor10.hide();
+ break;
+ case 2:
+ _actor9.show();
+ _actor10.show();
+ break;
+ default:
+ break;
+ }
+ _field418 = R2_GLOBALS._randomSource.getRandomNumber(4) + 1;
} else {
- _redLights.hide();
+ _field418--;
}
+ Scene::dispatch();
}
/*--------------------------------------------------------------------------
- * Scene 1800 - Rim Lift Exterior
+ * Scene 1580 - Inside wreck
*
*--------------------------------------------------------------------------*/
-Scene1800::Scene1800() {
- _locationMode = 0;
+Scene1580::Scene1580() {
}
-void Scene1800::synchronize(Serializer &s) {
+void Scene1580::synchronize(Serializer &s) {
SceneExt::synchronize(s);
+}
- s.syncAsSint16LE(_locationMode);
+bool Scene1580::JoystickPlug::startAction(CursorType action, Event &event) {
+ if (action == R2_JOYSTICK) {
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
+
+ R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1580);
+ R2_GLOBALS._sceneItems.remove(&scene->_joystickPlug);
+ scene->_joystick.postInit();
+ scene->_joystick.setup(1580, 1, 4);
+ scene->_joystick.setPosition(Common::Point(159, 163));
+ scene->_joystick.setDetails(1550, 78, -1, -1, 2, (SceneItem *) NULL);
+
+ scene->_arrActor[5].remove();
+
+ return true;
+ }
+
+ return SceneHotspot::startAction(action, event);
}
-bool Scene1800::Background::startAction(CursorType action, Event &event) {
- if ((action != R2_COM_SCANNER) && (action != R2_COM_SCANNER_2))
- return false;
+bool Scene1580::ScreenSlot::startAction(CursorType action, Event &event) {
+ if (action == R2_DIAGNOSTICS_DISPLAY) {
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
- Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+ R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, 1580);
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._sceneItems.remove(&scene->_screenSlot);
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ scene->_screen.postInit();
+ scene->_screen.setup(1580, 1, 1);
+ scene->_screen.setPosition(Common::Point(124, 108));
+ scene->_screen.fixPriority(10);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- if (R2_GLOBALS._rimLocation == 1201) {
- scene->_stripManager.start(548, this);
- } else if (R2_GLOBALS.getFlag(66)) {
- return false;
- } else {
- scene->_stripManager.start(546, this);
- }
- } else {
- if (R2_GLOBALS._rimLocation == 1201) {
- scene->_stripManager.start(549, this);
- } else if (R2_GLOBALS.getFlag(66)) {
- return false;
- } else {
- scene->_stripManager.start(547, this);
- }
+ if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1580)
+ scene->_screen.setDetails(1550, 14, -1, -1, 5, &scene->_joystick);
+ else
+ scene->_screen.setDetails(1550, 14, -1, -1, 2, (SceneItem *)NULL);
+
+ scene->_screenDisplay.postInit();
+ scene->_screenDisplay.setup(1580, 3, 1);
+ scene->_screenDisplay.setPosition(Common::Point(124, 109));
+ scene->_screenDisplay.fixPriority(20);
+ //scene->_field412 = 1;
+ scene->_sceneMode = 10;
+ scene->setAction(&scene->_sequenceManager, scene, 1, &R2_GLOBALS._player, NULL);
+
+ return true;
}
- R2_GLOBALS.setFlag(66);
- return true;
+ return SceneHotspot::startAction(action, event);
}
-bool Scene1800::Lever::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneActor::startAction(action, event);
+bool Scene1580::Joystick::startAction(CursorType action, Event &event) {
+ 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 == R2_QUINN)
+ scene->_stripManager.start(536, scene);
+ else
+ scene->_stripManager.start(537, scene);
- if (!R2_GLOBALS.getFlag(14))
- return false;
+ return true;
+ }
- if (R2_GLOBALS._player._characterIndex != R2_QUINN)
- return SceneActor::startAction(action, event);
+ return SceneActor::startAction(action, event);
+}
- Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
- R2_GLOBALS._player.disableControl();
+bool Scene1580::Screen::startAction(CursorType action, Event &event) {
+ if ((action == CURSOR_USE) && (R2_INVENTORY.getObjectScene(R2_BROKEN_DISPLAY) == 1580)) {
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
- if (_frame == 1) {
- R2_GLOBALS.setFlag(64);
- scene->_sceneMode = 1810;
- 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->_lever, &scene->_leftStaircase, &scene->_rightStaircase, NULL);
+ R2_INVENTORY.setObjectScene(R2_BROKEN_DISPLAY, R2_GLOBALS._player._characterIndex);
+ scene->_screenSlot.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 2, NULL);
+ scene->_screenDisplay.remove();
+ remove();
+ return true;
}
- return true;
+
+ return SceneActor::startAction(action, event);
}
-bool Scene1800::Doors::startAction(CursorType action, Event &event) {
+bool Scene1580::StorageCompartment::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
- Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
- if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
- // Seeker trying to force open the door
- R2_GLOBALS._player.disableControl();
- 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->_doors, NULL);
- R2_GLOBALS.clearFlag(14);
- } else {
- // Force open door
- scene->_sceneMode = 1808;
- scene->setAction(&scene->_sequenceManager, scene, 1808, &R2_GLOBALS._player, &scene->_doors, NULL);
- R2_GLOBALS.setFlag(14);
- }
- } else {
- // Seeker failing to force open doors
- scene->_sceneMode = 1813;
- // Original was using 1813 in setAction too, but it somewhat broken.
- // Seeker goes 2 pixels to high, hiding behind the door
- scene->setAction(&scene->_sequenceManager, scene, 1808, &R2_GLOBALS._player, &scene->_doors, NULL);
- }
- } 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);
- }
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._sceneItems.remove(&scene->_storageCompartment);
+ scene->_sceneMode = 0;
+ animate(ANIM_MODE_5, scene);
return true;
}
-bool Scene1800::PassengerDoor::startAction(CursorType action, Event &event) {
+bool Scene1580::HatchButton::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
return SceneActor::startAction(action, event);
- Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
- if (_position.x < 160) {
- 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 = 1;
- 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, &scene->_doors, NULL);
- R2_GLOBALS.clearFlag(14);
- } else {
- scene->_sceneMode = 1805;
- scene->setAction(&scene->_sequenceManager, scene, 1805, &R2_GLOBALS._player, &scene->_companion, &scene->_leftDoor, NULL);
- }
- }
- }
- } else if (scene->_leftStaircase._frame == 1) {
- return SceneActor::startAction(action, event);
- } else {
- R2_GLOBALS.clearFlag(29);
- R2_GLOBALS._player.disableControl();
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- if (R2_GLOBALS.getFlag(14)) {
- scene->_sceneMode = 2;
- scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_companion, &scene->_doors, NULL);
- R2_GLOBALS.clearFlag(14);
- } else {
- scene->_sceneMode = 1806;
- 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->_doors, NULL);
- R2_GLOBALS.clearFlag(14);
- } else {
- scene->_sceneMode = 1807;
- scene->setAction(&scene->_sequenceManager, scene, 1807, &R2_GLOBALS._player, &scene->_companion, &scene->_rightDoor, NULL);
- }
- }
- }
+ R2_GLOBALS._player.disableControl();
+ setFrame(2);
+ scene->_sceneMode = 20;
+ scene->setAction(&scene->_sequenceManager, scene, 2, &R2_GLOBALS._player, NULL);
return true;
}
-void Scene1800::SouthExit::changeScene() {
- Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+bool Scene1580::ThrusterValve::startAction(CursorType action, Event &event) {
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
- _enabled = false;
- R2_GLOBALS._events.setCursor(CURSOR_WALK);
- R2_GLOBALS._player.disableControl();
- if (R2_GLOBALS.getFlag(14)) {
- scene->_sceneMode = 3;
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_companion, &scene->_doors, NULL);
- else
- 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->_companion, NULL);
- else
- scene->setAction(&scene->_sequenceManager, scene, 1803, &R2_GLOBALS._player, &scene->_companion, NULL);
+ switch (action) {
+ case CURSOR_USE:
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ R2_INVENTORY.setObjectScene(R2_THRUSTER_VALVE, 1);
+ remove();
+ return true;
+ }
+ break;
+ case R2_COM_SCANNER:
+ scene->_sceneMode = 30;
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ scene->_stripManager.start(529, scene);
+ return true;
+ break;
+ case R2_COM_SCANNER_2:
+ scene->_sceneMode = 30;
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ scene->_stripManager.start(527, scene);
+ return true;
+ break;
+ default:
+ break;
}
-}
-
-void Scene1800::postInit(SceneObjectList *OwnerList) {
- loadScene(1800);
- SceneExt::postInit();
- R2_GLOBALS._sound1.play(116);
- _stripManager.addSpeaker(&_quinnSpeaker);
- _stripManager.addSpeaker(&_seekerSpeaker);
- if (R2_GLOBALS._sceneManager._previousScene == -1)
- R2_GLOBALS._rimLocation = 1201;
-
- // Set the mode based on whether this is the "correct" lift or not
- if (R2_GLOBALS._rimLocation == 1201)
- _locationMode = 2;
- else
- _locationMode = 0;
-
- scalePalette(65, 65, 65);
- _southExit.setDetails(Rect(0, 160, 319, 168), EXITCURSOR_S, 1800);
- _background.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL);
+ return SceneActor::startAction(action, event);
+}
- _lever.postInit();
- _lever.setup(1801, 4, 1);
- _lever.setPosition(Common::Point(170, 124));
- _lever.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL);
+bool Scene1580::Ignitor::startAction(CursorType action, Event &event) {
+ Scene1580 *scene = (Scene1580 *)R2_GLOBALS._sceneManager._scene;
- _doors.postInit();
- _doors.setup(1801, 3, 1);
- _doors.setPosition(Common::Point(160, 139));
- _doors.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL);
+ switch (action) {
+ case CURSOR_USE:
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ R2_INVENTORY.setObjectScene(R2_IGNITOR, 1);
+ remove();
+ return true;
+ }
+ break;
+ case R2_COM_SCANNER:
+ scene->_sceneMode = 30;
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ scene->_stripManager.start(529, scene);
+ return true;
+ break;
+ case R2_COM_SCANNER_2:
+ scene->_sceneMode = 30;
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ scene->_stripManager.start(527, scene);
+ return true;
+ break;
+ default:
+ break;
+ }
- _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);
+ return SceneActor::startAction(action, event);
+}
- _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);
+void Scene1580::postInit(SceneObjectList *OwnerList) {
+ loadScene(1580);
+ R2_GLOBALS._sceneManager._fadeMode = FADEMODE_GRADUAL;
+ SceneExt::postInit();
- _leftStaircase.postInit();
- if ((_locationMode != 1) && (_locationMode != 3) && (!R2_GLOBALS.getFlag(64)))
- _leftStaircase.setup(1801, 2, 1);
- else
- _leftStaircase.setup(1801, 2, 10);
- _leftStaircase.setPosition(Common::Point(76, 142));
- _leftStaircase.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL);
+ _stripManager.setColors(60, 255);
+ _stripManager.setFontNumber(3);
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_seekerSpeaker);
- _rightStaircase.postInit();
- if ((_locationMode != 1) && (_locationMode != 3) && (!R2_GLOBALS.getFlag(64)))
- _rightStaircase.setup(1801, 1, 1);
- else
- _rightStaircase.setup(1801, 1, 10);
- _rightStaircase.setPosition(Common::Point(243, 142));
- _rightStaircase.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL);
+ _sceneMode = 0;
- 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);
+ R2_GLOBALS._player.disableControl();
+ if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1580) {
+ _joystick.postInit();
+ _joystick.setup(1580, 1, 4);
+ _joystick.setPosition(Common::Point(159, 163));
+ _joystick.setDetails(1550, 78, -1, -1, 1, (SceneItem *) NULL);
} 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.disableRegion(9);
- _doors.hide();
- } else {
- R2_GLOBALS._player.setVisage(1507);
- }
- R2_GLOBALS._player._moveDiff = Common::Point(4, 2);
+ _joystickPlug.setDetails(Rect(141, 148, 179, 167), 1550, 79, -1, -1, 1, NULL);
}
- _companion.postInit();
- _companion.animate(ANIM_MODE_1, NULL);
- _companion.setObjectWrapper(new SceneObjectWrapper());
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- if (R2_GLOBALS.getFlag(14)) {
- _companion.animate(ANIM_MODE_NONE, NULL);
- _companion.setObjectWrapper(NULL);
- _companion.setup(1801, 5, 12);
+ if (R2_INVENTORY.getObjectScene(R2_BROKEN_DISPLAY) == 1580) {
+ _screen.postInit();
+ _screen.setup(1580, 1, 1);
+ _screen.setPosition(Common::Point(124, 108));
+ _screen.fixPriority(10);
+ _screen.setDetails(1550, 13, -1, -1, 1, (SceneItem *) NULL);
- R2_GLOBALS._walkRegions.disableRegion(9);
- _doors.hide();
- } else {
- _companion.setup(1507, 1, 1);
- _companion.setPosition(Common::Point(180, 160));
- }
- _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL);
- _companion._moveDiff = Common::Point(4, 2);
+ _screenDisplay.postInit();
+ _screenDisplay.setup(1580, 1, 3);
+ _screenDisplay.setPosition(Common::Point(124, 96));
+ _screenDisplay.fixPriority(20);
+ } else if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1580) {
+ _screen.postInit();
+ _screen.setup(1580, 1, 1);
+ _screen.setPosition(Common::Point(124, 108));
+ _screen.fixPriority(10);
+ _screen.setDetails(1550, 14, -1, -1, 1, (SceneItem *) NULL);
+
+ _screenDisplay.postInit();
+ _screenDisplay.setup(1580, 3, 1);
+ _screenDisplay.setPosition(Common::Point(124, 109));
+ _screenDisplay.fixPriority(20);
+
+ _sceneMode = 10;
} else {
- _companion.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL);
- _companion.setVisage(1503);
- _companion._moveDiff = Common::Point(2, 2);
+ _screenSlot.setDetails(Rect(69, 29, 177, 108), 1550, 82, -1, -1, 1, NULL);
}
- if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) {
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_GLOBALS._player.setPosition(Common::Point(114, 150));
- R2_GLOBALS._player.setStrip(5);
- if (R2_GLOBALS.getFlag(14)) {
- _companion.setPosition(Common::Point(160, 139));
- R2_GLOBALS._walkRegions.disableRegion(8);
- } else {
- _companion.setPosition(Common::Point(209, 150));
- _companion.setStrip(6);
- R2_GLOBALS._walkRegions.disableRegion(8);
- }
- } else {
- if (R2_GLOBALS.getFlag(14)) {
- R2_GLOBALS._player.setup(1801, 5, 12);
- R2_GLOBALS._player.setPosition(Common::Point(160, 139));
- } else {
- R2_GLOBALS._player.setPosition(Common::Point(209, 150));
- R2_GLOBALS._player.setStrip(6);
- }
- _companion.setPosition(Common::Point(114, 150));
- _companion.setStrip(5);
- R2_GLOBALS._walkRegions.disableRegion(10);
- R2_GLOBALS._walkRegions.disableRegion(11);
- }
- } else if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_GLOBALS._player.setPosition(Common::Point(140, 160));
- _companion.setPosition(Common::Point(180, 160));
+ _storageCompartment.postInit();
+ if (R2_GLOBALS.getFlag(58) == 0) {
+ _storageCompartment.setup(1580, 5, 1);
+ _storageCompartment.setDetails(1550, 80, -1, -1, 1, (SceneItem *) NULL);
} else {
- R2_GLOBALS._player.setPosition(Common::Point(180, 160));
- _companion.setPosition(Common::Point(140, 160));
+ _storageCompartment.setup(1580, 5, 6);
}
- _playerShadow.postInit();
- _playerShadow.fixPriority(10);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _playerShadow.setVisage(1111);
- else
- _playerShadow.setVisage(1110);
-
- _playerShadow._effect = EFFECT_SHADOW_MAP;
- _playerShadow._shadowMap = _shadowPaletteMap;
-
- R2_GLOBALS._player._linkedActor = &_playerShadow;
+ _storageCompartment.setPosition(Common::Point(216, 108));
+ _storageCompartment.fixPriority(100);
- _companionShadow.postInit();
- _companionShadow.fixPriority(10);
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- _companionShadow.setVisage(1110);
- else
- _companionShadow.setVisage(1111);
+ _hatchButton.postInit();
+ _hatchButton.setup(1580, 4, 1);
+ _hatchButton.setPosition(Common::Point(291, 147));
+ _hatchButton.fixPriority(100);
+ _hatchButton.setDetails(1550, 81, -1, -1, 1, (SceneItem *) NULL);
- _companionShadow._effect = EFFECT_SHADOW_MAP;
- _companionShadow._shadowMap = _shadowPaletteMap;
+ if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) == 1580) {
+ _thrusterValve.postInit();
+ _thrusterValve.setup(1580, 6, 2);
+ _thrusterValve.setPosition(Common::Point(222, 108));
+ _thrusterValve.fixPriority(50);
+ _thrusterValve.setDetails(1550, 32, -1, 34, 1, (SceneItem *) NULL);
+ }
- _companion._linkedActor = &_companionShadow;
+ if (R2_INVENTORY.getObjectScene(R2_IGNITOR) == 1580) {
+ _ignitor.postInit();
+ _ignitor.setup(1580, 6, 1);
+ _ignitor.setPosition(Common::Point(195, 108));
+ _ignitor.fixPriority(50);
+ _ignitor.setDetails(1550, 38, -1, 34, 1, (SceneItem *) NULL);
+ }
- R2_GLOBALS._player._characterScene[R2_QUINN] = 1800;
- R2_GLOBALS._player._characterScene[R2_SEEKER] = 1800;
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.hide();
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ _background.setDetails(Rect(0, 0, 320, 200), 1550, 50, -1, -1, 1, NULL);
+}
- _elevatorContents.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL);
- _elevator.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL);
+void Scene1580::signal() {
+ switch (_sceneMode++) {
+ case 10:
+ _screenDisplay.animate(ANIM_MODE_5, this);
+ break;
+ case 11:
+ _screenDisplay.setup(1580, 1, 2);
+ _screenDisplay.setPosition(Common::Point(124, 94));
- // Original was calling _item3.setDetails(Rect(1800, 11, 24, 23), 25, -1, -1, -1, 1, NULL);
- // This is *wrong*. The following statement is a wild guess based on good common sense
- _surface.setDetails(11, 1800, 23, 24, 25);
- _secBackground.setDetails(Rect(0, 0, 320, 200), 1800, 17, -1, 19, 1, NULL);
+ if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) != 0) {
+ _arrActor[0].postInit();
+ _arrActor[0].setup(1580, 2, 1);
+ _arrActor[0].setPosition(Common::Point(138, 56));
+ }
- R2_GLOBALS._player.disableControl();
- if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) {
- if ((R2_GLOBALS.getFlag(14)) && (R2_GLOBALS._player._characterIndex == R2_SEEKER)) {
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- R2_GLOBALS._player._canWalk = false;
- } else {
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
+ if (R2_INVENTORY.getObjectScene(R2_RADAR_MECHANISM) != 0) {
+ _arrActor[1].postInit();
+ _arrActor[1].setup(1580, 2, 2);
+ _arrActor[1].setPosition(Common::Point(140, 66));
}
- } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) {
- if (R2_GLOBALS.getFlag(29)) {
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _sceneMode = 1814;
- setAction(&_sequenceManager, this, 1814, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL);
- } else {
- _sceneMode = 1815;
- 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, &_companion, &_rightDoor, NULL);
- } else {
- _sceneMode = 1817;
- setAction(&_sequenceManager, this, 1817, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL);
+
+ if (R2_INVENTORY.getObjectScene(R2_IGNITOR) != 0) {
+ _arrActor[2].postInit();
+ _arrActor[2].setup(1580, 2, 3);
+ _arrActor[2].setPosition(Common::Point(142, 85));
}
- } else if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _sceneMode = 1800;
- setAction(&_sequenceManager, this, 1800, &R2_GLOBALS._player, &_companion, NULL);
- } else {
- _sceneMode = 1801;
- setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_companion, NULL);
- }
- R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1800;
- R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1800;
-}
+ if (R2_INVENTORY.getObjectScene(R2_THRUSTER_VALVE) != 0) {
+ _arrActor[3].postInit();
+ _arrActor[3].setup(1580, 2, 4);
+ _arrActor[3].setPosition(Common::Point(142, 92));
+ }
-void Scene1800::signal() {
- switch (_sceneMode) {
- case 1:
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _sceneMode = 1804;
- setAction(&_sequenceManager, this, 1804, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL);
- } else {
- _sceneMode = 1805;
- setAction(&_sequenceManager, this, 1805, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL);
+ if (R2_INVENTORY.getObjectScene(R2_GUIDANCE_MODULE) != 0) {
+ _arrActor[4].postInit();
+ _arrActor[4].setup(1580, 2, 5);
+ _arrActor[4].setPosition(Common::Point(108, 54));
}
- break;
- case 2:
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _sceneMode = 1806;
- setAction(&_sequenceManager, this, 1806, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL);
- } else {
- _sceneMode = 1807;
- setAction(&_sequenceManager, this, 1807, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL);
+
+ if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) != 1580) {
+ _arrActor[5].postInit();
+ _arrActor[5].setup(1580, 2, 6);
+ _arrActor[5].setPosition(Common::Point(110, 64));
}
- break;
- case 3:
- _sceneMode = 1802;
- if (R2_GLOBALS._player._characterIndex == R2_QUINN)
- setAction(&_sequenceManager, this, 1802, &R2_GLOBALS._player, &_companion, NULL);
- else
- setAction(&_sequenceManager, this, 1803, &R2_GLOBALS._player, &_companion, NULL);
- break;
- case 10:
- // No break on purpose
- case 11:
- R2_GLOBALS._player.enableControl(CURSOR_TALK);
- break;
- case 12:
- R2_GLOBALS._player.enableControl(CURSOR_TALK);
- R2_GLOBALS._player._canWalk = false;
- break;
- case 13:
- _sceneMode = 14;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- R2_GLOBALS._player.setup(1801, 7, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_8, 0, NULL);
- _stripManager.start(550, this);
- break;
- case 14:
- _sceneMode = 15;
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._player.setup(1801, 6, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_6, this);
- break;
- case 15:
- R2_GLOBALS._player.setup(1503, 4, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- break;
- // Cases 23 and 24 have been added to fix missing hardcoded logic in the original,
- // when Seeker tries to open the door
- case 23:
- _sceneMode = 24;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- R2_GLOBALS._player.setup(1801, 5, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_8, 0, NULL);
- _stripManager.start(550, this);
- break;
- case 24:
- R2_GLOBALS._player.disableControl();
- R2_GLOBALS._player.setup(1507, 4, 1);
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- _doors.setup(1801, 3, 1);
- _doors.setPosition(Common::Point(160, 139));
- _doors.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL);
- _doors.show();
+ if (R2_INVENTORY.getObjectScene(R2_BATTERY) != 0) {
+ _arrActor[6].postInit();
+ _arrActor[6].setup(1580, 2, 7);
+ _arrActor[6].setPosition(Common::Point(108, 80));
+ }
- R2_GLOBALS._player._position.y += 2;
- R2_GLOBALS._player.show();
- break;
- case 1800:
- R2_GLOBALS._walkRegions.disableRegion(8);
- if (R2_GLOBALS.getFlag(63))
- R2_GLOBALS._player.enableControl(CURSOR_USE);
- else {
- _sceneMode = 10;
- R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
- _stripManager.start(544, this);
+ if (R2_INVENTORY.getObjectScene(R2_FUEL_CELL) != 0) {
+ _arrActor[7].postInit();
+ _arrActor[7].setup(1580, 2, 8);
+ _arrActor[7].setPosition(Common::Point(111, 92));
}
+
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
break;
- case 1801:
- R2_GLOBALS._walkRegions.disableRegion(10);
- R2_GLOBALS._walkRegions.disableRegion(11);
- R2_GLOBALS.setFlag(63);
- R2_GLOBALS._player.enableControl(CURSOR_WALK);
- break;
- case 1802:
- R2_GLOBALS.clearFlag(14);
- R2_GLOBALS._sceneManager.changeScene(1700);
- break;
- case 1804:
- // No break on purpose
- case 1805:
- // No break on purpose
- case 1806:
- // No break on purpose
- case 1807:
- R2_GLOBALS.clearFlag(14);
- R2_GLOBALS._sceneManager.changeScene(1850);
- break;
- case 1808:
- _sceneMode = 12;
- R2_GLOBALS._events.setCursor(CURSOR_WALK);
- _stripManager.start(553, this);
- break;
- case 1812:
- _sceneMode = 13;
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- // Case 1813 has been added to fix Seeker missing animation in the original game
- case 1813:
- _sceneMode = 23;
- R2_GLOBALS._player.animate(ANIM_MODE_5, this);
- break;
- case 1814:
- // No break on purpose
- case 1815:
- R2_GLOBALS._walkRegions.disableRegion(10);
- R2_GLOBALS._walkRegions.disableRegion(11);
- R2_GLOBALS._player.enableControl();
+ case 20:
+ R2_GLOBALS._sceneManager.changeScene(1550);
break;
- case 1816:
- // No break on purpose
- case 1817:
- R2_GLOBALS._walkRegions.disableRegion(8);
- R2_GLOBALS._player.enableControl();
+ case 31:
+ R2_GLOBALS._sceneManager.changeScene(1530);
break;
default:
- R2_GLOBALS._player.enableControl();
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
break;
}
}
-void Scene1800::saveCharacter(int characterIndex) {
- if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
- R2_GLOBALS._sound1.fadeOut2(NULL);
-
- SceneExt::saveCharacter(characterIndex);
-}
-
/*--------------------------------------------------------------------------
- * Scene 1850 - Rim Lift Interior
+ * Scene 1625 - Miranda being questioned
*
*--------------------------------------------------------------------------*/
-bool Scene1850::Button::startAction(CursorType action, Event &event) {
+bool Scene1625::Wire::startAction(CursorType action, Event &event) {
if (action != CURSOR_USE)
- return SceneHotspot::startAction(action, event);
-
- Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene;
+ return SceneActor::startAction(action, event);
+ Scene1625 *scene = (Scene1625 *)R2_GLOBALS._sceneManager._scene;
R2_GLOBALS._player.disableControl();
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- scene->_sceneMode = 1852;
- if (R2_GLOBALS.getFlag(32))
- scene->setAction(&scene->_sequenceManager1, scene, 1871, &R2_GLOBALS._player, NULL);
- else
- scene->setAction(&scene->_sequenceManager1, scene, 1852, &R2_GLOBALS._player, NULL);
- } else if (R2_GLOBALS.getFlag(30)) {
- scene->_seqNumber = 1;
- scene->_sceneMode = 1860;
- if (R2_GLOBALS.getFlag(32))
- scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_robot, NULL);
- else
- scene->setAction(&scene->_sequenceManager1, scene, 1859, &R2_GLOBALS._player, &scene->_robot, NULL);
+ scene->_sceneMode = 1631;
+ scene->_mirandaMouth.postInit();
+ scene->setAction(&scene->_sequenceManager, scene, 1631, &scene->_mirandaMouth, &scene->_wire, NULL);
+ return true;
+}
+
+Scene1625::Scene1625() {
+}
+
+void Scene1625::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+}
+
+void Scene1625::postInit(SceneObjectList *OwnerList) {
+ loadScene(1625);
+ R2_GLOBALS._player._characterIndex = R2_MIRANDA;
+ SceneExt::postInit();
+
+ _stripManager.addSpeaker(&_mirandaSpeaker);
+ _stripManager.addSpeaker(&_tealSpeaker);
+ _stripManager.addSpeaker(&_soldierSpeaker);
- R2_GLOBALS.clearFlag(30);
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.hide();
+
+ _wire.postInit();
+ _wire.setup(1626, 2, 1);
+ _wire.setPosition(Common::Point(206, 133));
+ _wire.setDetails(1625, 0, -1, -1, 1, (SceneItem *) NULL);
+
+ _wristRestraints.postInit();
+ _wristRestraints.setup(1625, 8, 1);
+ _wristRestraints.setPosition(Common::Point(190, 131));
+ _wristRestraints.setDetails(1625, 6, -1, 2, 1, (SceneItem *) NULL);
+
+ if (R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] == 1625) {
+ if (!R2_GLOBALS.getFlag(83)) {
+ _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;
} else {
- scene->_sceneMode = 1853;
+ _teal.postInit();
+ _teal.fixPriority(10);
- if (R2_GLOBALS.getFlag(32))
- scene->setAction(&scene->_sequenceManager1, scene, 1872, &R2_GLOBALS._player, NULL);
- else
- scene->setAction(&scene->_sequenceManager1, scene, 1853, &R2_GLOBALS._player, NULL);
+ _tealRightArm.postInit();
+
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 1625;
+ setAction(&_sequenceManager, this, 1625, &_teal, &_tealRightArm, NULL);
}
- return true;
+ R2_GLOBALS._sound1.play(245);
+ _background.setDetails(Rect(0, 0, 320, 200), 1625, 12, -1, -1, 1, NULL);
+ R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 1625;
+ R2_GLOBALS._player._characterScene[R2_MIRANDA] = 1625;
}
-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))
- return SceneActor::startAction(action, event);
+void Scene1625::remove() {
+ R2_GLOBALS._sound1.fadeOut2(NULL);
+ SceneExt::remove();
+}
+void Scene1625::signal() {
+ switch (_sceneMode) {
+ case 10:
R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1857;
+ _glass.postInit();
+ _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL);
+ _sceneMode = 1626;
+ setAction(&_sequenceManager, this, 1626, &_tealHead, &_glass, NULL);
+ break;
+ case 12:
+ MessageDialog::show(DONE_MSG, OK_BTN_STRING);
+ break;
+ case 14:
+ _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._exitMode) {
+ case 1:
+ _sceneMode = 1627;
+ setAction(&_sequenceManager, this, 1627, &_mirandaMouth, &_glass, NULL);
+ break;
+ case 2:
+ _sceneMode = 1629;
+ setAction(&_sequenceManager, this, 1629, &_tealHead, &_wristRestraints, NULL);
+ break;
+ 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[R2_QUINN]);
+ break;
+ case 5:
+ _sceneMode = 1628;
+ _tealHead.remove();
+ setAction(&_sequenceManager, this, 1628, &_mirandaMouth, &_glass, NULL);
+ break;
+ case 6:
+ _glass.postInit();
+ _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL);
+ _sceneMode = 1632;
+ setAction(&_sequenceManager, this, 1632, &_glass, NULL);
+ break;
+ case 7:
+ _sceneMode = 1633;
+ setAction(&_sequenceManager, this, 1633, &_glass, NULL);
+ break;
+ case 8:
+ _sceneMode = 1635;
+ setAction(&_sequenceManager, this, 1635, &_mirandaMouth, &_wristRestraints, NULL);
+ break;
+ case 9:
+ _glass.postInit();
+ _glass.setDetails(1625, -1, -1, -1, 2, (SceneItem *) NULL);
+ _sceneMode = 1634;
+ setAction(&_sequenceManager, this, 1634, &_mirandaMouth, &_wristRestraints, NULL);
+ break;
+ case 3:
+ // No break on purpose
+ default:
+ _sceneMode = 1630;
+ _tealHead.remove();
+ setAction(&_sequenceManager, this, 1630, &_teal, &_tealRightArm, NULL);
+ break;
+ }
+ //_field412 = _stripManager._field2E8;
+ _stripManager._currObj44Id = 0;
+ break;
+ case 1625:
+ _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:
+ _tealHead.setup(1627, 1, 1);
+ _tealHead.setPosition(Common::Point(68, 68));
+ _tealHead.show();
- if (R2_GLOBALS.getFlag(32))
- scene->setAction(&scene->_sequenceManager1, scene, 1858, &R2_GLOBALS._player, &scene->_robot, NULL);
- else
- scene->setAction(&scene->_sequenceManager1, scene, 1857, &R2_GLOBALS._player, &scene->_robot, NULL);
+ _mirandaMouth.postInit();
+ _mirandaMouth.setup(1627, 3, 1);
+ _mirandaMouth.setPosition(Common::Point(196, 65));
- R2_GLOBALS.setFlag(30);
- return true;
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(832, this);
break;
- case CURSOR_LOOK:
- if (R2_GLOBALS.getFlag(34))
- SceneItem::display(1850, 2, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- else
- SceneItem::display(1850, 1, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
+ case 1627:
+ _mirandaMouth.setup(1627, 3, 1);
+ _mirandaMouth.setPosition(Common::Point(196, 65));
+ _mirandaMouth.show();
- return true;
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(833, this);
break;
- case R2_AIRBAG:
- if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
- if (R2_GLOBALS.getFlag(70)) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 30;
+ case 1628:
+ R2_GLOBALS.setFlag(83);
+ _tealHead.postInit();
+ _tealHead.setup(1627, 1, 1);
+ _tealHead.setPosition(Common::Point(68, 68));
- R2_GLOBALS._events.setCursor(CURSOR_WALK);
- scene->_stripManager.start(558, scene);
+ _mirandaMouth.setup(1627, 3, 1);
+ _mirandaMouth.setPosition(Common::Point(196, 65));
+ _mirandaMouth.show();
- return true;
- } else {
- return SceneActor::startAction(action, event);
- }
- } else if (R2_GLOBALS.getFlag(30)) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1875;
- scene->_airbag.postInit();
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(834, this);
+ break;
+ case 1629:
+ _tealHead.setup(1627, 1, 1);
+ _tealHead.setPosition(Common::Point(68, 68));
+ _tealHead.show();
- if (R2_GLOBALS.getFlag(32))
- scene->setAction(&scene->_sequenceManager1, scene, 1876,
- &R2_GLOBALS._player, &scene->_airbag, NULL);
- else
- scene->setAction(&scene->_sequenceManager1, scene, 1875,
- &R2_GLOBALS._player, &scene->_airbag, NULL);
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(805, this);
+ break;
+ case 1630:
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = true;
+ break;
+ case 1631:
+ _mirandaMouth.setup(1627, 3, 1);
+ _mirandaMouth.setPosition(Common::Point(196, 65));
+ _mirandaMouth.show();
- return true;
- } else if (R2_GLOBALS.getFlag(70)) {
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 20;
- R2_GLOBALS._events.setCursor(CURSOR_WALK);
- scene->_stripManager.start(557, scene);
- R2_GLOBALS.setFlag(69);
+ _wire.remove();
- return true;
- } else {
- return SceneActor::startAction(action, event);
- }
+ _teal.postInit();
+ _teal.fixPriority(10);
+
+ _tealRightArm.postInit();
+
+ R2_INVENTORY.setObjectScene(R2_SUPERCONDUCTOR_WIRE, 3);
+ _sceneMode = 14;
+
+ setAction(&_sequenceManager, this, 1625, &_teal, &_tealRightArm, NULL);
+ break;
+ case 1632:
+ _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:
+ _glass.remove();
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(818, this);
+ break;
+ case 1634:
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(836, this);
break;
- case R2_REBREATHER_TANK:
- if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) {
- if (R2_GLOBALS.getFlag(30))
- return SceneActor::startAction(action, event);
-
- R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1878;
- scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player,
- &scene->_robot, &scene->_airbag, NULL);
- }
+ case 1635:
+ _mirandaMouth.setup(1627, 3, 1);
+ _mirandaMouth.setPosition(Common::Point(196, 65));
+ _mirandaMouth.show();
- return true;
+ _sceneMode = 99;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(818, this);
break;
default:
- return SceneActor::startAction(action, event);
break;
}
}
-bool Scene1850::Door::startAction(CursorType action, Event &event) {
- if (action != CURSOR_USE)
- return SceneHotspot::startAction(action, event);
-
- if (R2_GLOBALS.getFlag(32)) {
- SceneItem::display(3240, 4, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END);
- return true;
- }
-
- Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene;
-
- R2_GLOBALS._player.disableControl();
- if (scene->_sceneMode == 1851)
- R2_GLOBALS._player._effect = EFFECT_SHADED;
-
- if (_position.x >= 160)
- R2_GLOBALS.setFlag(29);
+void Scene1625::process(Event &event) {
+ if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE))
+ event.handled = true;
else
- R2_GLOBALS.clearFlag(29);
+ Scene::process(event);
+}
- if ((R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) {
- if (_position.x >= 160)
- scene->_seqNumber = 3;
- else
- scene->_seqNumber = 2;
+/*--------------------------------------------------------------------------
+ * Scene 1700 - Rim
+ *
+ *--------------------------------------------------------------------------*/
- scene->_sceneMode = 1860;
+Scene1700::Scene1700() {
+ _walkFlag = 0;
+}
- if (R2_GLOBALS.getFlag(32)) {
- scene->setAction(&scene->_sequenceManager1, scene, 1860, &R2_GLOBALS._player, &scene->_robot, NULL);
- } else {
- 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->_rightDoor, NULL);
- } else {
- scene->setAction(&scene->_sequenceManager1, scene, 1865, &R2_GLOBALS._player, &scene->_leftDoor, NULL);
- }
- }
+void Scene1700::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
- return true;
+ s.syncAsSint16LE(_walkFlag);
}
-bool Scene1850::DisplayScreen::startAction(CursorType action, Event &event) {
- if ((action != CURSOR_USE) || (_position.y != 120))
- return SceneHotspot::startAction(action, event);
+bool Scene1700::RimTransport::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
- Scene1850 *scene = (Scene1850 *)R2_GLOBALS._sceneManager._scene;
+ Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
R2_GLOBALS._player.disableControl();
- scene->_sceneMode = 1881;
+ scene->_sceneMode = 4;
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- scene->setAction(&scene->_sequenceManager1, scene, 1881, &R2_GLOBALS._player, NULL);
- } else {
- scene->setAction(&scene->_sequenceManager1, scene, 1880, &R2_GLOBALS._player, NULL);
- }
+ Common::Point pt(271, 90);
+ PlayerMover *mover = new PlayerMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
return true;
}
-/*------------------------------------------------------------------------*/
-
-Scene1850::Scene1850() {
- _sceneMode = 0;
- _shadeCountdown = 0;
- _shadeDirection = 0;
- _shadeChanging = false;
- _seqNumber = 0;
-}
+bool Scene1700::Companion::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_TALK)
+ return SceneActor::startAction(action, event);
-void Scene1850::synchronize(Serializer &s) {
- SceneExt::synchronize(s);
+ Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
+ scene->_sceneMode = 30;
+ scene->signal();
- s.syncAsSint16LE(_sceneMode);
- s.syncAsSint16LE(_shadeCountdown);
- s.syncAsSint16LE(_shadeDirection);
- s.syncAsSint16LE(_shadeChanging);
- s.syncAsSint16LE(_seqNumber);
- s.syncAsSint16LE(_playerDest.x);
- s.syncAsSint16LE(_playerDest.y);
+ return true;
}
-void Scene1850::postInit(SceneObjectList *OwnerList) {
- loadScene(1850);
-
- if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850)
- R2_GLOBALS.clearFlag(31);
-
- _palette1.loadPalette(0);
-
- if (R2_GLOBALS.getFlag(31)) {
- _sceneMode = 1850;
- g_globals->_scenePalette.loadPalette(1850);
- } else {
- _sceneMode = 1851;
- g_globals->_scenePalette.loadPalette(1851);
- }
+void Scene1700::NorthExit::changeScene() {
+ Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
- SceneExt::postInit();
+ R2_GLOBALS._player.disableControl();
+ _moving = false;
+ scene->_sceneMode = 1;
- if (R2_GLOBALS._sceneManager._previousScene == 3150)
- R2_GLOBALS._sound1.play(116);
+ Common::Point pt(R2_GLOBALS._player._position.x, 0);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+}
- _stripManager.addSpeaker(&_quinnSpeaker);
- _stripManager.addSpeaker(&_seekerSpeaker);
+void Scene1700::SouthExit::changeScene() {
+ Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
- _shadeChanging = false;
- _seqNumber = 0;
- _playerDest = Common::Point(0, 0);
+ R2_GLOBALS._player.disableControl();
+ _moving = false;
+ scene->_sceneMode = 2;
- R2_GLOBALS._player._characterScene[R2_QUINN] = 1850;
- R2_GLOBALS._player._characterScene[R2_SEEKER] = 1850;
+ Common::Point pt(R2_GLOBALS._player._position.x, 170);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+}
- _button.setDetails(Rect(101, 56, 111, 63), 1850, 19, -1, -1, 1, NULL);
+void Scene1700::WestExit::changeScene() {
+ Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene;
- _leftDoor.postInit();
- _leftDoor.setup(1850, 3, 1);
- _leftDoor.setPosition(Common::Point(66, 102));
- _leftDoor.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL);
+ R2_GLOBALS._player.disableControl();
+ _moving = false;
+ scene->_sceneMode = 6;
- _rightDoor.postInit();
- _rightDoor.setup(1850, 2, 1);
- _rightDoor.setPosition(Common::Point(253, 102));
- _rightDoor.setDetails(1850, 22, -1, -1, 1, (SceneItem *) NULL);
+ Common::Point pt(0, R2_GLOBALS._player._position.y);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+}
- R2_GLOBALS._walkRegions.disableRegion(1);
+void Scene1700::enterArea() {
+ Rect tmpRect;
+ R2_GLOBALS._walkRegions.load(1700);
- _robot.postInit();
+ _slabWest.remove();
+ _slabEast.remove();
+ _slabShadowWest.remove();
+ _slabShadowEast.remove();
+ _westPlatform.remove();
+ _rimTransportDoor.remove();
+ _rimTransport.remove();
- if (R2_GLOBALS.getFlag(34)) {
- R2_GLOBALS._walkRegions.disableRegion(2);
- _robot.setup(1851, 4, 3);
- } else if (R2_GLOBALS.getFlag(30)) {
- _robot.setup(1851, 2, 2);
- } else {
- R2_GLOBALS._walkRegions.disableRegion(5);
- if (R2_GLOBALS.getFlag(33)) {
- R2_GLOBALS._walkRegions.disableRegion(2);
- _robot.setup(1851, 1, 3);
- } else {
- _robot.setup(1851, 2, 1);
- }
+ if (_sceneMode != 40) {
+ _ledgeHopper.remove();
+ _hatch.remove();
}
- _robot.setPosition(Common::Point(219, 130));
- _robot.fixPriority(114);
- _robot.setDetails(1850, -1, -1, -1, 1, (SceneItem *) NULL);
-
- R2_GLOBALS._player.postInit();
+ // The original had manual code here to redraw the background manually when
+ // changing areas within the scene. Which seems to be totally redundant.
- _companion.postInit();
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _companion.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL);
- } else {
- _companion.setDetails(9001, 0, 5, 3, 1, (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.disableRegion(2);
+ R2_GLOBALS._walkRegions.disableRegion(12);
}
- if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) {
- R2_GLOBALS._player._effect = EFFECT_SHADED2;
- _companion._effect = EFFECT_SHADED2;
- if (R2_GLOBALS.getFlag(31)) {
- R2_GLOBALS._player._shade = 0;
- _companion._shade = 0;
- } else {
- R2_GLOBALS._player._shade = 6;
- _companion._shade = 6;
- }
-
- if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) {
- _airbag.postInit();
- if (R2_GLOBALS.getFlag(34)) {
- _airbag.setup(1851, 4, 2);
- _airbag.fixPriority(114);
- } else {
- _airbag.setup(1851, 4, 1);
- }
-
- _airbag.setPosition(Common::Point(179, 113));
-
- if ((_robot._strip == 1) && (_robot._frame == 3)){
- _airbag.hide();
- }
-
- _airbag.setDetails(1850, 6, -1, -1, 1, (SceneItem *) NULL);
- }
-
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- if (R2_GLOBALS.getFlag(32)) {
- R2_GLOBALS._player.setVisage(1511);
- _companion.setVisage(1508);
+ 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);
- _screen.postInit();
- _screen.setup(1853, 3, 1);
- _screen.setPosition(Common::Point(122, 113));
- _screen.fixPriority(114);
- _screen._effect = EFFECT_SHADED2;
- _screen.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL);
+ _slabShadowWest.postInit();
+ _slabShadowWest.setup(1700, 2, 1);
+ _slabShadowWest.setPosition(Common::Point(177, 82));
+ _slabShadowWest.fixPriority(0);
- _helmet.postInit();
- _helmet.setup(1853, 3, 2);
- _helmet.setPosition(Common::Point(139, 111));
- _helmet.fixPriority(114);
- _helmet._effect = EFFECT_SHADED2;
- _helmet.setDetails(1850, 29, -1, -1, 2, (SceneItem *) NULL);
+ _slabShadowEast.postInit();
+ _slabShadowEast.setup(1700, 2, 2);
+ _slabShadowEast.setPosition(Common::Point(332, 96));
+ _slabShadowEast.fixPriority(0);
- if (R2_GLOBALS.getFlag(31)) {
- _screen._shade = 0;
- _helmet._shade = 0;
- } else {
- _screen._shade = 6;
- _helmet._shade = 6;
- }
- } else {
- R2_GLOBALS._player.setVisage(1500);
- _companion.setVisage(1505);
- }
- } else if (R2_GLOBALS.getFlag(32)) {
- // Not Quinn, flag 32
- R2_GLOBALS._player.setVisage(1508);
- _companion.setVisage(1511);
+ _slabEast.postInit();
+ _slabEast.setup(1700, 1, 2);
+ _slabEast.setPosition(Common::Point(424, 84));
- _screen.postInit();
- _screen.setup(1853, 3, 1);
- _screen.setPosition(Common::Point(122, 113));
- _screen.fixPriority(114);
- _screen._effect = EFFECT_SHADED2;
- _screen.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL);
+ R2_GLOBALS._walkRegions.disableRegion(11);
+ }
- _helmet.postInit();
- _helmet.setup(1853, 3, 2);
- _helmet.setPosition(Common::Point(139, 111));
- _helmet.fixPriority(114);
- _helmet._effect = EFFECT_SHADED2;
- _helmet.setDetails(1850, 28, -1, -1, 1, (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);
- if (R2_GLOBALS.getFlag(31)) {
- _screen._shade = 0;
- _helmet._shade = 0;
- } else {
- _screen._shade = 6;
- _helmet._shade = 6;
- }
- } else {
- // Not Quinn, nor flag 32
- R2_GLOBALS._player.setVisage(1505);
- _companion.setVisage(1500);
- }
+ _westExit._enabled = true;
+ } else {
+ R2_GLOBALS._walkRegions.disableRegion(1);
+ _westExit._enabled = false;
+ }
- R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
- R2_GLOBALS._player.setStrip(3);
- R2_GLOBALS._player.setPosition(Common::Point(80, 114));
+ if ( ((!R2_GLOBALS.getFlag(15)) && ((R2_GLOBALS._rimLocation == 25) || (R2_GLOBALS._rimLocation == -3)))
+ || ((R2_GLOBALS.getFlag(15)) && (R2_GLOBALS._rimLocation == R2_GLOBALS._rimTransportLocation))
+ ) {
+ // Rim transport vechile located
+ R2_GLOBALS._rimTransportLocation = R2_GLOBALS._rimLocation;
+ if (!R2_GLOBALS.getFlag(15))
+ _walkFlag = true;
- _companion.animate(ANIM_MODE_1, NULL);
- _companion.setObjectWrapper(new SceneObjectWrapper());
- _companion.setStrip(3);
- _companion.setPosition(Common::Point(180, 96));
+ _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);
- if (R2_GLOBALS.getFlag(30)) {
- if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- _companion.animate(ANIM_MODE_NONE, NULL);
- _companion.setObjectWrapper(NULL);
- if (R2_GLOBALS.getFlag(32)) {
- _companion.setup(1854, 1, 3);
- } else {
- _companion.setup(1854, 2, 3);
- }
+ _rimTransportDoor.postInit();
+ _rimTransportDoor.setup(1700, 4, 1);
+ _rimTransportDoor.setPosition(Common::Point(312, 106));
+ _rimTransportDoor.fixPriority(130);
+ }
+}
- _companion.setPosition(Common::Point(164, 106));
- } else {
- _companion.animate(ANIM_MODE_NONE, NULL);
- _companion.setObjectWrapper(NULL);
- if (R2_GLOBALS.getFlag(32)) {
- R2_GLOBALS._player.setup(1854, 1, 3);
- } else {
- R2_GLOBALS._player.setup(1854, 2, 3);
- }
+void Scene1700::postInit(SceneObjectList *OwnerList) {
+ loadScene(1700);
+ SceneExt::postInit();
+ if (R2_GLOBALS._sceneManager._previousScene == -1)
+ R2_GLOBALS._sceneManager._previousScene = 1530;
- R2_GLOBALS._player.setPosition(Common::Point(164, 106));
- }
- }
+ scalePalette(65, 65, 65);
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_seekerSpeaker);
- R2_GLOBALS._player.enableControl();
- } else { // R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850
- R2_GLOBALS._player._effect = EFFECT_SHADED;
- _companion._effect = EFFECT_SHADED;
- 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, &_companion, &_rightDoor, NULL);
- } else {
- setAction(&_sequenceManager1, this, 1861, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL);
- }
- } else {
- if (R2_GLOBALS.getFlag(29)) {
- setAction(&_sequenceManager1, this, 1864, &R2_GLOBALS._player, &_companion, &_rightDoor, NULL);
- } else {
- setAction(&_sequenceManager1, this, 1862, &R2_GLOBALS._player, &_companion, &_leftDoor, NULL);
- }
- }
- }
+ _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));
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
- R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
- _companion._moveDiff = Common::Point(5, 3);
+ R2_GLOBALS._player.setVisage(1501);
+ R2_GLOBALS._player._moveDiff = Common::Point(2, 1);
} else {
- R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
- _companion._moveDiff = Common::Point(3, 2);
+ R2_GLOBALS._player.setVisage(1506);
+ R2_GLOBALS._player._moveDiff = Common::Point(3, 1);
}
- _displayScreen.postInit();
- _displayScreen.setup(1850, 1, 1);
+ _companion.postInit();
+ _companion.animate(ANIM_MODE_1, NULL);
+ _companion.setObjectWrapper(new SceneObjectWrapper());
- if (R2_GLOBALS.getFlag(62)) {
- _displayScreen.setPosition(Common::Point(159, 120));
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ _companion.setVisage(1506);
+ _companion._moveDiff = Common::Point(3, 1);
+ _companion.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL);
} else {
- _displayScreen.setPosition(Common::Point(159, 184));
+ _companion.setVisage(1501);
+ _companion._moveDiff = Common::Point(2, 1);
+ _companion.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL);
}
- _displayScreen.fixPriority(113);
+ R2_GLOBALS._sound1.play(134);
- if (R2_GLOBALS.getFlag(34)) {
- _displayScreen.setDetails(1850, 25, -1, -1, 4, &_robot);
- } else {
- _displayScreen.setDetails(1850, 25, -1, -1, 2, (SceneItem *) NULL);
- }
+ _playerShadow.postInit();
+ _playerShadow.fixPriority(10);
- if (!R2_GLOBALS.getFlag(62)) {
- _displayScreen.hide();
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ _playerShadow.setVisage(1112);
+ else
+ _playerShadow.setVisage(1111);
+
+ _playerShadow._effect = EFFECT_SHADOW_MAP;
+ _playerShadow._shadowMap = _shadowPaletteMap;
+ R2_GLOBALS._player._linkedActor = &_playerShadow;
+
+ _companionShadow.postInit();
+ _companionShadow.fixPriority(10);
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ _companionShadow.setVisage(1111);
+ else
+ _companionShadow.setVisage(1112);
+
+ _companionShadow._effect = EFFECT_SHADOW_MAP;
+ _companionShadow._shadowMap = _shadowPaletteMap;
+ _companion._linkedActor = &_companionShadow;
+
+ R2_GLOBALS._sound1.play(134);
+
+ switch (R2_GLOBALS._sceneManager._previousScene) {
+ case 1530:
+ R2_GLOBALS._player._characterIndex = R2_QUINN;
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._player.hide();
+ _companion.hide();
+
+ _hatch.postInit();
+ _hatch.hide();
+
+ _ledgeHopper.postInit();
+ _ledgeHopper.setup(1701, 1, 1);
+ _ledgeHopper.setPosition(Common::Point(220, 137));
+ _ledgeHopper.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL);
+
+ _playerShadow.hide();
+ _companionShadow.hide();
+ R2_GLOBALS._events.setCursor(CURSOR_WALK);
+ _stripManager.start(539, this);
+ _sceneMode = 40;
+ break;
+ case 1750: {
+ R2_GLOBALS._player.setPosition(Common::Point(282, 121));
+ _companion.setPosition(Common::Point(282, 139));
+ _sceneMode = 8;
+ Common::Point pt(262, 101);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ Common::Point pt2(262, 119);
+ NpcMover *mover2 = new NpcMover();
+ _companion.addMover(mover2, &pt2, this);
+ }
+ break;
+ case 1800: {
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._player.setPosition(Common::Point(0, 86));
+ _companion.setPosition(Common::Point(0, 64));
+ _sceneMode = 7;
+ R2_GLOBALS._player.setObjectWrapper(NULL);
+ R2_GLOBALS._player._strip = 1;
+ Common::Point pt(64, 86);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ _companion.setObjectWrapper(NULL);
+ _companion._strip = 1;
+ Common::Point pt2(77, 64);
+ NpcMover *mover2 = new NpcMover();
+ _companion.addMover(mover2, &pt2, NULL);
+ }
+ break;
+ default:
More information about the Scummvm-git-logs
mailing list