aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/fullpipe/constants.h5
-rw-r--r--engines/fullpipe/scenes/scene32.cpp35
2 files changed, 39 insertions, 1 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index f0d978be9d..3df6ab33f3 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -1071,6 +1071,7 @@ namespace Fullpipe {
#define MSG_SC32_TRUBATOBACK 5181
#define MSG_SC32_TRUBATOFRONT 5180
#define MSG_SC32_TRYSIT 2294
+#define MV_CTS_DEFAULT 4299
#define MV_FLG_CYCLEL 2262
#define MV_FLG_CYCLER 2266
#define MV_FLG_STARTL 2258
@@ -1082,10 +1083,12 @@ namespace Fullpipe {
#define MV_TSTO_FLOW 2657
#define PIC_SC32_LADDER 4296
#define PIC_SC32_RTRUBA 2292
+#define QU_CTS_BACK 2415
#define QU_CTS_GROW 2416
#define QU_CTS_GROWMAN 2417
#define QU_KBK32_GO 4977
#define QU_KBK32_START 4982
+#define QU_KDK_DRIZZLE 4301
#define QU_SC32_ENTERLIFT 2827
#define QU_SC32_EXITLIFT 2828
#define QU_SC32_FALLHANDLE 5351
@@ -1093,6 +1096,8 @@ namespace Fullpipe {
#define QU_SC32_SHOWHANDLE 2399
#define ST_BTN32_OFF 5349
#define ST_BTN32_ON 5350
+#define ST_CTS_EMPTY 2269
+#define ST_CTS_GROWUP 2467
#define ST_FLG_LEFT 2260
#define ST_FLG_NORM 2259
#define ST_FLG_RIGHT 2264
diff --git a/engines/fullpipe/scenes/scene32.cpp b/engines/fullpipe/scenes/scene32.cpp
index 4f2b78feff..b73dd99d7c 100644
--- a/engines/fullpipe/scenes/scene32.cpp
+++ b/engines/fullpipe/scenes/scene32.cpp
@@ -122,7 +122,40 @@ void sceneHandler32_startCactus() {
}
void sceneHandler32_spin(ExCommand *cmd) {
- warning("STUB: sceneHandler32_spin(cmd)");
+ MessageQueue *mq = g_fp->_globalMessageQueueList->getMessageQueueById(cmd->_parId);
+
+ if (!mq || !mq->getCount() <= 0)
+ return;
+
+ ExCommand *ex = mq->getExCommandByIndex(0);
+ ExCommand *newex;
+
+ if ((g_vars->scene32_cactus->_movement && g_vars->scene32_cactus->_movement->_id == MV_CTS_DEFAULT)
+ || g_vars->scene32_cactus->_statics->_staticsId == ST_CTS_GROWUP) {
+ for (int i = 0; i < 12; i++) {
+ newex = ex->createClone();
+ newex->_excFlags |= 2;
+ mq->insertExCommandAt(1, newex);
+ }
+
+ g_vars->scene32_cactus->changeStatics2(ST_CTS_GROWUP);
+
+ chainQueue(QU_CTS_BACK, 1);
+
+ g_vars->scene32_var10 = 0;
+
+ return;
+ }
+
+ if (g_vars->scene32_cactus->_statics->_staticsId == ST_CTS_EMPTY && g_vars->scene32_var08 < 0) {
+ for (int i = 0; i < 2; i++) {
+ newex = ex->createClone();
+ newex->_excFlags |= 2;
+ mq->insertExCommandAt(1, newex);
+ }
+
+ chainQueue(QU_KDK_DRIZZLE, 0);
+ }
}
void sceneHandler32_startFlagLeft() {