diff options
Diffstat (limited to 'engines/illusions/duckman/duckman_specialcode.cpp')
-rw-r--r-- | engines/illusions/duckman/duckman_specialcode.cpp | 29 |
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); |