aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/core.cpp')
-rw-r--r--engines/tsage/core.cpp102
1 files changed, 84 insertions, 18 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 6c015ab45f..a32f445194 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -34,6 +34,7 @@
#include "tsage/globals.h"
#include "tsage/sound.h"
#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/ringworld2/ringworld2_logic.h"
namespace TsAGE {
@@ -1511,6 +1512,14 @@ void SceneItem::synchronize(Serializer &s) {
s.syncAsSint16LE(_position.x); s.syncAsSint32LE(_position.y);
s.syncAsSint16LE(_yDiff);
s.syncAsSint32LE(_sceneRegionId);
+
+ if (g_vm->getGameID() == GType_Ringworld2) {
+ // In R2R, the following fields were moved into the SceneItem class
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_useLineNum);
+ s.syncAsSint16LE(_talkLineNum);
+ }
}
void SceneItem::remove() {
@@ -1533,25 +1542,30 @@ bool SceneItem::startAction(CursorType action, Event &event) {
void SceneItem::doAction(int action) {
const char *msg = NULL;
- switch ((int)action) {
- case CURSOR_LOOK:
- msg = LOOK_SCENE_HOTSPOT;
- break;
- case CURSOR_USE:
- msg = USE_SCENE_HOTSPOT;
- break;
- case CURSOR_TALK:
- msg = TALK_SCENE_HOTSPOT;
- break;
- case 0x1000:
- msg = SPECIAL_SCENE_HOTSPOT;
- break;
- default:
- msg = DEFAULT_SCENE_HOTSPOT;
- break;
- }
+ if (g_vm->getGameID() == GType_Ringworld2) {
+ Event dummyEvent;
+ ((Ringworld2::SceneExt *)GLOBALS._sceneManager._scene)->display((CursorType)action, dummyEvent);
+ } else {
+ switch ((int)action) {
+ case CURSOR_LOOK:
+ msg = LOOK_SCENE_HOTSPOT;
+ break;
+ case CURSOR_USE:
+ msg = USE_SCENE_HOTSPOT;
+ break;
+ case CURSOR_TALK:
+ msg = TALK_SCENE_HOTSPOT;
+ break;
+ case 0x1000:
+ msg = SPECIAL_SCENE_HOTSPOT;
+ break;
+ default:
+ msg = DEFAULT_SCENE_HOTSPOT;
+ break;
+ }
- GUIErrorMessage(msg);
+ GUIErrorMessage(msg);
+ }
}
bool SceneItem::contains(const Common::Point &pt) {
@@ -1760,6 +1774,58 @@ void SceneItem::display(const Common::String &msg) {
SET_EXT_FGCOLOR, 13, LIST_END);
}
+void SceneItem::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
+ setBounds(ys, xe, ye, xs);
+ _resNum = resnum;
+ _lookLineNum = lookLineNum;
+ _useLineNum = useLineNum;
+ _talkLineNum = -1;
+ g_globals->_sceneItems.addItems(this, NULL);
+}
+
+void SceneItem::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ setBounds(bounds);
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ g_globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ g_globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ g_globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ g_globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void SceneItem::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
+ _sceneRegionId = sceneRegionId;
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ // Handle adding hotspot to scene items list as necessary
+ switch (mode) {
+ case 2:
+ GLOBALS._sceneItems.push_front(this);
+ break;
+ case 3:
+ break;
+ default:
+ GLOBALS._sceneItems.push_back(this);
+ break;
+ }
+}
+
/*--------------------------------------------------------------------------*/
bool SceneHotspot::startAction(CursorType action, Event &event) {