aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/duckman/duckman_specialcode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/illusions/duckman/duckman_specialcode.cpp')
-rw-r--r--engines/illusions/duckman/duckman_specialcode.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/engines/illusions/duckman/duckman_specialcode.cpp b/engines/illusions/duckman/duckman_specialcode.cpp
index 6b67f1214f..b0b859c30e 100644
--- a/engines/illusions/duckman/duckman_specialcode.cpp
+++ b/engines/illusions/duckman/duckman_specialcode.cpp
@@ -41,6 +41,8 @@ DuckmanSpecialCode::DuckmanSpecialCode(IllusionsEngine_Duckman *vm)
_propertyTimers = new PropertyTimers(_vm);
_inventory = new DuckmanInventory(_vm);
+ _wasCursorHoldingElvisPoster = false;
+ _counter = 0;
}
DuckmanSpecialCode::~DuckmanSpecialCode() {
@@ -69,6 +71,7 @@ void DuckmanSpecialCode::init() {
SPECIAL(0x00160012, spcStopScreenShaker);
SPECIAL(0x00160013, spcIncrCounter);
SPECIAL(0x00160014, spcUpdateObject272Sequence);
+ SPECIAL(0x0016001A, spcHoldGlowingElvisPoster);
SPECIAL(0x0016001C, spcSetCursorInventoryMode);
SPECIAL(0x0016001D, spcCenterCurrentScreenText);
SPECIAL(0x0016001E, spcSetDefaultTextCoords);
@@ -283,6 +286,32 @@ void DuckmanSpecialCode::spcUpdateObject272Sequence(OpCall &opCall) {
control->startSequenceActor(sequenceId, 2, opCall._threadId);
}
+void DuckmanSpecialCode::spcHoldGlowingElvisPoster(OpCall &opCall) {
+ const uint32 kPosterObjectId = 0x40072;
+ const uint32 kPosterSequenceId = 0x60034;
+ ARG_BYTE(mode);
+ switch (mode) {
+ case 0:
+ if (_vm->_cursor._objectId == kPosterObjectId) {
+ _wasCursorHoldingElvisPoster = true;
+ _inventory->addInventoryItem(_vm->_cursor._objectId);
+ _vm->stopCursorHoldingObject();
+ } else {
+ _wasCursorHoldingElvisPoster = false;
+ }
+ break;
+ case 1:
+ if (_wasCursorHoldingElvisPoster) {
+ _inventory->clearInventorySlot(kPosterObjectId);
+ _vm->_cursor._objectId = kPosterObjectId;
+ _vm->_cursor._sequenceId2 = kPosterSequenceId;
+ _vm->_cursor._field14[_vm->_cursor._actorIndex - 1] = true;
+ }
+ break;
+ }
+ _vm->notifyThreadId(opCall._threadId);
+}
+
void DuckmanSpecialCode::spcSetCursorInventoryMode(OpCall &opCall) {
ARG_BYTE(mode);
ARG_BYTE(value);