aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/tsage/ringworld_scenes3.cpp96
-rw-r--r--engines/tsage/ringworld_scenes3.h5
2 files changed, 58 insertions, 43 deletions
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp
index b9d408b588..06bfaf7d9e 100644
--- a/engines/tsage/ringworld_scenes3.cpp
+++ b/engines/tsage/ringworld_scenes3.cpp
@@ -2072,10 +2072,12 @@ void Scene2120::Action1::signal() {
_globals->_events.setCursor(CURSOR_WALK);
break;
case 1:
+ // First page of index
SceneItem::display(2120, 0, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOUR, 7, SET_BG_COLOUR, -1,
SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END);
break;
case 2:
+ // Second page of index
SceneItem::display(2120, 1, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOUR, 7, SET_BG_COLOUR, -1,
SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END);
break;
@@ -2083,11 +2085,11 @@ void Scene2120::Action1::signal() {
// Display an image associated with the encyclopedia entry
SceneItem::display(0, 0);
- scene->_hotspot3.postInit();
- scene->_hotspot3.setVisage(_entries[scene->_subjectIndex]._visage);
- scene->_hotspot3.setPosition(Common::Point(129, 180));
- scene->_hotspot3.animate(ANIM_MODE_NONE, NULL);
- scene->_incrOffset = true;
+ scene->_visageHotspot.postInit();
+ scene->_visageHotspot.setVisage(_entries[scene->_subjectIndex]._visage);
+ scene->_visageHotspot.setPosition(Common::Point(129, 180));
+ scene->_visageHotspot.animate(ANIM_MODE_NONE, NULL);
+ scene->_visageVisable = true;
break;
case 4:
// Display page of text
@@ -2105,24 +2107,24 @@ void Scene2120::Action1::dispatch() {
Event event;
if (_globals->_events.getEvent(event) && (event.eventType == EVENT_BUTTON_DOWN)) {
if (scene->_listRect.contains(event.mousePos) && (scene->_dbMode != 2)) {
- scene->_hotspot1.setPosition(Common::Point(scene->_hotspot1._position.x, event.mousePos.y));
+ scene->_topicArrowHotspot.setPosition(Common::Point(scene->_topicArrowHotspot._position.x, event.mousePos.y));
}
// Subject button handling
if (scene->_subjectButton._bounds.contains(event.mousePos) && (scene->_dbMode != 2)) {
- scene->_hotspot2.setPosition(Common::Point(291, 34));
- scene->_hotspot2._strip = 1;
- scene->_hotspot2.animate(ANIM_MODE_5, NULL);
+ scene->_arrowHotspot.setPosition(Common::Point(291, 34));
+ scene->_arrowHotspot._strip = 1;
+ scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
if (scene->_dbMode == 0)
- scene->_subjectIndex = (scene->_hotspot1._position.y - 48) / 8;
+ scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 48) / 8;
else
- scene->_subjectIndex = (scene->_hotspot1._position.y - 44) / 8 + 16;
+ scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 44) / 8 + 16;
if ((scene->_subjectIndex == 27) && _globals->getFlag(70))
_globals->setFlag(75);
- scene->_hotspot1.flag100();
+ scene->_topicArrowHotspot.flag100();
scene->_prevDbMode = scene->_dbMode;
scene->_dbMode = 2;
scene->_lineOffset = 0;
@@ -2135,9 +2137,9 @@ void Scene2120::Action1::dispatch() {
// Next Page button handling
if (scene->_nextPageButton._bounds.contains(event.mousePos)) {
if (!scene->_dbMode) {
- scene->_hotspot2._strip = 2;
- scene->_hotspot2.setPosition(Common::Point(291, 76));
- scene->_hotspot2.animate(ANIM_MODE_5, NULL);
+ scene->_arrowHotspot._strip = 2;
+ scene->_arrowHotspot.setPosition(Common::Point(291, 76));
+ scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
scene->_dbMode = 1;
_actionIndex = 2;
@@ -2145,18 +2147,18 @@ void Scene2120::Action1::dispatch() {
}
if ((scene->_dbMode == 2) && (scene->_lineOffset < _entries[scene->_subjectIndex]._size)) {
- if (!scene->_incrOffset) {
+ if (!scene->_visageVisable) {
++scene->_lineOffset;
} else {
- scene->_incrOffset = false;
- scene->_hotspot3.remove();
+ scene->_visageVisable = false;
+ scene->_visageHotspot.remove();
}
setDelay(30);
}
- if ((scene->_subjectIndex == 20) && scene->_incrOffset) {
- scene->_incrOffset = false;
- scene->_hotspot3.remove();
+ if ((scene->_subjectIndex == 20) && scene->_visageVisable) {
+ scene->_visageVisable = false;
+ scene->_visageHotspot.remove();
setDelay(30);
}
@@ -2167,9 +2169,9 @@ void Scene2120::Action1::dispatch() {
if (scene->_previousPageButton._bounds.contains(event.mousePos)) {
switch (scene->_dbMode) {
case 1:
- scene->_hotspot2._strip = 3;
- scene->_hotspot2.setPosition(Common::Point(291, 117));
- scene->_hotspot2.animate(ANIM_MODE_5, NULL);
+ scene->_arrowHotspot._strip = 3;
+ scene->_arrowHotspot.setPosition(Common::Point(291, 117));
+ scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
scene->_dbMode = 0;
_actionIndex = 1;
@@ -2193,6 +2195,7 @@ void Scene2120::Action1::dispatch() {
// Exit button handling
if (scene->_exitButton._bounds.contains(event.mousePos)) {
if (scene->_dbMode != 2) {
+ // In the index, so return to the previous scene
setAction(NULL);
SceneItem::display(0, 0);
@@ -2200,18 +2203,19 @@ void Scene2120::Action1::dispatch() {
_globals->_sceneText._fontNumber = 2;
_globals->_sceneManager.changeScene(_globals->_sceneManager._previousScene);
} else {
+ // Exit out of topic display to index
SceneItem::display(0, 0);
if (_entries[scene->_subjectIndex]._visage)
- scene->_hotspot3.remove();
+ scene->_visageHotspot.remove();
- scene->_hotspot2._strip = 4;
- scene->_hotspot2.setPosition(Common::Point(291, 159));
- scene->_hotspot2.animate(ANIM_MODE_5, NULL);
+ scene->_arrowHotspot._strip = 4;
+ scene->_arrowHotspot.setPosition(Common::Point(291, 159));
+ scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
scene->_dbMode = scene->_prevDbMode;
- _actionIndex = scene->_prevDbMode;
+ _actionIndex = scene->_prevDbMode + 1;
- scene->_hotspot1.unflag100();
+ scene->_topicArrowHotspot.unflag100();
setDelay(1);
}
@@ -2231,26 +2235,26 @@ void Scene2120::postInit(SceneObjectList *OwnerList) {
// TODO: Initialise encyclopedia
- _listRect = Rect(18, 48, 260, 176);
+ _listRect = Rect(18, 48, 260, 177);
_subjectButton.setBounds(Rect(266, 13, 320, 56));
_nextPageButton.setBounds(Rect(266, 56, 320, 98));
_previousPageButton.setBounds(Rect(266, 98, 320, 140));
_exitButton.setBounds(Rect(266, 140, 320, 182));
- _hotspot1.postInit();
- _hotspot1.setVisage(2120);
- _hotspot1.animate(ANIM_MODE_NONE, NULL);
- _hotspot1.setPosition(Common::Point(240, 55));
+ _topicArrowHotspot.postInit();
+ _topicArrowHotspot.setVisage(2120);
+ _topicArrowHotspot.animate(ANIM_MODE_NONE, NULL);
+ _topicArrowHotspot.setPosition(Common::Point(240, 55));
- _hotspot2.postInit();
- _hotspot2.setVisage(2121);
- _hotspot2.animate(ANIM_MODE_NONE, NULL);
- _hotspot2._frame = 1;
- _hotspot2.setPosition(Common::Point(400, 200));
+ _arrowHotspot.postInit();
+ _arrowHotspot.setVisage(2121);
+ _arrowHotspot.animate(ANIM_MODE_NONE, NULL);
+ _arrowHotspot._frame = 1;
+ _arrowHotspot.setPosition(Common::Point(400, 200));
_dbMode = 0;
_prevDbMode = 0;
- _incrOffset = false;
+ _visageVisable = false;
_subjectIndex = 0;
setAction(&_action1);
@@ -2258,4 +2262,14 @@ void Scene2120::postInit(SceneObjectList *OwnerList) {
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
+void Scene2120::synchronise(Serialiser &s) {
+ Scene::synchronise(s);
+
+ s.syncAsSint16LE(_dbMode);
+ s.syncAsSint16LE(_prevDbMode);
+ s.syncAsSint16LE(_visageVisable);
+ s.syncAsSint16LE(_subjectIndex);
+ s.syncAsSint16LE(_lineOffset);
+}
+
} // End of namespace tSage
diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h
index c8a21b7c38..d1032539a7 100644
--- a/engines/tsage/ringworld_scenes3.h
+++ b/engines/tsage/ringworld_scenes3.h
@@ -341,16 +341,17 @@ class Scene2120: public Scene {
public:
SoundHandler _soundHandler;
- SceneObject _hotspot1, _hotspot2, _hotspot3;
+ SceneObject _topicArrowHotspot, _arrowHotspot, _visageHotspot;
SceneObject _subjectButton, _nextPageButton, _previousPageButton, _exitButton;
Action1 _action1;
Rect _listRect;
int _dbMode, _prevDbMode;
- bool _incrOffset;
+ bool _visageVisable;
int _subjectIndex;
int _lineOffset;
virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void synchronise(Serialiser &s);
};
} // End of namespace tSage