Skip to content

Commit

Permalink
TSAGE: Implemented R2R Scene 800 - Sickbay
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Dec 19, 2011
1 parent 538d834 commit 7d580ee
Show file tree
Hide file tree
Showing 3 changed files with 336 additions and 0 deletions.
3 changes: 3 additions & 0 deletions engines/tsage/ringworld2/ringworld2_logic.cpp
Expand Up @@ -76,7 +76,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
case 525:
case 600:
case 700:
error("Missing scene %d from group 0", sceneNumber);
case 800:
// Sick bay
return new Scene800();
case 825:
error("Missing scene %d from group 0", sceneNumber);
case 850:
Expand Down
284 changes: 284 additions & 0 deletions engines/tsage/ringworld2/ringworld2_scenes0.cpp
Expand Up @@ -2900,6 +2900,290 @@ void Scene400::dispatch() {
}
}

/*--------------------------------------------------------------------------
* Scene 800 - Sick Bay
*
*--------------------------------------------------------------------------*/

bool Scene800::Button::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

if (action != CURSOR_USE) {
return NamedHotspot::startAction(action, event);
} else {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 802;
scene->setAction(&scene->_sequenceManager1, scene, 802, &R2_GLOBALS._player, &scene->_autodocCover, NULL);
return true;
}
}

bool Scene800::CableJunction::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

if (action != R2_OPTICAL_FIBRE) {
return NamedHotspot::startAction(action, event);
} else {
R2_GLOBALS._player.disableControl();
scene->_opticalFibre.postInit();
scene->_sceneMode = 803;

if (R2_INVENTORY.getObjectScene(R2_READER) == 800)
scene->setAction(&scene->_sequenceManager1, scene, 813, &R2_GLOBALS._player, &scene->_opticalFibre, &scene->_reader, NULL);
else
scene->setAction(&scene->_sequenceManager1, scene, 803, &R2_GLOBALS._player, &scene->_opticalFibre, NULL);

return true;
}
}

bool Scene800::DeviceSlot::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

switch (action) {
case CURSOR_USE:
if (R2_INVENTORY.getObjectScene(R2_READER) != 800)
break;

R2_GLOBALS._player.disableControl();
scene->_reader.postInit();

if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800)
scene->setAction(&scene->_sequenceManager1, scene, 814, &R2_GLOBALS._player, &scene->_reader, &scene->_opticalFibre, NULL);
else
scene->setAction(&scene->_sequenceManager1, scene, 804, &R2_GLOBALS._player, &scene->_reader, NULL);
return true;
default:
break;
}

return NamedHotspot::startAction(action, event);
}

/*--------------------------------------------------------------------------*/

bool Scene800::Door::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

switch (action) {
case CURSOR_USE:
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 801;
scene->setAction(&scene->_sequenceManager1, scene, 801, &R2_GLOBALS._player, &scene->_door, NULL);
return true;
default:
return SceneActor::startAction(action, event);
}
}

bool Scene800::Tray::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

switch (action) {
case CURSOR_USE:
if (!R2_GLOBALS.getFlag(10)) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 806;
scene->setAction(&scene->_sequenceManager1, scene, 806, &R2_GLOBALS._player, &scene->_tray, NULL);
} else if (R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 825) {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 808;
scene->setAction(&scene->_sequenceManager1, scene, 808, &R2_GLOBALS._player, &scene->_tray, NULL);
} else {
R2_GLOBALS._player.disableControl();
scene->_sceneMode = 807;
scene->setAction(&scene->_sequenceManager1, scene, 807, &R2_GLOBALS._player, &scene->_tray, NULL);
}
return true;
default:
return SceneActor::startAction(action, event);
}
}

bool Scene800::ComScanner::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

switch (action) {
case CURSOR_USE:
if (scene->_cabinet._frame == 1)
return false;

R2_GLOBALS._player.disableControl();
scene->_sceneMode = 811;
scene->setAction(&scene->_sequenceManager1, scene, 811, &R2_GLOBALS._player, &scene->_comScanner, NULL);
return true;
case CURSOR_TALK:
SceneItem::display2(800, 35);
return true;
default:
return SceneActor::startAction(action, event);
}
}

bool Scene800::Cabinet::startAction(CursorType action, Event &event) {
Scene800 *scene = (Scene800 *)R2_GLOBALS._sceneManager._scene;

switch (action) {
case CURSOR_USE:
R2_GLOBALS._player.disableControl();

if (scene->_cabinet._frame == 1) {
scene->_sceneMode = 810;
scene->setAction(&scene->_sequenceManager1, scene, 810, &R2_GLOBALS._player, &scene->_cabinet, NULL);
R2_GLOBALS.setFlag(56);
} else {
scene->_sceneMode = 812;
scene->setAction(&scene->_sequenceManager1, scene, 812, &R2_GLOBALS._player, &scene->_cabinet, NULL);
R2_GLOBALS.clearFlag(56);
}
return true;
default:
return SceneActor::startAction(action, event);
}
}

/*--------------------------------------------------------------------------*/

void Scene800::postInit(SceneObjectList *OwnerList) {
SceneExt::postInit();
loadScene(800);

_door.postInit();
_door.setVisage(800);
_door.setPosition(Common::Point(286, 108));
_door.fixPriority(50);
_door.setDetails(800, 3, -1, -1, 1, NULL);

_autodocCover.postInit();
_autodocCover.setup(800, 2, 1);
_autodocCover.setPosition(Common::Point(119, 161));
_autodocCover.setDetails(800, 6, 7, -1, 1, NULL);

if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) {
_opticalFibre.postInit();
if (R2_INVENTORY.getObjectScene(R2_READER) == 800)
_opticalFibre.setup(800, 4, 1);
else
_opticalFibre.setup(800, 7, 2);

_opticalFibre.setPosition(Common::Point(220, 124));
_opticalFibre.fixPriority(140);
}

if (R2_INVENTORY.getObjectScene(R2_READER) == 800) {
_reader.postInit();

if (R2_INVENTORY.getObjectScene(R2_OPTICAL_FIBRE) == 800) {
_opticalFibre.setup(800, 4, 1);
_reader.hide();
} else {
_reader.setup(800, 7, 1);
}

_reader.setPosition(Common::Point(230, 120));
_reader.fixPriority(140);
}

_cabinet.postInit();
_cabinet.setup(801, 1, R2_GLOBALS.getFlag(56) ? 6 : 1);
_cabinet.setPosition(Common::Point(169, 79));
_cabinet.setDetails(800, 41, -1, -1, 1, NULL);

if (R2_INVENTORY.getObjectScene(R2_9) == 800) {
_comScanner.postInit();
_comScanner.setup(801, 2, 1);
_comScanner.setPosition(Common::Point(174, 73));
_comScanner.setDetails(800, 34, 35, -1, 1, NULL);
}

_tray.postInit();
_tray.setup(800, R2_INVENTORY.getObjectScene(R2_OPTO_DISK) == 825 ? 6 : 5, 1);
if (R2_GLOBALS.getFlag(10))
_tray.setFrame(5);
_tray.setPosition(Common::Point(203, 144));
_tray.setDetails(800, 12, -1, 14, 1, NULL);

R2_GLOBALS._player.postInit();
R2_GLOBALS._player.setVisage(10);
R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
R2_GLOBALS._player.disableControl();

_dataConduits.setDetails(13, 800, 21, -1, -1);
_cableJunction.setDetails(Rect(206, 111, 223, 125), 800, 24, -1, -1, 1, NULL);
_deviceSlot.setDetails(Rect(220, 108, 239, 122), 800, 27, -1, -1, 1, NULL);
_diskSlot.setDetails(Rect(209, 124, 226, 133), 800, 9, -1, 11, 1, NULL);

if (R2_INVENTORY.getObjectScene(R2_READER) == 800)
_deviceSlot._lookLineNum = 33;

_button.setDetails(Rect(189, 112, 204, 124), 800, 30, -1, -1, 1, NULL);
_couch.setDetails(11, 800, 15, -1, 17);
_autoDoc.setDetails(Rect(152, 92, 247, 151), 800, 6, 7, -1, 1, NULL);
_medicalDatabase.setDetails(12, 800, 18, -1, -1);
_background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 800, 0, -1, -1, 1, NULL);

switch (R2_GLOBALS._sceneManager._previousScene) {
case 825:
_sceneMode = 800;
setAction(&_sequenceManager1, this, 805, &R2_GLOBALS._player, &_autodocCover, NULL);
break;
case 850:
_sceneMode = 800;
setAction(&_sequenceManager1, this, 800, &R2_GLOBALS._player, &_door, NULL);
break;
default:
R2_GLOBALS._player.setStrip(3);
R2_GLOBALS._player.setPosition(Common::Point(277, 132));
R2_GLOBALS._player.enableControl();
break;
}
}

void Scene800::signal() {
switch (_sceneMode) {
case 801:
R2_GLOBALS._sceneManager.changeScene(850);
break;
case 802:
R2_GLOBALS._sceneManager.changeScene(825);
break;
case 803:
R2_GLOBALS._player.enableControl();
R2_INVENTORY.setObjectScene(R2_OPTICAL_FIBRE, 800);
break;
case 804:
R2_GLOBALS._player.enableControl();
_deviceSlot._lookLineNum = 33;
R2_INVENTORY.setObjectScene(R2_READER, 800);
break;
case 806:
R2_GLOBALS._player.enableControl();
R2_GLOBALS.setFlag(10);
break;
case 807:
R2_GLOBALS._player.enableControl();
R2_GLOBALS.clearFlag(10);
break;
case 808:
R2_GLOBALS._player.enableControl();
R2_INVENTORY.setObjectScene(R2_OPTO_DISK, 1);
break;
case 809:
R2_GLOBALS._player.enableControl();
R2_INVENTORY.setObjectScene(R2_READER, 1);
break;
case 811:
R2_GLOBALS._player.enableControl();
_comScanner.remove();
R2_INVENTORY.setObjectScene(R2_9, 1);
break;
default:
R2_GLOBALS._player.enableControl();
break;
}
}


/*--------------------------------------------------------------------------
* Scene 850 - Deck #5 - By Lift
*
Expand Down
49 changes: 49 additions & 0 deletions engines/tsage/ringworld2/ringworld2_scenes0.h
Expand Up @@ -370,6 +370,55 @@ class Scene400: public SceneExt {
virtual void dispatch();
};

class Scene800: public SceneExt {
/* Items */
class Button: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class CableJunction: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};
class DeviceSlot: public NamedHotspot {
public:
virtual bool startAction(CursorType action, Event &event);
};

/* Objects */
class Door: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Tray: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class ComScanner: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
class Cabinet: public SceneActor {
public:
virtual bool startAction(CursorType action, Event &event);
};
public:
NamedHotspot _background, _autoDoc, _diskSlot, _couch;
NamedHotspot _medicalDatabase, _dataConduits;
Button _button;
CableJunction _cableJunction;
DeviceSlot _deviceSlot;
SceneActor _autodocCover, _opticalFibre, _reader;
Door _door;
Tray _tray;
ComScanner _comScanner;
Cabinet _cabinet;
SequenceManager _sequenceManager1;

virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
};

class Scene850: public SceneExt {
/* Items */
class Indicator: public NamedHotspot {
Expand Down

0 comments on commit 7d580ee

Please sign in to comment.