aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/illusions/illusions_duckman.cpp9
-rw-r--r--engines/illusions/illusions_duckman.h1
-rw-r--r--engines/illusions/sequenceopcodes.cpp7
-rw-r--r--engines/illusions/sequenceopcodes.h1
4 files changed, 18 insertions, 0 deletions
diff --git a/engines/illusions/illusions_duckman.cpp b/engines/illusions/illusions_duckman.cpp
index 135bd0b8c7..9f67d6bb93 100644
--- a/engines/illusions/illusions_duckman.cpp
+++ b/engines/illusions/illusions_duckman.cpp
@@ -1060,6 +1060,7 @@ typedef Common::Functor1Mem<OpCall&, void, IllusionsEngine_Duckman> SpecialCodeF
void IllusionsEngine_Duckman::initSpecialCode() {
SPECIAL(0x00160002, spcSetCursorHandMode);
SPECIAL(0x00160005, spcOpenInventory);
+ SPECIAL(0x00160010, spcCenterNewspaper);
SPECIAL(0x00160014, spcUpdateObject272Sequence);
SPECIAL(0x0016001C, spcSetCursorInventoryMode);
}
@@ -1085,6 +1086,14 @@ void IllusionsEngine_Duckman::spcOpenInventory(OpCall &opCall) {
notifyThreadId(opCall._threadId);
}
+void IllusionsEngine_Duckman::spcCenterNewspaper(OpCall &opCall) {
+ Control *control = getObjectControl(0x40017);
+ control->_flags |= 8;
+ control->_actor->_position.x = 160;
+ control->_actor->_position.y = 100;
+ notifyThreadId(opCall._threadId);
+}
+
void IllusionsEngine_Duckman::spcSetCursorInventoryMode(OpCall &opCall) {
ARG_BYTE(mode);
ARG_BYTE(value);
diff --git a/engines/illusions/illusions_duckman.h b/engines/illusions/illusions_duckman.h
index 56e6b47a86..3b369b9b75 100644
--- a/engines/illusions/illusions_duckman.h
+++ b/engines/illusions/illusions_duckman.h
@@ -194,6 +194,7 @@ public:
void runSpecialCode(uint32 specialCodeId, OpCall &opCall);
void spcSetCursorHandMode(OpCall &opCall);
void spcOpenInventory(OpCall &opCall);
+ void spcCenterNewspaper(OpCall &opCall);
void spcSetCursorInventoryMode(OpCall &opCall);
void spcUpdateObject272Sequence(OpCall &opCall);
diff --git a/engines/illusions/sequenceopcodes.cpp b/engines/illusions/sequenceopcodes.cpp
index 92b4e128d6..d508eeac20 100644
--- a/engines/illusions/sequenceopcodes.cpp
+++ b/engines/illusions/sequenceopcodes.cpp
@@ -75,6 +75,7 @@ void SequenceOpcodes::initOpcodes() {
OPCODE(17, opDisappearActor);
OPCODE(18, opAppearForeignActor);
OPCODE(19, opDisappearForeignActor);
+ OPCODE(20, opSetNamedPointPosition);
OPCODE(21, opMoveDelta);
OPCODE(25, opFaceActor);
OPCODE(28, opNotifyThreadId1);
@@ -251,6 +252,12 @@ void SequenceOpcodes::opDisappearForeignActor(Control *control, OpCall &opCall)
foreignControl->disappearActor();
}
+void SequenceOpcodes::opSetNamedPointPosition(Control *control, OpCall &opCall) {
+ ARG_SKIP(2);
+ ARG_UINT32(namedPointId);
+ control->_actor->_position = _vm->getNamedPointPosition(namedPointId);
+}
+
void SequenceOpcodes::opMoveDelta(Control *control, OpCall &opCall) {
ARG_SKIP(2);
ARG_INT16(deltaX);
diff --git a/engines/illusions/sequenceopcodes.h b/engines/illusions/sequenceopcodes.h
index 384507e0fa..48241e11b1 100644
--- a/engines/illusions/sequenceopcodes.h
+++ b/engines/illusions/sequenceopcodes.h
@@ -63,6 +63,7 @@ protected:
void opDisappearActor(Control *control, OpCall &opCall);
void opAppearForeignActor(Control *control, OpCall &opCall);
void opDisappearForeignActor(Control *control, OpCall &opCall);
+ void opSetNamedPointPosition(Control *control, OpCall &opCall);
void opMoveDelta(Control *control, OpCall &opCall);
void opFaceActor(Control *control, OpCall &opCall);
void opNotifyThreadId1(Control *control, OpCall &opCall);