diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/fullpipe/constants.h | 5 | ||||
-rw-r--r-- | engines/fullpipe/scenes/scene32.cpp | 35 |
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() { |