diff options
Diffstat (limited to 'engines/fullpipe')
-rw-r--r-- | engines/fullpipe/constants.h | 13 | ||||
-rw-r--r-- | engines/fullpipe/gameloader.cpp | 4 | ||||
-rw-r--r-- | engines/fullpipe/gameloader.h | 1 | ||||
-rw-r--r-- | engines/fullpipe/scenes.cpp | 14 | ||||
-rw-r--r-- | engines/fullpipe/scenes.h | 21 | ||||
-rw-r--r-- | engines/fullpipe/scenes/scene06.cpp | 309 |
6 files changed, 359 insertions, 3 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index 7abfd8aa0e..f36006c25c 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -113,10 +113,22 @@ namespace Fullpipe { #define MSG_SC5_MAKEOTMFEEDBACK 1169 #define MSG_SC5_SHOWHANDLE 918 #define MSG_SC5_TESTLUK 914 +#define MSG_SC6_BTNPUSH 1017 +#define MSG_SC6_ENABLEDROPS 687 +#define MSG_SC6_INSTHANDLE 1012 +#define MSG_SC6_JUMPBK 2900 +#define MSG_SC6_JUMPFW 2901 +#define MSG_SC6_RESTORESCROLL 2906 +#define MSG_SC6_SHOWNEXTBALL 790 +#define MSG_SC6_STARTDROPS 2897 +#define MSG_SC6_TAKEBALL 682 +#define MSG_SC6_TESTNUMBALLS 2904 +#define MSG_SC6_UTRUBACLICK 1105 #define MSG_GOTOLADDER 618 #define MSG_SHAKEBOTTLE 584 #define MSG_SHOOTKOZAW 557 #define MSG_SHOWCOIN 1033 +#define MSG_SPINHANDLE 2398 #define MSG_STARTHAND 612 #define MSG_TAKEBOTTLE 614 #define MSG_TAKEKOZAW 611 @@ -354,6 +366,7 @@ namespace Fullpipe { #define ST_MAN_SIT 1164 #define ST_MAN_STANDLADDER 453 #define ST_MAN_UP 449 +#define ST_MAN6_BALL 2688 #define ST_NBL_NORM 1076 #define ST_OTM_BOX_LEFT 429 #define ST_OTM_GLS_LEFT 421 diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp index e130337001..0b667124ef 100644 --- a/engines/fullpipe/gameloader.cpp +++ b/engines/fullpipe/gameloader.cpp @@ -510,4 +510,8 @@ InputController *FullpipeEngine::getGameLoaderInputController() { return 0; } +MotionController *getCurrSceneSc2MotionController() { + return getSc2MctlCompoundBySceneId(g_fullpipe->_currentScene->_sceneId); +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h index 4f5462671d..074537500c 100644 --- a/engines/fullpipe/gameloader.h +++ b/engines/fullpipe/gameloader.h @@ -111,6 +111,7 @@ class GameLoader : public CObject { Inventory2 *getGameLoaderInventory(); InteractionController *getGameLoaderInteractionController(); MctlCompound *getSc2MctlCompoundBySceneId(int16 sceneId); +MotionController *getCurrSceneSc2MotionController(); } // End of namespace Fullpipe diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index 74beb1cdb1..95786759e2 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -110,6 +110,10 @@ Vars::Vars() { scene05_handleFlipper = 0; scene05_floatersTicker = 0; + scene06_var01 = 0; + scene06_var02 = 0; + scene06_var03 = 0; + scene06_var04 = 0; scene06_mumsy = 0; scene06_var06 = 0; scene06_invHandle = 0; @@ -124,6 +128,16 @@ Vars::Vars() { scene06_var13 = 0; scene06_var14 = 0; scene06_var15 = 1; + scene06_var16 = 0; + scene06_var17 = 0; + scene06_var18 = 0; + scene06_sceneClickX = 0; + scene06_sceneClickY = 0; + scene06_mumsyPos = 0; + scene06_mumsyJumpBk = 0; + scene06_mumsyJumpFw = 0; + scene06_mumsyJumpBkPercent = 0; + scene06_mumsyJumpFwPercent = 0; selector = 0; } diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h index 7c1e338444..73ebb41682 100644 --- a/engines/fullpipe/scenes.h +++ b/engines/fullpipe/scenes.h @@ -25,8 +25,9 @@ namespace Fullpipe { +struct BehaviorEntryInfo; class StaticANIObject; - class MctlLadder; +class MctlLadder; int defaultUpdateCursor(); @@ -142,20 +143,34 @@ public: int scene05_floatersTicker; StaticANIObject *scene06_mumsy; + int scene06_var01; + int scene06_var02; + int scene06_var03; + int scene06_var04; int scene06_var06; StaticANIObject *scene06_invHandle; StaticANIObject *scene06_liftButton; StaticANIObject *scene06_ballDrop; int scene06_var07; int scene06_var08; - int scene06_var09; + StaticANIObject *scene06_var09; int scene06_var10; - int scene06_var11; + StaticANIObject *scene06_var11; Common::Array<StaticANIObject *> scene06_balls; int scene06_var12; int scene06_var13; int scene06_var14; int scene06_var15; + int scene06_var16; + int scene06_var17; + int scene06_var18; + int scene06_sceneClickX; + int scene06_sceneClickY; + int scene06_mumsyPos; + BehaviorEntryInfo *scene06_mumsyJumpBk; + BehaviorEntryInfo *scene06_mumsyJumpFw; + int scene06_mumsyJumpBkPercent; + int scene06_mumsyJumpFwPercent; PictureObject *selector; }; diff --git a/engines/fullpipe/scenes/scene06.cpp b/engines/fullpipe/scenes/scene06.cpp index f341216906..1ec6eddc1b 100644 --- a/engines/fullpipe/scenes/scene06.cpp +++ b/engines/fullpipe/scenes/scene06.cpp @@ -29,6 +29,11 @@ #include "fullpipe/scenes.h" #include "fullpipe/statics.h" #include "fullpipe/scene.h" +#include "fullpipe/messages.h" +#include "fullpipe/gameloader.h" +#include "fullpipe/behavior.h" +#include "fullpipe/motion.h" +#include "fullpipe/interaction.h" namespace Fullpipe { @@ -36,6 +41,83 @@ void sceneHandler06_setExits(Scene *sc) { warning("STUB: sceneHandler06_setExits()"); } +void sceneHandler06_winArcade() { + warning("STUB: sceneHandler06_winArcade()"); +} + +void sceneHandler06_enableDrops() { + warning("STUB: sceneHandler06_enableDrops()"); +} + +void sceneHandler06_sub01() { + warning("STUB: sceneHandler06_sub01()"); +} + +void sceneHandler06_spinHandle() { + warning("STUB: sceneHandler06_spinHandle()"); +} + +void sceneHandler06_uPipeClick() { + warning("STUB: sceneHandler06_uPipeClick()"); +} + +void sceneHandler06_buttonPush() { + warning("STUB: sceneHandler06_buttonPush()"); +} + +void sceneHandler06_showNextBall() { + warning("STUB: sceneHandler06_showNextBall()"); +} + +void sceneHandler06_installHandle() { + warning("STUB: sceneHandler06_installHandle()"); +} + +void sceneHandler06_takeBall() { + warning("STUB: sceneHandler06_takeBall()"); +} + +void sceneHandler06_sub02() { + warning("STUB: sceneHandler06_sub02()"); +} + +void sceneHandler06_throwBall() { + warning("STUB: sceneHandler06_throwBall()"); +} + +void sceneHandler06_sub03() { + warning("STUB: sceneHandler06_sub03()"); +} + +void sceneHandler06_sub04(int par) { + warning("STUB: sceneHandler06_sub04()"); +} + +void sceneHandler06_sub05() { + warning("STUB: sceneHandler06_sub05()"); +} + +void sceneHandler06_sub06() { + warning("STUB: sceneHandler06_sub06()"); +} + +void sceneHandler06_sub07() { + warning("STUB: sceneHandler06_sub07()"); +} + +void sceneHandler06_sub08() { + warning("STUB: sceneHandler06_sub08()"); +} + +void sceneHandler06_sub09() { + warning("STUB: sceneHandler06_sub09()"); +} + +void sceneHandler06_sub10() { + warning("STUB: sceneHandler06_sub10()"); +} + + void scene06_initScene(Scene *sc) { g_vars->scene06_mumsy = sc->getStaticANIObject1ById(ANI_MAMASHA, -1); g_vars->scene06_var06 = 0; @@ -85,4 +167,231 @@ void scene06_initScene(Scene *sc) { g_fullpipe->setArcadeOverlay(PIC_CSR_ARCADE2); } +int sceneHandler06(ExCommand *ex) { + if (ex->_messageKind != 17) + return 0; + + switch(ex->_messageNum) { + case MSG_LIFT_CLOSEDOOR: + g_fullpipe->lift_closedoorSeq(); + break; + + case MSG_LIFT_EXITLIFT: + g_fullpipe->lift_exitSeq(ex); + break; + + case MSG_CMN_WINARCADE: + sceneHandler06_winArcade(); + break; + + case MSG_LIFT_STARTEXITQUEUE: + g_fullpipe->lift_startExitQueue(); + break; + + case MSG_SC6_RESTORESCROLL: + g_fullpipe->_aniMan2 = g_fullpipe->_aniMan; + getCurrSceneSc2MotionController()->setEnabled(); + getGameLoaderInteractionController()->enableFlag24(); + sceneHandler06_setExits(g_fullpipe->_currentScene); + break; + + case MSG_SC6_STARTDROPS: + if (g_fullpipe->getObjectState(sO_BigMumsy) == g_fullpipe->getObjectEnumState(sO_BigMumsy, sO_IsSleeping)) + sceneHandler06_enableDrops(); + break; + + case MSG_SC6_TESTNUMBALLS: + g_vars->scene06_var16 = 0; + + if (g_vars->scene06_var13 < 5 || !g_vars->scene06_var07) + return 0; + + sceneHandler06_sub01(); + break; + + case MSG_SC6_JUMPFW: + ++g_vars->scene06_mumsyPos; + break; + + case MSG_SC6_JUMPBK: + --g_vars->scene06_mumsyPos; + break; + + case MSG_LIFT_CLICKBUTTON: + g_fullpipe->lift_animation3(); + break; + + case MSG_SPINHANDLE: + sceneHandler06_spinHandle(); + break; + + case MSG_LIFT_GO: + g_fullpipe->lift_goAnimation(); + break; + + case MSG_SC6_UTRUBACLICK: + sceneHandler06_uPipeClick(); + break; + + case MSG_SC6_BTNPUSH: + sceneHandler06_buttonPush(); + break; + + case MSG_SC6_SHOWNEXTBALL: + sceneHandler06_showNextBall(); + break; + + case MSG_SC6_INSTHANDLE: + sceneHandler06_installHandle(); + break; + + case MSG_SC6_ENABLEDROPS: + sceneHandler06_enableDrops(); + break; + + case 64: + g_fullpipe->lift_sub05(ex); + break; + + case MSG_SC6_TAKEBALL: + sceneHandler06_takeBall(); + break; + + case 30: + if (g_vars->scene06_var08) { + sceneHandler06_sub02(); + break; + } + + if (!g_vars->scene06_var07) { + // Do nothing + break; + } + break; + + case 29: + { + StaticANIObject *st = g_fullpipe->_currentScene->getStaticANIObjectAtPos(ex->_sceneClickX, ex->_sceneClickY); + + if (st) { + if (!g_vars->scene06_var07 && st->_id == ANI_LIFTBUTTON) { + g_fullpipe->lift_sub1(st); + ex->_messageKind = 0; + return 0; + } + + if (g_vars->scene06_var09 == st) { + if (g_vars->scene06_var12 == 1) + sceneHandler06_takeBall(); + + ex->_messageKind = 0; + } else if (g_vars->scene06_var10 && g_fullpipe->_aniMan == st && !g_fullpipe->_aniMan->_movement && g_fullpipe->_aniMan->_statics->_staticsId == ST_MAN6_BALL) { + g_vars->scene06_sceneClickX = ex->_sceneClickX; + g_vars->scene06_sceneClickY = ex->_sceneClickY; + + sceneHandler06_throwBall(); + } + } + + if (!st || !canInteractAny(g_fullpipe->_aniMan, st, ex->_keyCode)) { + int picId = g_fullpipe->_currentScene->getPictureObjectIdAtPos(ex->_sceneClickX, ex->_sceneClickY); + PictureObject *pic = g_fullpipe->_currentScene->getPictureObjectById(picId, 0); + + if (!pic || !canInteractAny(g_fullpipe->_aniMan, pic, ex->_keyCode)) { + if ((g_fullpipe->_sceneRect.right - ex->_sceneClickX < 47 + && g_fullpipe->_sceneRect.right < g_fullpipe->_sceneWidth - 1) + || (ex->_sceneClickX - g_fullpipe->_sceneRect.left < 47 && g_fullpipe->_sceneRect.left > 0)) { + g_fullpipe->processArcade(ex); + return 0; + } + } + } + } + + break; + + case 33: + { + int res = 0; + + if (g_fullpipe->_aniMan2) { + int ox = g_fullpipe->_aniMan2->_ox; + int oy = g_fullpipe->_aniMan2->_oy; + + g_vars->scene06_var01 = ox; + g_vars->scene06_var02 = oy; + + if (g_vars->scene06_var07 && oy <= 470 && ox >= 1088) { + if (ox < g_fullpipe->_sceneRect.left + 600) { + g_fullpipe->_currentScene->_x = ox - g_fullpipe->_sceneRect.left - 700; + ox = g_vars->scene06_var01; + } + + if (ox > g_fullpipe->_sceneRect.right - 50) + g_fullpipe->_currentScene->_x = ox - g_fullpipe->_sceneRect.right + 70; + } else { + if (ox < g_fullpipe->_sceneRect.left + 200) { + g_fullpipe->_currentScene->_x = ox - g_fullpipe->_sceneRect.left - 300; + ox = g_vars->scene06_var01; + } + + if (ox > g_fullpipe->_sceneRect.right - 200) + g_fullpipe->_currentScene->_x = ox - g_fullpipe->_sceneRect.right + 300; + } + + res = 1; + } + if (g_vars->scene06_var07) { + if (g_vars->scene06_mumsyPos > -3) + g_vars->scene06_mumsyJumpBk->_percent = g_vars->scene06_mumsyJumpBkPercent; + else + g_vars->scene06_mumsyJumpBk->_percent = 0; + + if (g_vars->scene06_mumsyPos < 4) + g_vars->scene06_mumsyJumpFw->_percent = g_vars->scene06_mumsyJumpFwPercent; + else + g_vars->scene06_mumsyJumpFw->_percent = 0; + + if (g_vars->scene06_var08) { + g_vars->scene06_var14++; + if (g_vars->scene06_var14 >= 600) + sceneHandler06_sub03(); + } + } else { + g_vars->scene06_mumsyJumpFw->_percent = 0; + g_vars->scene06_mumsyJumpBk->_percent = 0; + } + + if (g_vars->scene06_var11) { + g_vars->scene06_var03 = g_vars->scene06_var11->_ox - g_vars->scene06_var17; + g_vars->scene06_var04 = g_vars->scene06_var11->_oy - g_vars->scene06_var18; + + g_vars->scene06_var11->setOXY(g_vars->scene06_var03, g_vars->scene06_var04); + + if (g_vars->scene06_var17 >= 2) + g_vars->scene06_var17 -= 2; + + g_vars->scene06_var18 -= 5; + + sceneHandler06_sub04(g_vars->scene06_var17); + } + if (g_vars->scene06_var07 + && !g_vars->scene06_var09 + && !g_vars->scene06_var10 + && !g_vars->scene06_var11 + && g_vars->scene06_var12 >= 15 + && !g_vars->scene06_ballDrop->_movement + && !g_vars->scene06_mumsy->_movement + && !g_vars->scene06_var16) + sceneHandler06_sub01(); + g_fullpipe->_behaviorManager->updateBehaviors(); + g_fullpipe->startSceneTrack(); + + return res; + } + } + + return 0; +} + } // End of namespace Fullpipe |