aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorStrangerke2012-01-25 22:08:40 +0100
committerStrangerke2012-01-25 22:08:40 +0100
commitdb26984ed4ee7672c23ed9d45381958a64e07e78 (patch)
treeb5130b1f57e2a2b7661079ee4713139ab73ab738 /engines/tsage
parent8016d7d7a277151eb2ac4417319155fa9f052b3a (diff)
downloadscummvm-rg350-db26984ed4ee7672c23ed9d45381958a64e07e78.tar.gz
scummvm-rg350-db26984ed4ee7672c23ed9d45381958a64e07e78.tar.bz2
scummvm-rg350-db26984ed4ee7672c23ed9d45381958a64e07e78.zip
TSAGE: R2R- Implement scene 1950
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/globals.cpp29
-rw-r--r--engines/tsage/globals.h3
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp2
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.cpp1800
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.h142
5 files changed, 1974 insertions, 2 deletions
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 1c2b83c81b..579239d565 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -383,7 +383,6 @@ void Ringworld2Globals::reset() {
_v565F6 = 0;
_v565FA = 0;
_v565AE = 0;
-
_v56605[0] = 0;
_v56605[1] = 3;
_v56605[2] = 5;
@@ -399,8 +398,34 @@ void Ringworld2Globals::reset() {
_v56605[12] = 27;
_v56605[13] = 31;
+ for (int i = 0; i < 18; i++) {
+ _v56613[(i * 4) ] = 1;
+ _v56613[(i * 4) + 2] = 0;
+ _v56613[(i * 4) + 3] = 0;
+ }
+ _v56613[( 0 * 4) + 1] = 1;
+ _v56613[( 1 * 4) + 1] = 2;
+ _v56613[( 2 * 4) + 1] = 2;
+ _v56613[( 3 * 4) + 1] = 3;
+ _v56613[( 4 * 4) + 1] = 2;
+ _v56613[( 5 * 4) + 1] = 2;
+ _v56613[( 6 * 4) + 1] = 3;
+ _v56613[( 7 * 4) + 1] = 1;
+ _v56613[( 8 * 4) + 1] = 1;
+ _v56613[( 9 * 4) + 1] = 3;
+ _v56613[(10 * 4) + 1] = 3;
+ _v56613[(11 * 4) + 1] = 1;
+ _v56613[(12 * 4) + 1] = 2;
+ _v56613[(13 * 4) + 1] = 3;
+ _v56613[(14 * 4) + 1] = 2;
+ _v56613[(15 * 4) + 1] = 3;
+ _v56613[(16 * 4) + 1] = 1;
+ _v56613[(17 * 4) + 1] = 1;
+
_v566A6 = 3800;
_v566A3 = 2;
+ _v566A4 = 1;
+ _v566A5 = 0;
_v566A8 = 5;
_v566A9 = 0;
_v566AA = 0;
@@ -478,6 +503,8 @@ void Ringworld2Globals::synchronize(Serializer &s) {
s.syncAsByte(_v565F1[i]);
s.syncAsByte(_v565AE);
+ s.syncAsByte(_v566A4);
+ s.syncAsByte(_v566A5);
s.syncAsByte(_v566A8);
s.syncAsByte(_v566A9);
s.syncAsByte(_v566AA);
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index c4ab3e695c..eeeddb4540 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -262,6 +262,9 @@ public:
int _v5657C;
byte _v565AE;
byte _v56605[14];
+ int _v56613[76];
+ byte _v566A4;
+ byte _v566A5;
int _v566A6;
byte _v566A3;
byte _v566A8;
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 983b2b3c7d..54d9bc362f 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -146,7 +146,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
case 1945:
return new Scene1945();
case 1950:
- error("Missing scene %d from group 1", sceneNumber);
+ return new Scene1950();
/* Scene group #2 */
//
case 2000:
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index bc4a31c3f0..d3b7d616f1 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -1104,6 +1104,9 @@ Scene1200::Object1::Object1() {
void Scene1200::Object1::synchronize(Serializer &s) {
SavedObject::synchronize(s);
+ _rect1.synchronize(s);
+ _rect2.synchronize(s);
+
s.syncAsSint16LE(_field16);
s.syncAsSint16LE(_field26);
s.syncAsSint16LE(_field28);
@@ -7320,5 +7323,1802 @@ void Scene1945::signal() {
R2_GLOBALS._player._canWalk = false;
}
+/*--------------------------------------------------------------------------
+ * Scene 1950 -
+ *
+ *--------------------------------------------------------------------------*/
+Scene1950::Area1::Area1() {
+ _field20 = 0;
+ _fieldB65 = 0;
+}
+void Scene1950::Area1::synchronize(Serializer &s) {
+ SceneArea::synchronize(s);
+
+ s.syncAsByte(_field20);
+ s.syncAsSint16LE(_fieldB65);
+}
+
+Scene1950::Scene1950() {
+ _field412 = 0;
+ _field414 = 0;
+ _field416 = 0;
+ _field418 = Common::Point(0, 0);
+ _field41C = 0;
+}
+
+void Scene1950::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+
+ s.syncAsSint16LE(_field412);
+ s.syncAsSint16LE(_field414);
+ s.syncAsSint16LE(_field416);
+ s.syncAsSint16LE(_field418.x);
+ s.syncAsSint16LE(_field418.y);
+ s.syncAsSint16LE(_field41C);
+}
+
+Scene1950::Area1::Actor10::Actor10() {
+ _fieldA4 = 0;
+ _fieldA6 = 0;
+ _fieldA8 = 0;
+}
+
+void Scene1950::Area1::Actor10::synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
+
+ s.syncAsSint16LE(_fieldA4);
+ s.syncAsSint16LE(_fieldA6);
+ s.syncAsSint16LE(_fieldA8);
+}
+
+void Scene1950::Area1::Actor10::init(int indx) {
+// Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _fieldA4 = indx;
+ _fieldA6 = 0;
+ _fieldA8 = 0;
+
+ postInit();
+ setup(1971, 2, 1);
+ fixPriority(249);
+ setPosition(Common::Point(((_fieldA4 / 4) * 22) + 127, ((_fieldA4 / 4) * 19) + 71));
+ warning("FIXME: invalid call to scene->_sceneAreas.push_front(this);");
+}
+
+void Scene1950::Area1::Actor10::process(Event &event) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos)) && (_fieldA6 == 0)) {
+ R2_GLOBALS._sound2.play(227);
+ if (_fieldA8 == 0) {
+ setFrame(2);
+ _fieldA8 = 1;
+ } else {
+ setFrame(1);
+ _fieldA8 = 0;
+ }
+ _fieldA6 = 1;
+ event.handled = true;
+ }
+
+ if ((event.eventType == EVENT_BUTTON_UP) && (_fieldA6 != 0)) {
+ _fieldA6 = 0;
+ event.handled = true;
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+ scene->subBF4B4(_fieldA4);
+ }
+}
+
+bool Scene1950::Area1::Actor10::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE)
+ return false;
+ return SceneActor::startAction(action, event);
+}
+
+void Scene1950::Area1::remove() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+ for (_fieldB65 = 0; _fieldB65 < 16; ++_fieldB65) {
+ warning("Unexpected _sceneAreas.remove() call");
+ // R2_GLOBALS._sceneAreas.remove(&_arrActor1[_fieldB65]);
+ _arrActor1[_fieldB65].remove();
+ }
+
+ // sub201EA
+ R2_GLOBALS._sceneItems.remove((SceneItem *)this);
+ _areaActor.remove();
+ SceneArea::remove();
+ R2_GLOBALS._insetUp--;
+ //
+
+ if (!R2_GLOBALS.getFlag(37))
+ R2_GLOBALS._sound2.play(278);
+
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ scene->_exit3._enabled = true;
+
+ if (!R2_GLOBALS.getFlag(37)) {
+ if (R2_GLOBALS.getFlag(36)) {
+ scene->_sceneMode = 1964;
+ scene->setAction(&scene->_sequenceManager, scene, 1964, &R2_GLOBALS._player, NULL);
+ } else {
+ scene->_sceneMode = 1965;
+ scene->setAction(&scene->_sequenceManager, scene, 1965, &R2_GLOBALS._player, NULL);
+ }
+ }
+}
+
+void Scene1950::Area1::process(Event &event) {
+// This is a copy of Scene1200::Area1::process
+ if (_field20 != R2_GLOBALS._insetUp)
+ return;
+
+ CursorType cursor = R2_GLOBALS._events.getCursor();
+
+ if (_areaActor._bounds.contains(event.mousePos.x + g_globals->gfxManager()._bounds.left , event.mousePos.y)) {
+ if (cursor == _cursorNum)
+ warning("TODO: _cursorState = ???");
+ R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState);
+ } else if (event.mousePos.y < 168) {
+ if (cursor != _cursorNum) {
+ _savedCursorNum = cursor;
+ warning("TODO: _cursorState = ???");
+ R2_GLOBALS._events.setCursor(CURSOR_INVALID);
+ }
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ event.handled = true;
+ warning("TODO: _cursorState = ???");
+ R2_GLOBALS._events.setCursor(_savedCursorNum); //, _cursorState);
+ remove();
+ }
+ }
+}
+
+void Scene1950::Area1::proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY) {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ if (R2_GLOBALS._player._mover)
+ R2_GLOBALS._player.addMover(NULL);
+ R2_GLOBALS._player._canWalk = false;
+
+ // UnkArea1200::proc12();
+ _areaActor.postInit();
+ _areaActor.setup(visage, stripFrameNum, frameNum);
+ _areaActor.setPosition(Common::Point(posX, posY));
+ _areaActor.fixPriority(250);
+ _cursorNum = CURSOR_INVALID;
+ scene->_sceneAreas.push_front(this);
+ ++R2_GLOBALS._insetUp;
+ _field20 = R2_GLOBALS._insetUp;
+ //
+
+ _areaActor.fixPriority(248);
+ scene->_exit3._enabled = false;
+ proc13(1950, 27, 28, 27);
+
+ for (_fieldB65 = 0; _fieldB65 < 16; _fieldB65++)
+ _arrActor1[_fieldB65].init(_fieldB65);
+}
+
+void Scene1950::Area1::proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum) {
+ // Copy of Scene1200::Area1::proc13()
+ _areaActor.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL);
+}
+
+bool Scene1950::Hotspot2::startAction(CursorType action, Event &event) {
+ if ((action != CURSOR_USE) || (R2_GLOBALS.getFlag(37)))
+ return SceneHotspot::startAction(action, event);
+
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS.getFlag(36)) {
+ scene->_sceneMode = 1962;
+ scene->setAction(&scene->_sequenceManager, scene, 1962, &R2_GLOBALS._player, NULL);
+ } else {
+ scene->_sceneMode = 1963;
+ scene->setAction(&scene->_sequenceManager, scene, 1963, &R2_GLOBALS._player, NULL);
+ }
+ return true;
+}
+
+bool Scene1950::Actor2::startAction(CursorType action, Event &event) {
+ if (action != R2_31)
+ return SceneActor::startAction(action, event);
+
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ R2_GLOBALS._player.disableControl();
+ R2_INVENTORY.setObjectScene(31, 0);
+ scene->_sceneMode = 1958;
+ scene->setAction(&scene->_sequenceManager, scene, 1958, &R2_GLOBALS._player, &scene->_actor2, NULL);
+ return true;
+}
+
+bool Scene1950::Actor3::startAction(CursorType action, Event &event) {
+ if ((action != CURSOR_USE) || (R2_INVENTORY.getObjectScene(35) != 1950))
+ return SceneActor::startAction(action, event);
+
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1968;
+ scene->setAction(&scene->_sequenceManager, scene, 1968, &R2_GLOBALS._player, NULL);
+
+ return true;
+}
+
+bool Scene1950::Actor5::startAction(CursorType action, Event &event) {
+ if ((action != CURSOR_USE) || (!R2_GLOBALS.getFlag(37)))
+ return SceneActor::startAction(action, event);
+
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1967;
+ scene->setAction(&scene->_sequenceManager, scene, 1967, &R2_GLOBALS._player, NULL);
+
+ return true;
+}
+
+Scene1950::Actor8::Actor8() {
+ _fieldA4 = 0;
+ _fieldA6 = 0;
+ _fieldA8 = 0;
+ _fieldAA = 0;
+ _fieldAC = 0;
+ _fieldAE = 0;
+ _fieldAF = 0;
+}
+
+void Scene1950::Actor8::synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
+
+ s.syncAsSint16LE(_fieldA4);
+ s.syncAsSint16LE(_fieldA6);
+ s.syncAsSint16LE(_fieldA8);
+ s.syncAsSint16LE(_fieldAA);
+ s.syncAsSint16LE(_fieldAC);
+ s.syncAsByte(_fieldAE);
+ s.syncAsByte(_fieldAF);
+}
+
+void Scene1950::Actor8::signal() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (_fieldAC) {
+ case 19: {
+ _fieldAC = 0;
+ setVisage(1960);
+ if (R2_GLOBALS._v566A5 == 3)
+ setStrip(2);
+ else
+ setStrip(1);
+
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &scene->_field418, this);
+ }
+ break;
+ case 20: {
+ _fieldAC = 19;
+ R2_GLOBALS._player.setVisage(22);
+ if (R2_GLOBALS._v566A5 == 3)
+ R2_GLOBALS._player.setStrip(1);
+ else
+ R2_GLOBALS._player.setStrip(2);
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1]--;
+
+ if (R2_GLOBALS._v566A5 == 3)
+ _fieldA4 = _position.x + 10;
+ else
+ _fieldA4 = _position.x - 10;
+
+ _fieldA6 = _position.y -4;
+ setVisage(1961);
+
+ if (R2_GLOBALS._v566A5 == 3)
+ setStrip(2);
+ else
+ setStrip(1);
+
+ animate(ANIM_MODE_2, NULL);
+ Common::Point pt(_fieldA4, _fieldA6);
+ PlayerMover *mover = new PlayerMover();
+ addMover(mover, &pt, this);
+
+ R2_GLOBALS._player.enableControl();
+ }
+ break;
+ case 21:
+ R2_GLOBALS._player.setVisage(22);
+ if (R2_GLOBALS._v566A5 == 3)
+ R2_GLOBALS._player.setStrip(1);
+ else
+ R2_GLOBALS._player.setStrip(2);
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+
+ setVisage(1961);
+ if (R2_GLOBALS._v566A5 == 3)
+ setStrip(4);
+ else
+ setStrip(3);
+ setDetails(1950, 15, -1, 17, 2, (SceneItem *) NULL);
+ addMover(NULL);
+ _numFrames = 8;
+ R2_GLOBALS._sound2.play(226);
+ animate(ANIM_MODE_5, NULL);
+ fixPriority(10);
+ R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) ]--;
+ R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1]--;
+ R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 2] = _position.x;
+ R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 3] = _position.y;
+ _fieldA8 = (_position.x - R2_GLOBALS._player._position.x) / 2;
+ _fieldAA = (_position.y - R2_GLOBALS._player._position.y) / 2;
+
+ _fieldAE = 0;
+ for (_fieldAF = 0; _fieldAF < 18; ++_fieldAF)
+ if (R2_GLOBALS._v56613[4 * _fieldAF] == 0)
+ ++_fieldAE;
+
+ if (_fieldAE == 18) {
+ R2_GLOBALS.setFlag(36);
+ _fieldAC = 23;
+ Common::Point pt(R2_GLOBALS._player._position.x + _fieldA8, R2_GLOBALS._player._position.y + _fieldAA);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else if (_fieldAE == 1) {
+ _fieldAC = 22;
+ Common::Point pt(R2_GLOBALS._player._position.x + _fieldA8, R2_GLOBALS._player._position.y + _fieldAA);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else {
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ }
+
+ if (R2_GLOBALS._v566A5 == 3)
+ scene->_exit3._enabled = true;
+ else
+ scene->_exit6._enabled = true;
+
+ scene->_field416 = 0;
+ break;
+ case 22:
+ SceneItem::display(1950, 18, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ break;
+ case 23:
+ SceneItem::display(1950, 25, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ scene->_sceneMode = R2_GLOBALS._v566A5;
+ scene->setAction(&scene->_sequenceManager, scene, 1960, &R2_GLOBALS._player, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+bool Scene1950::Actor8::startAction(CursorType action, Event &event) {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ if ((R2_GLOBALS._v56613[(scene->_field41C - 1) * 4] == 0) || (action != R2_44))
+ return SceneActor::startAction(action, event);
+
+ R2_GLOBALS._player.disableControl();
+
+ if (R2_GLOBALS._v56613[((scene->_field41C - 1) * 4) + 1] <= 1)
+ _fieldAC = 21;
+ else
+ _fieldAC = 20;
+
+ R2_GLOBALS._player.setVisage(25);
+ if (R2_GLOBALS._v566A5 == 3)
+ R2_GLOBALS._player.setStrip(2);
+ else
+ R2_GLOBALS._player.setStrip(1);
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ R2_GLOBALS._sound3.play(99);
+
+ return true;
+}
+
+void Scene1950::Exit1::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 1;
+ scene->_sceneMode = 11;
+
+ Common::Point pt(160, 127);
+ PlayerMover *mover = new PlayerMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+}
+
+void Scene1950::Exit2::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 2;
+ scene->_sceneMode = 12;
+
+ if (scene->_field412 == 0) {
+ if (R2_GLOBALS.getFlag(36))
+ scene->setAction(&scene->_sequenceManager, scene, 1953, &R2_GLOBALS._player, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager, scene, 1970, &R2_GLOBALS._player, NULL);
+ } else {
+ if (R2_GLOBALS.getFlag(36))
+ scene->setAction(&scene->_sequenceManager, scene, 1952, &R2_GLOBALS._player, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager, scene, 1969, &R2_GLOBALS._player, NULL);
+ }
+}
+
+void Scene1950::Exit3::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 3;
+ scene->_sceneMode = 13;
+
+ if (scene->_field416 != 0)
+ R2_GLOBALS._player.animate(ANIM_MODE_9);
+
+ Common::Point pt(340, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+}
+
+void Scene1950::Exit4::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 4;
+ scene->_sceneMode = 14;
+
+ if (R2_GLOBALS.getFlag(36))
+ scene->setAction(&scene->_sequenceManager, scene, 1956, &R2_GLOBALS._player, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager, scene, 1973, &R2_GLOBALS._player, NULL);
+}
+
+void Scene1950::Exit5::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 5;
+ scene->_sceneMode = 15;
+
+ Common::Point pt(160, 213);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+}
+
+void Scene1950::Exit6::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 5;
+ if (R2_GLOBALS._v566A4 == 2) {
+ if ((R2_GLOBALS.getFlag(36)) && (R2_INVENTORY.getObjectScene(34) == 2) && (R2_INVENTORY.getObjectScene(35) == 2)) {
+ scene->_sceneMode = 1961;
+ Common::Point pt(-20, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+ } else {
+ if (!R2_GLOBALS.getFlag(36))
+ SceneItem::display(1950, 33, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ if ((R2_INVENTORY.getObjectScene(34) == 1950) || (R2_INVENTORY.getObjectScene(35) == 1950))
+ SceneItem::display(1950, 34, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ scene->_sceneMode = 0;
+ Common::Point pt(30, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+ }
+ } else {
+ if (scene->_field416 != 0)
+ R2_GLOBALS._player.animate(ANIM_MODE_9);
+
+ scene->_sceneMode = 16;
+ Common::Point pt(-20, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+ }
+}
+
+void Scene1950::Exit7::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 0;
+ scene->_sceneMode = 1951;
+ scene->setAction(&scene->_sequenceManager, scene, 1951, &R2_GLOBALS._player, NULL);
+}
+
+void Scene1950::Exit8::changeScene() {
+ Scene1950 *scene = (Scene1950 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._v566A5 = 3;
+ if (R2_GLOBALS._player._visage == 22) {
+ scene->_sceneMode = 1975;
+ scene->setAction(&scene->_sequenceManager, scene, 1975, &R2_GLOBALS._player, NULL);
+ } else {
+ SceneItem::display(1950, 22, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ R2_GLOBALS._v566A5 = 0;
+ scene->_sceneMode = 0;
+ Common::Point pt(250, 150);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, scene);
+ _enabled = true;
+ }
+}
+
+void Scene1950::subBDC1E() {
+ _exit1._enabled = false;
+ _exit2._enabled = false;
+ _exit3._enabled = false;
+ _exit4._enabled = false;
+ _exit5._enabled = false;
+ _exit6._enabled = false;
+ _exit7._enabled = false;
+ _exit8._enabled = false;
+ _exit1._insideArea = false;
+ _exit2._insideArea = false;
+ _exit3._insideArea = false;
+ _exit4._insideArea = false;
+ _exit5._insideArea = false;
+ _exit6._insideArea = false;
+ _exit7._insideArea = false;
+ _exit8._insideArea = false;
+ _exit1._moving = false;
+ _exit2._moving = false;
+ _exit3._moving = false;
+ _exit4._moving = false;
+ _exit5._moving = false;
+ _exit6._moving = false;
+ _exit7._moving = false;
+ _exit8._moving = false;
+ _field412 = 0;
+ switch (R2_GLOBALS._v566A4 - 1) {
+ case 0:
+ loadScene(1948);
+ break;
+ case 1:
+ // No break on purpose
+ case 8:
+ // No break on purpose
+ case 10:
+ // No break on purpose
+ case 12:
+ // No break on purpose
+ case 16:
+ // No break on purpose
+ case 19:
+ // No break on purpose
+ case 23:
+ // No break on purpose
+ case 30:
+ // No break on purpose
+ case 44:
+ // No break on purpose
+ case 72:
+ // No break on purpose
+ case 74:
+ // No break on purpose
+ case 86:
+ // No break on purpose
+ case 96:
+ // No break on purpose
+ case 103:
+ loadScene(1950);
+ break;
+ case 2:
+ // No break on purpose
+ case 29:
+ loadScene(1965);
+ break;
+ case 3:
+ // No break on purpose
+ case 9:
+ // No break on purpose
+ case 11:
+ // No break on purpose
+ case 15:
+ // No break on purpose
+ case 24:
+ // No break on purpose
+ case 39:
+ // No break on purpose
+ case 45:
+ // No break on purpose
+ case 71:
+ // No break on purpose
+ case 73:
+ // No break on purpose
+ case 75:
+ // No break on purpose
+ case 79:
+ // No break on purpose
+ case 85:
+ // No break on purpose
+ case 87:
+ // No break on purpose
+ case 95:
+ loadScene(1955);
+ break;
+ case 4:
+ // No break on purpose
+ case 6:
+ // No break on purpose
+ case 13:
+ // No break on purpose
+ case 27:
+ // No break on purpose
+ case 41:
+ // No break on purpose
+ case 48:
+ // No break on purpose
+ case 50:
+ // No break on purpose
+ case 54:
+ // No break on purpose
+ case 76:
+ // No break on purpose
+ case 80:
+ // No break on purpose
+ case 90:
+ // No break on purpose
+ case 104:
+ loadScene(1975);
+ break;
+ case 5:
+ // No break on purpose
+ case 7:
+ // No break on purpose
+ case 14:
+ // No break on purpose
+ case 28:
+ // No break on purpose
+ case 32:
+ // No break on purpose
+ case 47:
+ // No break on purpose
+ case 53:
+ loadScene(1997);
+ break;
+ case 17:
+ // No break on purpose
+ case 20:
+ // No break on purpose
+ case 25:
+ // No break on purpose
+ case 31:
+ // No break on purpose
+ case 33:
+ // No break on purpose
+ case 46:
+ loadScene(1995);
+ break;
+ case 18:
+ // No break on purpose
+ case 22:
+ // No break on purpose
+ case 26:
+ // No break on purpose
+ case 36:
+ // No break on purpose
+ case 38:
+ // No break on purpose
+ case 43:
+ // No break on purpose
+ case 51:
+ // No break on purpose
+ case 70:
+ // No break on purpose
+ case 78:
+ // No break on purpose
+ case 84:
+ // No break on purpose
+ case 89:
+ // No break on purpose
+ case 101:
+ loadScene(1970);
+ break;
+ case 21:
+ // No break on purpose
+ case 34:
+ // No break on purpose
+ case 57:
+ // No break on purpose
+ case 58:
+ // No break on purpose
+ case 59:
+ // No break on purpose
+ case 62:
+ // No break on purpose
+ case 65:
+ loadScene(1980);
+ break;
+ case 35:
+ // No break on purpose
+ case 61:
+ // No break on purpose
+ case 77:
+ // No break on purpose
+ case 83:
+ loadScene(1982);
+ break;
+ case 37:
+ // No break on purpose
+ case 52:
+ // No break on purpose
+ case 82:
+ // No break on purpose
+ case 88:
+ // No break on purpose
+ case 92:
+ // No break on purpose
+ case 97:
+ // No break on purpose
+ case 100:
+ loadScene(1962);
+ break;
+ case 40:
+ // No break on purpose
+ case 102:
+ loadScene(1960);
+ break;
+ case 42:
+ // No break on purpose
+ case 55:
+ // No break on purpose
+ case 60:
+ // No break on purpose
+ case 66:
+ // No break on purpose
+ case 68:
+ // No break on purpose
+ case 69:
+ // No break on purpose
+ case 93:
+ // No break on purpose
+ case 98:
+ loadScene(1990);
+ break;
+ case 49:
+ // No break on purpose
+ case 81:
+ // No break on purpose
+ case 91:
+ // No break on purpose
+ case 94:
+ // No break on purpose
+ case 99:
+ loadScene(1967);
+ break;
+ case 56:
+ // No break on purpose
+ case 63:
+ // No break on purpose
+ case 64:
+ // No break on purpose
+ case 67:
+ loadScene(1985);
+ _field412 = 1;
+ break;
+ default:
+ break;
+ }
+
+ if (R2_GLOBALS._v566A4 != 1)
+ R2_GLOBALS._walkRegions.load(1950);
+
+ switch (R2_GLOBALS._v566A4 - 1) {
+ case 0:
+ _exit7._enabled = true;
+ if ((R2_INVENTORY.getObjectScene(31) == 0) && (R2_INVENTORY.getObjectScene(34) == 1950))
+ _exit8._enabled = true;
+ R2_GLOBALS._walkRegions.enableRegion(2);
+ R2_GLOBALS._walkRegions.enableRegion(3);
+ R2_GLOBALS._walkRegions.enableRegion(4);
+ R2_GLOBALS._walkRegions.enableRegion(5);
+ R2_GLOBALS._walkRegions.enableRegion(6);
+ break;
+ case 1:
+ // No break on purpose
+ case 2:
+ // No break on purpose
+ case 3:
+ // No break on purpose
+ case 8:
+ // No break on purpose
+ case 9:
+ // No break on purpose
+ case 10:
+ // No break on purpose
+ case 11:
+ // No break on purpose
+ case 12:
+ // No break on purpose
+ case 15:
+ // No break on purpose
+ case 16:
+ // No break on purpose
+ case 19:
+ // No break on purpose
+ case 23:
+ // No break on purpose
+ case 24:
+ // No break on purpose
+ case 29:
+ // No break on purpose
+ case 30:
+ // No break on purpose
+ case 39:
+ // No break on purpose
+ case 40:
+ // No break on purpose
+ case 44:
+ // No break on purpose
+ case 45:
+ // No break on purpose
+ case 71:
+ // No break on purpose
+ case 72:
+ // No break on purpose
+ case 73:
+ // No break on purpose
+ case 74:
+ // No break on purpose
+ case 75:
+ // No break on purpose
+ case 79:
+ // No break on purpose
+ case 85:
+ // No break on purpose
+ case 86:
+ // No break on purpose
+ case 87:
+ // No break on purpose
+ case 95:
+ // No break on purpose
+ case 96:
+ // No break on purpose
+ case 102:
+ // No break on purpose
+ case 103:
+ _exit3._enabled = true;
+ _exit6._enabled = true;
+ break;
+ case 4:
+ // No break on purpose
+ case 6:
+ // No break on purpose
+ case 13:
+ // No break on purpose
+ case 17:
+ // No break on purpose
+ case 20:
+ // No break on purpose
+ case 25:
+ // No break on purpose
+ case 27:
+ // No break on purpose
+ case 31:
+ // No break on purpose
+ case 33:
+ // No break on purpose
+ case 37:
+ // No break on purpose
+ case 41:
+ // No break on purpose
+ case 46:
+ // No break on purpose
+ case 48:
+ // No break on purpose
+ case 50:
+ // No break on purpose
+ case 52:
+ // No break on purpose
+ case 54:
+ // No break on purpose
+ case 76:
+ // No break on purpose
+ case 80:
+ // No break on purpose
+ case 82:
+ // No break on purpose
+ case 88:
+ // No break on purpose
+ case 90:
+ // No break on purpose
+ case 92:
+ // No break on purpose
+ case 97:
+ // No break on purpose
+ case 100:
+ // No break on purpose
+ case 104:
+ _exit6._enabled = true;
+ R2_GLOBALS._walkRegions.enableRegion(6);
+ R2_GLOBALS._walkRegions.enableRegion(9);
+ break;
+ case 5:
+ // No break on purpose
+ case 7:
+ // No break on purpose
+ case 14:
+ // No break on purpose
+ case 18:
+ // No break on purpose
+ case 22:
+ // No break on purpose
+ case 26:
+ // No break on purpose
+ case 28:
+ // No break on purpose
+ case 32:
+ // No break on purpose
+ case 36:
+ // No break on purpose
+ case 38:
+ // No break on purpose
+ case 43:
+ // No break on purpose
+ case 47:
+ // No break on purpose
+ case 49:
+ // No break on purpose
+ case 51:
+ // No break on purpose
+ case 53:
+ // No break on purpose
+ case 70:
+ // No break on purpose
+ case 78:
+ // No break on purpose
+ case 81:
+ // No break on purpose
+ case 84:
+ // No break on purpose
+ case 89:
+ // No break on purpose
+ case 91:
+ // No break on purpose
+ case 94:
+ // No break on purpose
+ case 99:
+ // No break on purpose
+ case 101:
+ _exit3._enabled = true;
+ R2_GLOBALS._walkRegions.enableRegion(1);
+ R2_GLOBALS._walkRegions.enableRegion(7);
+ R2_GLOBALS._walkRegions.enableRegion(13);
+ break;
+ default:
+ R2_GLOBALS._walkRegions.enableRegion(1);
+ R2_GLOBALS._walkRegions.enableRegion(6);
+ R2_GLOBALS._walkRegions.enableRegion(7);
+ R2_GLOBALS._walkRegions.enableRegion(9);
+ R2_GLOBALS._walkRegions.enableRegion(13);
+ break;
+ }
+
+ _object1.remove();
+ _object1.removeObject();
+ _actor1.remove();
+
+ switch (R2_GLOBALS._v566A4 - 4) {
+ case 0:
+ // No break on purpose
+ case 3:
+ // No break on purpose
+ case 16:
+ // No break on purpose
+ case 22:
+ // No break on purpose
+ case 24:
+ // No break on purpose
+ case 32:
+ // No break on purpose
+ case 33:
+ // No break on purpose
+ case 45:
+ // No break on purpose
+ case 46:
+ // No break on purpose
+ case 48:
+ // No break on purpose
+ case 51:
+ // No break on purpose
+ case 56:
+ // No break on purpose
+ case 59:
+ // No break on purpose
+ case 67:
+ // No break on purpose
+ case 68:
+ // No break on purpose
+ case 70:
+ // No break on purpose
+ case 73:
+ // No break on purpose
+ case 82:
+ // No break on purpose
+ case 90:
+ _exit1._enabled = true;
+ _object1.setup2(1950, (R2_GLOBALS._v566A4 % 2) + 1, 1, 160, 237, 25, 0);
+
+ _actor1.postInit();
+ _actor1.setVisage(1950);
+ _actor1.setStrip((((R2_GLOBALS._v566A4 - 1) / 35) % 2) + 1);
+ _actor1.setFrame(2);
+ _actor1.setPosition(Common::Point(160, 167));
+ _actor1.fixPriority(220);
+ R2_GLOBALS._walkRegions.enableRegion(3);
+ R2_GLOBALS._walkRegions.enableRegion(4);
+ break;
+ case 7:
+ // No break on purpose
+ case 10:
+ // No break on purpose
+ case 23:
+ // No break on purpose
+ case 29:
+ // No break on purpose
+ case 31:
+ // No break on purpose
+ case 39:
+ // No break on purpose
+ case 40:
+ // No break on purpose
+ case 52:
+ // No break on purpose
+ case 53:
+ // No break on purpose
+ case 55:
+ // No break on purpose
+ case 63:
+ // No break on purpose
+ case 65:
+ // No break on purpose
+ case 66:
+ // No break on purpose
+ case 75:
+ // No break on purpose
+ case 77:
+ // No break on purpose
+ case 81:
+ // No break on purpose
+ case 87:
+ // No break on purpose
+ case 89:
+ // No break on purpose
+ case 97:
+ _exit5._enabled = true;
+ _actor1.postInit();
+ _actor1.setVisage(1950);
+ _actor1.setStrip((((R2_GLOBALS._v566A4 - 1) / 35) % 2) + 1);
+ _actor1.setFrame(3);
+ _actor1.setPosition(Common::Point(160, 167));
+ _actor1.fixPriority(220);
+ break;
+ case 58:
+ // No break on purpose
+ case 74:
+ // No break on purpose
+ case 80:
+ _exit1._enabled = true;
+ _exit5._enabled = true;
+
+ _object1.setup(1950, (R2_GLOBALS._v566A4 % 2) + 1, 1, 160, 137, 25);
+
+ _actor1.postInit();
+ _actor1.setVisage(1950);
+ _actor1.setStrip((((R2_GLOBALS._v566A4 - 1) / 35) % 2) + 1);
+ _actor1.setFrame(3);
+ _actor1.setPosition(Common::Point(160, 167));
+ _actor1.fixPriority(220);
+ R2_GLOBALS._walkRegions.enableRegion(3);
+ R2_GLOBALS._walkRegions.enableRegion(4);
+ break;
+ default:
+ _actor1.postInit();
+ _actor1.setVisage(1950);
+ _actor1.setStrip(((R2_GLOBALS._v566A4 - 1) % 35) + 1);
+ _actor1.setFrame(2);
+ _actor1.setPosition(Common::Point(160, 167));
+ _actor1.fixPriority(220);
+ break;
+ }
+
+ switch (R2_GLOBALS._v566A4 - 3) {
+ case 0:
+ // No break on purpose
+ case 3:
+ // No break on purpose
+ case 5:
+ // No break on purpose
+ case 12:
+ // No break on purpose
+ case 15:
+ // No break on purpose
+ case 18:
+ // No break on purpose
+ case 19:
+ // No break on purpose
+ case 23:
+ // No break on purpose
+ case 26:
+ // No break on purpose
+ case 27:
+ // No break on purpose
+ case 29:
+ // No break on purpose
+ case 30:
+ // No break on purpose
+ case 31:
+ // No break on purpose
+ case 32:
+ // No break on purpose
+ case 44:
+ // No break on purpose
+ case 45:
+ // No break on purpose
+ case 51:
+ // No break on purpose
+ case 55:
+ // No break on purpose
+ case 56:
+ // No break on purpose
+ case 57:
+ // No break on purpose
+ case 60:
+ // No break on purpose
+ case 63:
+ _exit2._enabled = true;
+ case 54:
+ // No break on purpose
+ case 61:
+ // No break on purpose
+ case 62:
+ // No break on purpose
+ case 65:
+ _exit2._enabled = true;
+ // No break on purpose
+ case 35:
+ // No break on purpose
+ case 38:
+ // No break on purpose
+ case 40:
+ // No break on purpose
+ case 47:
+ // No break on purpose
+ case 50:
+ // No break on purpose
+ case 53:
+ // No break on purpose
+ case 58:
+ // No break on purpose
+ case 64:
+ // No break on purpose
+ case 66:
+ // No break on purpose
+ case 67:
+ // No break on purpose
+ case 79:
+ // No break on purpose
+ case 80:
+ // No break on purpose
+ case 86:
+ // No break on purpose
+ case 89:
+ // No break on purpose
+ case 90:
+ // No break on purpose
+ case 91:
+ // No break on purpose
+ case 92:
+ // No break on purpose
+ case 95:
+ // No break on purpose
+ case 96:
+ // No break on purpose
+ case 97:
+ // No break on purpose
+ case 98:
+ // No break on purpose
+ case 100:
+ _exit4._enabled = true;
+ R2_GLOBALS._walkRegions.enableRegion(4);
+ R2_GLOBALS._walkRegions.enableRegion(5);
+ R2_GLOBALS._walkRegions.enableRegion(6);
+ R2_GLOBALS._walkRegions.enableRegion(10);
+ R2_GLOBALS._walkRegions.enableRegion(11);
+ default:
+ break;
+ }
+ R2_GLOBALS._uiElements.draw();
+}
+
+void Scene1950::subBE59B() {
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+
+ _actor8.remove();
+ _actor2.remove();
+ _actor3.remove();
+
+ _field416 = 0;
+ _field41C = 0;
+
+ switch (R2_GLOBALS._v566A4) {
+ case 10:
+ _field41C = 1;
+ break;
+ case 13:
+ _field41C = 2;
+ break;
+ case 16:
+ _field41C = 3;
+ break;
+ case 17:
+ _field41C = 4;
+ break;
+ case 24:
+ _field41C = 5;
+ break;
+ case 25:
+ _field41C = 6;
+ break;
+ case 31:
+ _field41C = 7;
+ break;
+ case 40:
+ _field41C = 8;
+ break;
+ case 45:
+ _field41C = 9;
+ break;
+ case 46:
+ _field41C = 10;
+ break;
+ case 73:
+ _field41C = 11;
+ break;
+ case 75:
+ _field41C = 12;
+ break;
+ case 80:
+ _field41C = 13;
+ break;
+ case 87:
+ _field41C = 14;
+ break;
+ case 88:
+ _field41C = 15;
+ break;
+ case 96:
+ _field41C = 16;
+ break;
+ case 97:
+ _field41C = 17;
+ break;
+ case 104:
+ _field41C = 18;
+ break;
+ default:
+ break;
+ }
+
+ if (_field41C != 0) {
+ _actor8.postInit();
+ _actor8._numFrames = 6;
+ _actor8._moveRate = 6;
+ _actor8._moveDiff = Common::Point(3, 2);
+ _actor8._effect = 1;
+ if (R2_GLOBALS._v56613[(_field41C - 1) * 4] == 0) {
+ _actor8.setPosition(Common::Point(R2_GLOBALS._v56613[((_field41C - 1) * 4) + 2], R2_GLOBALS._v56613[((_field41C - 1) * 4) + 3]));
+ _actor8.animate(ANIM_MODE_NONE, NULL);
+ _actor8.addMover(NULL);
+ _actor8.setVisage(1961);
+ _actor8.setStrip(4);
+ _actor8.setFrame(10);
+ _actor8.fixPriority(10);
+ _actor8.setDetails(1950, 15, -1, 17, 2, (SceneItem *) NULL);
+ } else {
+ _actor8.setVisage(1960);
+ _actor8.setPosition(Common::Point(160, 130));
+ _actor8.animate(ANIM_MODE_2, NULL);
+ _actor8.setDetails(1950, 12, -1, 14, 2, (SceneItem *) NULL);
+ _field416 = 1;
+ }
+ }
+ if ((R2_GLOBALS._v566A4 == 1) && (R2_INVENTORY.getObjectScene(31) != 0)) {
+ _actor2.postInit();
+ _actor2.setVisage(1948);
+ _actor2.setStrip(3);
+ _actor2.setPosition(Common::Point(278, 155));
+ _actor2.fixPriority(100);
+ _actor2.setDetails(1950, 19, 20, 23, 2, (SceneItem *) NULL);
+ }
+
+ if (R2_GLOBALS._v566A4 == 102) {
+ R2_GLOBALS._walkRegions.load(1951);
+ R2_GLOBALS._walkRegions.enableRegion(1);
+ R2_GLOBALS._walkRegions.enableRegion(5);
+ R2_GLOBALS._walkRegions.enableRegion(6);
+ R2_GLOBALS._walkRegions.enableRegion(7);
+
+ _actor6.postInit();
+ _actor6.setVisage(1970);
+ _actor6.setStrip(1);
+ if (R2_GLOBALS.getFlag(37))
+ _actor6.setFrame(3);
+ else
+ _actor6.setFrame(1);
+ _actor6.setPosition(Common::Point(193, 158));
+ _actor6.setDetails(1950, 3, 4, 5, 2, (SceneItem *) NULL);
+
+ _actor7.postInit();
+ _actor7.setVisage(1970);
+ _actor7.setStrip(3);
+ _actor7.animate(ANIM_MODE_2, NULL);
+ _actor7._numFrames = 6;
+ _actor7.setPosition(Common::Point(194, 158));
+ _actor7.fixPriority(159);
+
+ _item2.setDetails(Rect(188, 124, 199, 133), 1950, 27, 28, -1, 2, NULL);
+
+ if (R2_INVENTORY.getObjectScene(34) == 1950) {
+ _actor5.postInit();
+ _actor5.setVisage(1970);
+ _actor5.setStrip(1);
+ _actor5.setFrame(2);
+ _actor5.fixPriority(160);
+ }
+
+ if (R2_GLOBALS.getFlag(37)) {
+ _actor5.setPosition(Common::Point(192, 118));
+ _actor5.setDetails(1950, 9, 4, -1, 2, (SceneItem *) NULL);
+ } else {
+ _actor4.postInit();
+ _actor4.setVisage(1970);
+ _actor4.setStrip(4);
+ _actor4._numFrames = 4;
+ _actor4.animate(ANIM_MODE_8, NULL);
+ _actor4.setPosition(Common::Point(192, 121));
+ _actor4.fixPriority(159);
+ _actor4.setDetails(1950, 6, 7, 8, 2, (SceneItem *) NULL);
+
+ _actor5.setPosition(Common::Point(192, 109));
+ _actor5.setDetails(1950, 9, 7, 8, 2, (SceneItem *) NULL);
+ }
+
+ _actor3.postInit();
+ _actor3.setVisage(1972);
+ _actor3.setStrip(1);
+ _actor3.setPosition(Common::Point(76, 94));
+ _actor3.fixPriority(25);
+ _actor3.setDetails(1950, 30, -1, -1, 2, (SceneItem *) NULL);
+ if (R2_INVENTORY.getObjectScene(35) == 2)
+ _actor3.setFrame(2);
+ else
+ _actor3.setFrame(1);
+
+ _field414 = 1;
+ } else if (_field414 != 0) {
+ _actor6.remove();
+ _actor4.remove();
+ _actor5.remove();
+ _actor7.remove();
+ _actor3.remove();
+
+ _item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 2, NULL);
+ }
+
+ switch (R2_GLOBALS._v566A5) {
+ case 0:
+ _sceneMode = 1950;
+ if (R2_INVENTORY.getObjectScene(31) == 0) {
+ R2_GLOBALS._v56AAB = 0;
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ } else {
+ setAction(&_sequenceManager, this, 1950, &R2_GLOBALS._player, NULL);
+ }
+ break;
+ case 1: {
+ _sceneMode = R2_GLOBALS._v566A5;
+ R2_GLOBALS._player.setPosition(Common::Point(160, 213));
+ Common::Point pt(160, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
+ break;
+ case 2:
+ _sceneMode = R2_GLOBALS._v566A5;
+ if (R2_GLOBALS.getFlag(36))
+ setAction(&_sequenceManager, this, 1957, &R2_GLOBALS._player, NULL);
+ else
+ setAction(&_sequenceManager, this, 1974, &R2_GLOBALS._player, NULL);
+ break;
+ case 3:
+ if (_field416 == 0) {
+ _sceneMode = R2_GLOBALS._v566A5;
+ R2_GLOBALS._player.setPosition(Common::Point(-20, 160));
+ Common::Point pt(30, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ } else {
+ _sceneMode = 18;
+ _exit3._enabled = false;
+ _field418 = Common::Point(60, 152);
+ R2_GLOBALS._v56AAB = 0;
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
+
+ _actor8.setStrip(2);
+ NpcMover *mover = new NpcMover();
+ _actor8.addMover(mover, &_field418, this);
+
+ R2_GLOBALS._player.setPosition(Common::Point(-20, 160));
+ Common::Point pt2(30, 160);
+ NpcMover *mover2 = new NpcMover();
+ R2_GLOBALS._player.addMover(mover2, &pt2, NULL);
+ }
+ break;
+ case 4:
+ _sceneMode = R2_GLOBALS._v566A5;
+ if (_field412 == 0) {
+ if (R2_GLOBALS.getFlag(36))
+ setAction(&_sequenceManager, this, 1955, &R2_GLOBALS._player, NULL);
+ else
+ setAction(&_sequenceManager, this, 1972, &R2_GLOBALS._player, NULL);
+ } else {
+ if (R2_GLOBALS.getFlag(36))
+ setAction(&_sequenceManager, this, 1954, &R2_GLOBALS._player, NULL);
+ else
+ setAction(&_sequenceManager, this, 1971, &R2_GLOBALS._player, NULL);
+ }
+ break;
+ case 5: {
+ _sceneMode = R2_GLOBALS._v566A5;
+ R2_GLOBALS._player.setPosition(Common::Point(160, 127));
+ Common::Point pt(160, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
+ break;
+ case 6:
+ if (_field416 == 0) {
+ _sceneMode = R2_GLOBALS._v566A5;
+ if (R2_GLOBALS._v566A4 == 1) {
+ setAction(&_sequenceManager, this, 1961, &R2_GLOBALS._player, NULL);
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(340, 160));
+ Common::Point pt(289, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
+ } else {
+ _sceneMode = 17;
+ _exit6._enabled = false;
+ _field418 = Common::Point(259, 152);
+
+ R2_GLOBALS._v56AAB = 0;
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
+
+ _actor8.setStrip(1);
+ NpcMover *mover = new NpcMover();
+ _actor8.addMover(mover, &_field418, this);
+
+ R2_GLOBALS._player.setPosition(Common::Point(340, 160));
+ Common::Point pt2(289, 160);
+ NpcMover *mover2 = new NpcMover();
+ R2_GLOBALS._player.addMover(mover2, &pt2, NULL);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene1950::subBF4B4(int indx) {
+ R2_GLOBALS._player.disableControl();
+ int si = indx - 1;
+ if ((indx / 4) == (si / 4)) {
+ if (si < 0)
+ si = 3;
+ } else
+ si = 4;
+
+ if (_area1._arrActor1[si]._fieldA8 == 0) {
+ _area1._arrActor1[si].setFrame(2);
+ _area1._arrActor1[si]._fieldA8 = 1;
+ } else {
+ _area1._arrActor1[si].setFrame(1);
+ _area1._arrActor1[si]._fieldA8 = 0;
+ }
+
+ si = indx + 1;
+ if ((indx / 4) == (si / 4)) {
+ if (si > 15)
+ si = 12;
+ } else
+ si -= 4;
+
+ if (_area1._arrActor1[si]._fieldA8 == 0) {
+ _area1._arrActor1[si].setFrame(2);
+ _area1._arrActor1[si]._fieldA8 = 1;
+ } else {
+ _area1._arrActor1[si].setFrame(1);
+ _area1._arrActor1[si]._fieldA8 = 0;
+ }
+
+ si = indx - 4;
+ if (si < 0)
+ si += 16;
+
+ if (_area1._arrActor1[si]._fieldA8 == 0) {
+ _area1._arrActor1[si].setFrame(2);
+ _area1._arrActor1[si]._fieldA8 = 1;
+ } else {
+ _area1._arrActor1[si].setFrame(1);
+ _area1._arrActor1[si]._fieldA8 = 0;
+ }
+
+ si = indx + 4;
+ if (si > 15)
+ si -= 16;
+
+ if (_area1._arrActor1[si]._fieldA8 == 0) {
+ _area1._arrActor1[si].setFrame(2);
+ _area1._arrActor1[si]._fieldA8 = 1;
+ } else {
+ _area1._arrActor1[si].setFrame(1);
+ _area1._arrActor1[si]._fieldA8 = 0;
+ }
+
+ int cpt = 0;
+ for (si = 0; si < 16; si++) {
+ if (_area1._arrActor1[si]._fieldA8 != 0)
+ ++cpt;
+ }
+
+ if (cpt != 16) {
+ R2_GLOBALS._player.enableControl();
+ R2_GLOBALS._player._canWalk = false;
+ } else {
+ R2_GLOBALS.setFlag(37);
+ _sceneMode = 24;
+ // TODO: check if correct. The original doesn't countain a sceneActor in
+ // this call, but it's extremely unusual
+ setAction(&_sequenceManager, this, 1976, NULL);
+ }
+}
+
+void Scene1950::postInit(SceneObjectList *OwnerList) {
+ _field412 = 0;
+ _field414 = 0;
+ _field416 = 0;
+ _field41C = 0;
+ if (R2_GLOBALS._sceneManager._previousScene == 300)
+ R2_GLOBALS._v566A4 = 103;
+
+ subBDC1E();
+ SceneExt::postInit();
+ R2_GLOBALS._sound1.play(105);
+
+ _exit1.setDetails(Rect(130, 46, 189, 135), SHADECURSOR_UP, 1950);
+ _exit1.setDest(Common::Point(160, 145));
+
+ _exit2.setDetails(Rect(208, 0, 255, 73), EXITCURSOR_N, 1950);
+ _exit2.setDest(Common::Point(200, 151));
+
+ _exit3.setDetails(Rect(305, 95, 320, 147), EXITCURSOR_E, 1950);
+ _exit3.setDest(Common::Point(312, 160));
+
+ _exit4.setDetails(Rect(208, 99, 255, 143), EXITCURSOR_S, 1950);
+ _exit4.setDest(Common::Point(200, 151));
+
+ _exit5.setDetails(Rect(113, 154, 206, 168), SHADECURSOR_DOWN, 1950);
+ _exit5.setDest(Common::Point(160, 165));
+
+ _exit6.setDetails(Rect(0, 95, 14, 147), EXITCURSOR_W, 1950);
+ _exit6.setDest(Common::Point(7, 160));
+
+ _exit7.setDetails(Rect(72, 54, 120, 128), EXITCURSOR_NW, 1950);
+ _exit7.setDest(Common::Point(120, 140));
+
+ _exit8.setDetails(Rect(258, 60, 300, 145), EXITCURSOR_NE, 1950);
+ _exit8.setDest(Common::Point(268, 149));
+
+ R2_GLOBALS._player.postInit();
+ if ( (R2_INVENTORY.getObjectScene(32) == 0) && (R2_INVENTORY.getObjectScene(33) == 0)
+ && (R2_INVENTORY.getObjectScene(46) == 0) && (!R2_GLOBALS.getFlag(36)) )
+ R2_GLOBALS._player.setVisage(22);
+ else
+ R2_GLOBALS._player.setVisage(20);
+
+ R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
+ _item1.setDetails(Rect(0, 0, 320, 200), 1950, 0, 1, 2, 1, NULL);
+
+ subBE59B();
+}
+
+void Scene1950::remove() {
+ R2_GLOBALS._sound1.stop();
+ R2_GLOBALS._sound2.fadeOut2(NULL);
+ SceneExt::remove();
+}
+
+void Scene1950::signal() {
+ switch (_sceneMode) {
+ case 11:
+ R2_GLOBALS._v566A4 += 7;
+ subBDC1E();
+ subBE59B();
+ break;
+ case 12:
+ R2_GLOBALS._v566A4 += 35;
+ subBDC1E();
+ subBE59B();
+ break;
+ case 1975:
+ SceneItem::display(1950, 21, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ // No break on purpose
+ case 13:
+ ++R2_GLOBALS._v566A4;
+ subBDC1E();
+ subBE59B();
+ break;
+ case 14:
+ R2_GLOBALS._v566A4 += 221;
+ subBDC1E();
+ subBE59B();
+ break;
+ case 15:
+ R2_GLOBALS._v566A4 += 249;
+ subBDC1E();
+ subBE59B();
+ break;
+ case 16:
+ // No break on purpose
+ case 1961:
+ --R2_GLOBALS._v566A4;
+ subBDC1E();
+ subBE59B();
+ break;
+ case 17: {
+ _sceneMode = 13;
+ R2_GLOBALS._v566A5 = 3;
+ _field416 = 0;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._player._canWalk = true;
+ R2_GLOBALS._player.setVisage(22);
+ R2_GLOBALS._player.animate(ANIM_MODE_9, NULL);
+ Common::Point pt(340, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ Common::Point pt2(289, 160);
+ NpcMover *mover2 = new NpcMover();
+ _actor8.addMover(mover2, &pt2, NULL);
+ }
+ break;
+ case 18: {
+ _sceneMode = 16;
+ R2_GLOBALS._v566A5 = 6;
+ _field416 = 0;
+ R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+ R2_GLOBALS._player._canWalk = true;
+ R2_GLOBALS._player.setVisage(22);
+ R2_GLOBALS._player.animate(ANIM_MODE_9, NULL);
+ Common::Point pt(-20, 160);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ Common::Point pt2(30, 160);
+ NpcMover *mover2 = new NpcMover();
+ _actor8.addMover(mover2, &pt2, NULL);
+ }
+ break;
+ case 24:
+ _area1.remove();
+ _sceneMode = 1966;
+ _actor6.setFrame(3);
+ setAction(&_sequenceManager, this, 1966, &_actor4, &_actor5, NULL);
+ break;
+ case 1951:
+ R2_GLOBALS._sound1.fadeOut2(NULL);
+ R2_GLOBALS._sceneManager.changeScene(1945);
+ break;
+ case 1958:
+ SceneItem::display(1950, 24, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ R2_GLOBALS._v56AAB = 0;
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ _exit8._enabled = true;
+ break;
+ case 1959:
+ R2_INVENTORY.setObjectScene(46, 0);
+ R2_GLOBALS._v56AAB = 0;
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ _exit8._enabled = true;
+ break;
+ case 1962:
+ // No break on purpose
+ case 1963:
+ R2_GLOBALS._player.enableControl();
+ _area1.proc12(1971, 1, 1, 160, 135);
+ break;
+ case 1964:
+ // No break on purpose
+ case 1965:
+ if (!R2_GLOBALS.getFlag(37))
+ SceneItem::display(1950, 26, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1966:
+ _actor4.remove();
+ if (R2_GLOBALS.getFlag(36)) {
+ _sceneMode = 1964;
+ setAction(&_sequenceManager, this, 1964, &R2_GLOBALS._player, NULL);
+ } else {
+ _sceneMode = 1965;
+ setAction(&_sequenceManager, this, 1965, &R2_GLOBALS._player, NULL);
+ }
+ _actor5.setDetails(1950, 9, -1, -1, 2, (SceneItem *) NULL);
+ case 1967: {
+ _sceneMode = 0;
+ R2_INVENTORY.setObjectScene(34, 2);
+ _actor5.remove();
+ if (R2_GLOBALS.getFlag(36))
+ R2_GLOBALS._player.setVisage(20);
+ else
+ R2_GLOBALS._player.setVisage(22);
+
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ Common::Point pt(218, 165);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ }
+ break;
+ case 1968:
+ R2_GLOBALS._player.disableControl();
+ R2_INVENTORY.setObjectScene(35, 2);
+ _actor3.setFrame(2);
+ if (R2_GLOBALS.getFlag(36))
+ R2_GLOBALS._player.setVisage(20);
+ else
+ R2_GLOBALS._player.setVisage(22);
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ break;
+ default:
+ R2_GLOBALS._v56AAB = 0;
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ break;
+ }
+}
+
+void Scene1950::process(Event &event) {
+ if ( (event.eventType == EVENT_BUTTON_DOWN)
+ && (R2_GLOBALS._player._uiEnabled)
+ && (R2_GLOBALS._events.getCursor() == R2_47)
+ && (R2_GLOBALS._player._bounds.contains(event.mousePos))
+ && (R2_INVENTORY.getObjectScene(31) == 0)) {
+ event.handled = true;
+ R2_GLOBALS._player.disableControl();
+ _exit7._enabled = false;
+ _exit8._enabled = false;
+ _sceneMode = 1959;
+ setAction(&_sequenceManager, this, 1959, &R2_GLOBALS._player, NULL);
+ }
+ Scene::process(event);
+}
+
} // End of namespace Ringworld2
} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h
index 3f2399a2fe..7efaec72c1 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -799,6 +799,148 @@ public:
virtual void signal();
};
+class Scene1950 : public SceneExt {
+ class Area1: public SceneArea {
+ public:
+ class Actor10 : public SceneActor {
+ public:
+ int _fieldA4;
+ int _fieldA6;
+ int _fieldA8;
+
+ Actor10::Actor10();
+ void synchronize(Serializer &s);
+
+ void init(int indx);
+ virtual void process(Event &event);
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ SceneActor _areaActor;
+ Actor10 _arrActor1[16];
+
+ byte _field20;
+ int _fieldB65;
+
+ Area1();
+ void synchronize(Serializer &s);
+
+ virtual void remove();
+ virtual void process(Event &event);
+ virtual void proc12(int visage, int stripFrameNum, int frameNum, int posX, int posY);
+ virtual void proc13(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
+ };
+
+ class Hotspot2 : public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ class Actor2 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Actor3 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Actor4 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Actor5 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Actor8 : public SceneActor {
+ public:
+ int _fieldA4;
+ int _fieldA6;
+ int _fieldA8;
+ int _fieldAA;
+ int _fieldAC;
+ byte _fieldAE;
+ byte _fieldAF;
+
+ Actor8::Actor8();
+ void synchronize(Serializer &s);
+
+ virtual void signal();
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ class Exit1 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit2 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit3 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit4 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit5 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit6 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit7 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+ class Exit8 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+public:
+ NamedHotspot _item1;
+ Hotspot2 _item2;
+ SceneActor _actor1;
+ BackgroundSceneObject _object1;
+ Actor2 _actor2;
+ Actor3 _actor3;
+ SceneActor _actor4;
+ Actor5 _actor5;
+ SceneActor _actor6;
+ SceneActor _actor7;
+ Actor8 _actor8;
+ Area1 _area1;
+ Exit1 _exit1;
+ Exit2 _exit2;
+ Exit3 _exit3;
+ Exit4 _exit4;
+ Exit5 _exit5;
+ Exit6 _exit6;
+ Exit7 _exit7;
+ Exit8 _exit8;
+ SequenceManager _sequenceManager;
+
+ int _field412;
+ int _field414;
+ int _field416;
+ Common::Point _field418;
+ int _field41C;
+
+ Scene1950();
+ void synchronize(Serializer &s);
+
+ void subBDC1E();
+ void subBE59B();
+ void subBF4B4(int indx);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+};
} // End of namespace Ringworld2
} // End of namespace TsAGE