aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/fullpipe/constants.h13
-rw-r--r--engines/fullpipe/gameloader.cpp4
-rw-r--r--engines/fullpipe/gameloader.h1
-rw-r--r--engines/fullpipe/scenes.cpp14
-rw-r--r--engines/fullpipe/scenes.h21
-rw-r--r--engines/fullpipe/scenes/scene06.cpp309
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