aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohndoe1232015-12-07 13:37:43 +0100
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commitc6f2c6ba4eb013119597399e04b58435fe70bfab (patch)
treea39c7891225de428e3c9214de181afd3a1170b68
parent88e2b3fd9ee11ac724a676e8496e36691551e1c8 (diff)
downloadscummvm-rg350-c6f2c6ba4eb013119597399e04b58435fe70bfab.tar.gz
scummvm-rg350-c6f2c6ba4eb013119597399e04b58435fe70bfab.tar.bz2
scummvm-rg350-c6f2c6ba4eb013119597399e04b58435fe70bfab.zip
ILLUSIONS: BBDOU: Implement special code 16000F
-rw-r--r--engines/illusions/bbdou/bbdou_cursor.cpp2
-rw-r--r--engines/illusions/bbdou/bbdou_specialcode.cpp14
-rw-r--r--engines/illusions/bbdou/bbdou_specialcode.h1
3 files changed, 16 insertions, 1 deletions
diff --git a/engines/illusions/bbdou/bbdou_cursor.cpp b/engines/illusions/bbdou/bbdou_cursor.cpp
index 61422a8e68..090c80946b 100644
--- a/engines/illusions/bbdou/bbdou_cursor.cpp
+++ b/engines/illusions/bbdou/bbdou_cursor.cpp
@@ -46,7 +46,7 @@ void BbdouCursor::init(uint32 objectId, uint32 progResKeywordId) {
_vm->_controls->placeActor(0x50001, pos, 0x6000C, objectId, 0);
Control *control = _vm->_dict->getObjectControl(objectId);
- //control->_actor->setControlRoutine(new Common::Functor2Mem<Control*, uint32, void, BbdouCursor>(this, &BbdouCursor::actorControlRoutine1));
+ // TODO? control->_actor->setControlRoutine(new Common::Functor2Mem<Control*, uint32, void, BbdouCursor>(this, &BbdouCursor::actorControlRoutine1));
control->_flags |= 8;
_data._mode = 1;
diff --git a/engines/illusions/bbdou/bbdou_specialcode.cpp b/engines/illusions/bbdou/bbdou_specialcode.cpp
index b10b8d287a..db03cb8eb4 100644
--- a/engines/illusions/bbdou/bbdou_specialcode.cpp
+++ b/engines/illusions/bbdou/bbdou_specialcode.cpp
@@ -131,6 +131,7 @@ void BbdouSpecialCode::init() {
SPECIAL(0x0016000A, spcAddCursorSequence);
SPECIAL(0x0016000B, spcCursorStartHoldingObjectId);
SPECIAL(0x0016000C, spcCursorStopHoldingObjectId);
+ SPECIAL(0x0016000F, spcSetCursorState);
SPECIAL(0x00160013, spcInitBubble);
SPECIAL(0x00160014, spcSetupBubble);
SPECIAL(0x00160015, spcSetObjectInteractMode);
@@ -205,6 +206,18 @@ void BbdouSpecialCode::spcCursorStopHoldingObjectId(OpCall &opCall) {
_vm->notifyThreadId(opCall._threadId);
}
+void BbdouSpecialCode::spcSetCursorState(OpCall &opCall) {
+ ARG_UINT32(objectId);
+ ARG_UINT32(newState);
+ _cursor->_data._item10._field0 = newState;
+ _cursor->clearCursorDataField14();
+ if (newState == 5)
+ setCursorControlRoutine(objectId, 1);
+ else
+ setCursorControlRoutine(objectId, 0);
+ _vm->notifyThreadId(opCall._threadId);
+}
+
void BbdouSpecialCode::spcInitBubble(OpCall &opCall) {
_bubble->init();
_vm->notifyThreadId(opCall._threadId);
@@ -271,6 +284,7 @@ void BbdouSpecialCode::spcCloseInventory(OpCall &opCall) {
void BbdouSpecialCode::spcResetCursor(OpCall &opCall) {
ARG_UINT32(objectId);
_cursor->reset(objectId);
+ setCursorControlRoutine(objectId, 0);
_vm->notifyThreadId(opCall._threadId);
}
diff --git a/engines/illusions/bbdou/bbdou_specialcode.h b/engines/illusions/bbdou/bbdou_specialcode.h
index 6ffde37072..762aff1de0 100644
--- a/engines/illusions/bbdou/bbdou_specialcode.h
+++ b/engines/illusions/bbdou/bbdou_specialcode.h
@@ -108,6 +108,7 @@ public:
void spcAddCursorSequence(OpCall &opCall);
void spcCursorStartHoldingObjectId(OpCall &opCall);
void spcCursorStopHoldingObjectId(OpCall &opCall);
+ void spcSetCursorState(OpCall &opCall);
void spcInitBubble(OpCall &opCall);
void spcSetupBubble(OpCall &opCall);
void spcSetObjectInteractMode(OpCall &opCall);