From a1b7a36cdd138a96294cd85ae1e910061d77d3d5 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Wed, 12 Feb 2014 22:00:04 +0200 Subject: FULLPIPE: Implement sceneHandler09() --- engines/fullpipe/constants.h | 11 ++ engines/fullpipe/scenes.cpp | 2 + engines/fullpipe/scenes.h | 2 + engines/fullpipe/scenes/scene09.cpp | 193 ++++++++++++++++++++++++++++++++++++ 4 files changed, 208 insertions(+) (limited to 'engines/fullpipe') diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index 84ef20d548..05c917f706 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -591,10 +591,21 @@ namespace Fullpipe { #define ANI_GRIT_9 2719 #define ANI_PLEVATEL 919 #define ANI_VISUNCHIK 904 +#define MSG_SC9_EATBALL 941 +#define MSG_SC9_FLOWN 943 +#define MSG_SC9_FROMLADDER 4207 +#define MSG_SC9_PLVCLICK 965 +#define MSG_SC9_SETSCROLL 964 +#define MSG_SC9_SHOWBALL 936 +#define MSG_SC9_STARTTIOTIA 4942 +#define MSG_SC9_TOLADDER 4206 +#define MV_MAN9_SHOOT 922 #define MV_VSN_CYCLE2 2987 #define PIC_SC9_LADDER_R 2700 +#define SND_9_018 4200 #define ST_GRT9_GRIT 2722 #define ST_GRT9_NORM 2721 +#define ST_VSN_NORMAL 906 // Scene 10 #define ANI_GUM 978 diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index fe1ac177d8..a59269d5c6 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -170,6 +170,8 @@ Vars::Vars() { scene09_numMovingHangers = 0; scene09_var13 = 0; scene09_var15 = 0; + scene09_var17 = 0; + scene09_var19 = 0; scene10_gum = 0; scene10_packet = 0; diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h index a30f058187..2352efb872 100644 --- a/engines/fullpipe/scenes.h +++ b/engines/fullpipe/scenes.h @@ -361,6 +361,8 @@ public: int scene09_numMovingHangers; int scene09_var13; int scene09_var15; + int scene09_var17; + int scene09_var19; StaticANIObject *scene10_gum; StaticANIObject *scene10_packet; diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp index 34d976b836..1796d77b2d 100644 --- a/engines/fullpipe/scenes/scene09.cpp +++ b/engines/fullpipe/scenes/scene09.cpp @@ -237,4 +237,197 @@ int scene09_updateCursor() { return g_fp->_cursorId; } +void sceneHandler09_winArcade() { + warning("STUB: sceneHandler09_winArcade()"); +} + +void sceneHandler09_startAuntie() { + warning("STUB: sceneHandler09_startAuntie()"); +} + +void sceneHandler09_spitterClick() { + warning("STUB: sceneHandler09_spitterClick()"); +} + +void sceneHandler09_eatBall() { + warning("STUB: sceneHandler09_eatBall()"); +} + +void sceneHandler09_showBall() { + warning("STUB: sceneHandler09_showBall()"); +} + +void sceneHandler09_cycleHangers() { + warning("STUB: sceneHandler09_cycleHangers()"); +} + +void sceneHandler09_limitHangerPhase() { + warning("STUB: sceneHandler09_limitHangerPhase()"); +} + +void sceneHandler09_checkHangerCollide() { + warning("STUB: sceneHandler09_checkHangerCollide()"); +} + +void sceneHandler09_hangerStartCycle() { + warning("STUB: sceneHandler09_hangerStartCycle()"); +} + +int sceneHandler09(ExCommand *cmd) { + if (cmd->_messageKind != 17) + return 0; + + switch (cmd->_messageNum) { + case MSG_CMN_WINARCADE: + sceneHandler09_winArcade(); + break; + + case MSG_SC9_STARTTIOTIA: + sceneHandler09_startAuntie(); + break; + + case MSG_SC9_FROMLADDER: + getCurrSceneSc2MotionController()->setEnabled(); + getGameLoaderInteractionController()->enableFlag24(); + + g_vars->scene09_var09 = 0; + break; + + case MSG_SC9_TOLADDER: + getCurrSceneSc2MotionController()->clearEnabled(); + getGameLoaderInteractionController()->disableFlag24(); + + g_vars->scene09_var09 = 1; + break; + + case MSG_SC9_PLVCLICK: + sceneHandler09_spitterClick(); + break; + + case MSG_SC9_FLOWN: + g_vars->scene09_var08 = 0; + break; + + case MSG_SC9_EATBALL: + sceneHandler09_eatBall(); + break; + + case MSG_SC9_SHOWBALL: + sceneHandler09_showBall(); + break; + + case 33: + { + int res = 0; + + if (g_fp->_aniMan2) { + int x = g_fp->_aniMan2->_ox; + + g_vars->scene09_var02 = g_fp->_aniMan2->_oy; + + if (x < g_fp->_sceneRect.left + 200) + g_fp->_currentScene->_x = x - g_fp->_sceneRect.left - 300; + + if (x > g_fp->_sceneRect.right - 200) + g_fp->_currentScene->_x = x - g_fp->_sceneRect.right + 300; + + res = 1; + } else { + if (g_fp->_aniMan->_movement && g_fp->_aniMan->_movement->_id != MV_MAN9_SHOOT) + g_fp->_aniMan2 = g_fp->_aniMan; + } + + sceneHandler09_cycleHangers(); + sceneHandler09_limitHangerPhase(); + sceneHandler09_checkHangerCollide(); + + if (g_vars->scene09_var10 >= 0) + sceneHandler09_hangerStartCycle(); + + if (!g_vars->scene09_var17) + g_fp->_behaviorManager->updateBehaviors(); + + g_fp->startSceneTrack(); + + return res; + } + + case 30: + if (g_vars->scene09_var10 >= 0) { + if (ABS(g_vars->scene09_hangers[g_vars->scene09_var10]->phase) < 15) { + g_vars->scene09_hangers[g_vars->scene09_var10]->ani->_callback2 = 0; + g_vars->scene09_hangers[g_vars->scene09_var10]->ani->changeStatics2(ST_VSN_NORMAL); + } + } + + g_vars->scene09_var10 = -1; + + break; + + case 29: + { + StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(g_fp->_sceneRect.left + cmd->_x, g_fp->_sceneRect.top + cmd->_y); + + if (ani) { + if (ani->_id == ANI_PLEVATEL) { + sceneHandler09_spitterClick(); + break; + } + + if (ani->_id == ANI_VISUNCHIK) { + if (g_vars->scene09_numMovingHangers > 0) { + int hng = 0; + + while (g_vars->scene09_hangers[hng]->ani != ani) { + ++hng; + + if (hng >= g_vars->scene09_numMovingHangers) + break; + } + + g_vars->scene09_var10 = hng; + g_vars->scene09_var11 = g_vars->scene09_hangers[hng]->phase; + g_vars->scene09_var12 = g_vars->scene09_hangers[hng]->phase; + + g_vars->scene09_var19 = cmd->_y; + + if (!g_vars->scene09_hangers[hng]->ani->_movement || g_vars->scene09_hangers[hng]->ani->_movement->_id != MV_VSN_CYCLE2) { + g_vars->scene09_hangers[hng]->ani->changeStatics2(ST_VSN_NORMAL); + g_vars->scene09_hangers[hng]->ani->startAnim(MV_VSN_CYCLE2, 0, -1); + g_vars->scene09_hangers[hng]->ani->_callback2 = 0; + } + + ExCommand *ex = new ExCommand(0, 35, SND_9_018, 0, 0, 0, 1, 0, 0, 0); + + ex->_field_14 = 1; + ex->_excFlags |= 2; + ex->postMessage(); + } + + break; + } + } + + if (g_vars->scene09_var09 && g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY) == PIC_SC9_LADDER_R + && !cmd->_keyCode && !g_fp->_aniMan->_movement) { + handleObjectInteraction(g_fp->_aniMan, g_fp->_currentScene->getPictureObjectById(PIC_SC9_LADDER_R, 0), 0); + } + + if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode)) { + int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); + PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); + + if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) { + if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) + g_fp->processArcade(cmd); + } + } + + break; + } + } + + return 0; +} + } // End of namespace Fullpipe -- cgit v1.2.3