scummvm/engines/tsage/ringworld2/ringworld2_airduct.cpp
2014-10-16 08:07:38 +02:00

910 lines
23 KiB
C++

/* 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 "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