diff options
-rw-r--r-- | engines/fullpipe/constants.h | 1 | ||||
-rw-r--r-- | engines/fullpipe/scenes/scene34.cpp | 27 |
2 files changed, 25 insertions, 3 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index 492c6f413d..5cb6668c61 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -1156,6 +1156,7 @@ namespace Fullpipe { #define MSG_SC34_UNCLIMB 2492 #define QU_SC34_ENTERLIFT 2819 #define QU_SC34_EXITLIFT 2820 +#define QU_SC34_FROMCACTUS 4312 #define QU_CTS34_FALLEFT 4316 #define QU_CTS34_FALLRIGHT 4317 #define ST_CTS34_EMPTY 2383 diff --git a/engines/fullpipe/scenes/scene34.cpp b/engines/fullpipe/scenes/scene34.cpp index 0a76c8d851..ffb4ffab82 100644 --- a/engines/fullpipe/scenes/scene34.cpp +++ b/engines/fullpipe/scenes/scene34.cpp @@ -124,8 +124,29 @@ void sceneHandler34_sub04() { warning("STUB: sceneHandler34_sub04()"); } -void sceneHandler34_sub03(ExCommand *cmd) { - warning("STUB: sceneHandler34_sub03(cmd)"); +void sceneHandler34_fromCactus(ExCommand *cmd) { + if (g_fp->_aniMan->_movement || g_vars->scene34_cactus->_movement || (g_fp->_aniMan->_flags & 0x100)) { + cmd->_messageKind = 0; + + return; + } + + MessageQueue *mq = new MessageQueue(g_fp->_currentScene->getMessageQueueById(QU_SC34_FROMCACTUS), 0, 0); + + ExCommand *ex = new ExCommand(ANI_MAN, 34, 256, 0, 0, 0, 1, 0, 0, 0); + + ex->_messageNum = 0; + ex->_excFlags |= 3; + ex->_field_14 = 256; + mq->addExCommandToEnd(ex); + + ex = cmd->createClone(); + mq->addExCommandToEnd(ex); + + mq->setFlags(mq->getFlags() | 1); + mq->chain(0); + + g_fp->_aniMan->_flags |= 1; } void sceneHandler34_sub02(ExCommand *cmd) { @@ -269,7 +290,7 @@ int sceneHandler34(ExCommand *cmd) { } if (g_vars->scene34_var07) { - sceneHandler34_sub03(cmd); + sceneHandler34_fromCactus(cmd); break; } |