aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/fullpipe/constants.h1
-rw-r--r--engines/fullpipe/scenes/scene34.cpp27
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;
}