diff options
-rw-r--r-- | engines/fullpipe/constants.h | 8 | ||||
-rw-r--r-- | engines/fullpipe/scenes.cpp | 2 | ||||
-rw-r--r-- | engines/fullpipe/scenes.h | 2 | ||||
-rw-r--r-- | engines/fullpipe/scenes/scene15.cpp | 109 |
4 files changed, 121 insertions, 0 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index b7edab6019..e2dff762ea 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -503,10 +503,18 @@ namespace Fullpipe { // Scene 15 #define ANI_BOOT_15 4779 #define ANI_GRANDMA_ASS 1265 +#define MSG_SC15_ASSDRYG 4755 +#define MSG_SC15_LADDERTOBACK 3259 +#define MSG_SC15_PULL 2940 +#define MSG_SC15_STOPCHANTING 4753 +#define PIC_SC15_DTRUBA 1263 #define PIC_SC15_LADDER 3253 #define PIC_SC15_LTRUBA 1261 #define QU_SC15_ENTERLIFT 2811 #define QU_SC15_EXITLIFT 2812 +#define SND_15_001 3798 +#define SND_15_006 3808 +#define SND_15_011 4754 #define ST_GMS_BOOT 1270 #define ST_GMS_BOOTLESS2 3316 diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index 4a378101e9..63d6d0ab4a 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -191,6 +191,8 @@ Vars::Vars() { scene15_var03 = 0; scene15_var04 = 0; scene15_var05 = 0; + scene15_var06 = 0; + scene15_var07 = 0; scene15_plusminus = 0; scene15_ladder = 0; scene15_boot = 0; diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h index 4031b472b1..e9c9ada637 100644 --- a/engines/fullpipe/scenes.h +++ b/engines/fullpipe/scenes.h @@ -243,6 +243,8 @@ public: int scene15_var03; int scene15_var04; int scene15_var05; + int scene15_var06; + int scene15_var07; StaticANIObject *scene15_plusminus; PictureObject *scene15_ladder; StaticANIObject *scene15_boot; diff --git a/engines/fullpipe/scenes/scene15.cpp b/engines/fullpipe/scenes/scene15.cpp index 56a496ed00..04c3466e3c 100644 --- a/engines/fullpipe/scenes/scene15.cpp +++ b/engines/fullpipe/scenes/scene15.cpp @@ -104,4 +104,113 @@ int scene15_updateCursor() { return g_fp->_cursorId; } +int sceneHandler15(ExCommand *cmd) { + if (cmd->_messageKind != 17) + return 0; + + switch(cmd->_messageNum) { + case MSG_LIFT_CLOSEDOOR: + g_fp->lift_closedoorSeq(); + break; + + case MSG_LIFT_EXITLIFT: + g_fp->lift_exitSeq(cmd); + break; + + case MSG_LIFT_STARTEXITQUEUE: + g_fp->lift_startExitQueue(); + break; + + case MSG_SC4_HIDEBOOT: + g_vars->scene15_boot->_flags &= 0xFFFB; + break; + + case MSG_SC15_STOPCHANTING: + g_fp->stopAllSoundInstances(SND_15_001); + + g_vars->scene15_var05 = 120; + break; + + case MSG_SC15_ASSDRYG: + if (g_fp->_rnd->getRandomNumber(1)) + g_fp->playSound(SND_15_011, 0); + else + g_fp->playSound(SND_15_006, 0); + + break; + + case MSG_SC15_LADDERTOBACK: + g_vars->scene15_ladder->_priority = 60; + break; + + case MSG_LIFT_GO: + g_fp->lift_goAnimation(); + break; + + case MSG_LIFT_CLICKBUTTON: + g_fp->lift_animation3(); + break; + + case MSG_SC15_PULL: + if (g_vars->scene15_plusminus->_statics->_staticsId == ST_PMS_MINUS) + g_vars->scene15_plusminus->_statics = g_vars->scene15_plusminus->getStaticsById(ST_PMS_PLUS); + else + g_vars->scene15_plusminus->_statics = g_vars->scene15_plusminus->getStaticsById(ST_PMS_MINUS); + + break; + + case 64: + g_fp->lift_sub05(cmd); + break; + + case 29: + { + if (g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY) == PIC_SC15_LADDER) { + handleObjectInteraction(g_fp->_aniMan, g_fp->_currentScene->getPictureObjectById(PIC_SC15_DTRUBA, 0), cmd->_keyCode); + cmd->_messageKind = 0; + + return 0; + } + + StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); + + if (ani && ani->_id == ANI_LIFTBUTTON) { + g_fp->lift_sub1(ani); + + cmd->_messageKind = 0; + } + break; + } + + case 30: + // nop + break; + + case 33: + if (g_fp->_aniMan2) { + int x = g_fp->_aniMan2->_ox; + + g_vars->scene15_var06 = x; + g_vars->scene15_var07 = g_fp->_aniMan2->_oy; + + if (x < g_fp->_sceneRect.left + g_vars->scene15_var01) + g_fp->_currentScene->_x = x - g_vars->scene15_var03 - g_fp->_sceneRect.left; + + if (x > g_fp->_sceneRect.right - g_vars->scene15_var01) + g_fp->_currentScene->_x = x + g_vars->scene15_var03 - g_fp->_sceneRect.right; + } + + if (g_vars->scene15_var05 > 0) { + g_vars->scene15_var05--; + + if (!g_vars->scene15_var05) + g_fp->playSound(SND_15_001, 1); + } + + g_fp->_behaviorManager->updateBehaviors(); + } + + return 0; +} + } // End of namespace Fullpipe |