aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/fullpipe/constants.h13
-rw-r--r--engines/fullpipe/scenes.cpp3
-rw-r--r--engines/fullpipe/scenes.h3
-rw-r--r--engines/fullpipe/scenes/scene25.cpp245
4 files changed, 264 insertions, 0 deletions
diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h
index 906f5b48a1..1c7779a02b 100644
--- a/engines/fullpipe/constants.h
+++ b/engines/fullpipe/constants.h
@@ -869,11 +869,24 @@ namespace Fullpipe {
#define ANI_INV_LOPAT 1920
#define ANI_INV_SWAB 1917
#define ANI_WATER25 1856
+#define MSG_BRD_TURN 4877
+#define MSG_SC25_ENTERMAN 1861
+#define MSG_SC25_ENTERTRUBA 4214
+#define MSG_SC25_STARTBEARDEDS 3423
+#define MSG_SC25_STOPBEARDEDS 3424
+#define MSG_SC25_TOLADDER 4215
#define MV_BRD25_RIGHT 1899
#define rMV_BRD25_RIGHT 1903
+#define MV_WTR25_FLOW 1857
+#define PIC_SC25_LADDERDOWN 1855
+#define PIC_SC25_LADDERUP 1854
+#define PIC_SC25_RTRUBA 1853
#define QU_DRP25_TOFLOOR 3502
#define QU_DRP25_TOWATER 3504
#define SND_25_006 4059
+#define SND_25_025 4874
+#define SND_25_026 4875
+#define SND_25_027 4876
#define SND_25_029 5174
#define ST_DRP25_EMPTY 3501
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp
index 67035b8ff4..7d6b2e23fb 100644
--- a/engines/fullpipe/scenes.cpp
+++ b/engines/fullpipe/scenes.cpp
@@ -293,6 +293,9 @@ Vars::Vars() {
scene25_var07 = 0;
scene25_var08 = 0;
scene25_var09 = 0;
+ scene25_var10 = 0;
+ scene25_var11 = 0;
+ scene25_var12 = 0;
scene30_leg = 0;
scene30_liftFlag = 1;
diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h
index a7653d001b..d01fd62fab 100644
--- a/engines/fullpipe/scenes.h
+++ b/engines/fullpipe/scenes.h
@@ -407,6 +407,9 @@ public:
int scene25_var07;
int scene25_var08;
int scene25_var09;
+ int scene25_var10;
+ int scene25_var11;
+ int scene25_var12;
StaticANIObject *scene30_leg;
int scene30_liftFlag;
diff --git a/engines/fullpipe/scenes/scene25.cpp b/engines/fullpipe/scenes/scene25.cpp
index 7f747d7541..9ff710b03a 100644
--- a/engines/fullpipe/scenes/scene25.cpp
+++ b/engines/fullpipe/scenes/scene25.cpp
@@ -128,4 +128,249 @@ void scene25_setupWater(Scene *a1, int entranceId) {
}
}
+void sceneHandler25_stopBearders() {
+ warning("STUB: sceneHandler25_stopBearders()");
+}
+
+void sceneHandler25_startBearders() {
+ warning("STUB: sceneHandler25_startBearders()");
+}
+
+void sceneHandler25_enterMan() {
+ warning("STUB: sceneHandler25_enterMan()");
+}
+
+void sceneHandler25_enterTruba() {
+ warning("STUB: sceneHandler25_enterTruba()");
+}
+
+void sceneHandler25_toLadder() {
+ warning("STUB: sceneHandler25_toLadder()");
+}
+
+void sceneHandler25_animateBearders() {
+ warning("STUB: sceneHandler25_animateBearders()");
+}
+
+void sceneHandler25_sneeze() {
+ warning("STUB: sceneHandler25_sneeze()");
+}
+
+void sceneHandler25_rowShovel() {
+ warning("STUB: sceneHandler25_rowShovel()");
+}
+
+void sceneHandler25_rowHand() {
+ warning("STUB: sceneHandler25_rowHand()");
+}
+
+void sceneHandler25_putBoard() {
+ warning("STUB: sceneHandler25_putBoard()");
+}
+
+void sceneHandler25_tryWater() {
+ warning("STUB: sceneHandler25_tryWater()");
+}
+
+void sceneHandler25_tryRow(int code) {
+ warning("STUB: sceneHandler25_tryRow()");
+}
+
+void sceneHandler25_ladderUp() {
+ warning("STUB: sceneHandler25_ladderUp()");
+}
+
+void sceneHandler25_backToPipe() {
+ warning("STUB: sceneHandler25_backToPipe()");
+}
+
+void sceneHandler25_sub01() {
+ warning("STUB: sceneHandler25_sub01()");
+}
+
+bool sceneHandler25_sub02(ExCommand *cmd) {
+ warning("STUB: sceneHandler25_sub02()");
+
+ return false;
+}
+
+void sceneHandler25_sub03() {
+ warning("STUB: sceneHandler25_sub03()");
+}
+
+void sceneHandler25_sub04() {
+ warning("STUB: sceneHandler25_sub04()");
+}
+
+int sceneHandler25(ExCommand *cmd) {
+ if (cmd->_messageKind != 17)
+ return 0;
+
+ switch (cmd->_messageNum) {
+ case MSG_SC25_STOPBEARDEDS:
+ sceneHandler25_stopBearders();
+ break;
+
+ case MSG_SC25_STARTBEARDEDS:
+ sceneHandler25_startBearders();
+ break;
+
+ case MSG_SC25_ENTERMAN:
+ sceneHandler25_enterMan();
+ break;
+
+ case MSG_SC25_ENTERTRUBA:
+ sceneHandler25_enterTruba();
+ break;
+
+ case MSG_SC25_TOLADDER:
+ sceneHandler25_toLadder();
+ break;
+
+ case MSG_BRD_TURN:
+ switch (g_fp->_rnd->getRandomNumber(3)) {
+ case 0:
+ g_fp->playSound(SND_25_025, 0);
+ break;
+
+ case 1:
+ g_fp->playSound(SND_25_026, 0);
+ break;
+
+ default:
+ g_fp->playSound(SND_25_027, 0);
+ break;
+ }
+ break;
+
+ case 33:
+ if (g_fp->_aniMan2) {
+ int x = g_fp->_aniMan2->_ox;
+ int y = g_fp->_aniMan2->_oy;
+
+ if (x < g_fp->_sceneRect.left + g_vars->scene25_var01)
+ g_fp->_currentScene->_x = x - g_vars->scene25_var03 - g_fp->_sceneRect.left;
+
+ if (x > g_fp->_sceneRect.right - g_vars->scene25_var01)
+ g_fp->_currentScene->_x = x + g_vars->scene25_var03 - g_fp->_sceneRect.right;
+
+ if (!g_vars->scene25_var06) {
+ if (y < g_fp->_sceneRect.top + g_vars->scene25_var02)
+ g_fp->_currentScene->_y = y - g_vars->scene25_var04 - g_fp->_sceneRect.top;
+
+ if (y > g_fp->_sceneRect.bottom - g_vars->scene25_var02)
+ g_fp->_currentScene->_y = y + g_vars->scene25_var04 - g_fp->_sceneRect.bottom;
+ }
+ }
+
+ if (g_vars->scene25_var08) {
+ g_vars->scene25_var09++;
+
+ if (g_vars->scene25_var09 >= 120)
+ sceneHandler25_animateBearders();
+ }
+
+ g_fp->_behaviorManager->updateBehaviors();
+ g_fp->startSceneTrack();
+
+ if (g_vars->scene25_var06 && !g_vars->scene25_water->_movement)
+ g_vars->scene25_water->startAnim(MV_WTR25_FLOW, 0, -1);
+
+ if (g_vars->scene25_var05 && !g_fp->_aniMan->_movement && g_vars->scene25_var12)
+ sceneHandler25_sneeze();
+
+ g_vars->scene25_var12 = 1;
+
+ if (g_vars->scene25_board->_flags & 4) {
+ if (!g_vars->scene25_board->_movement) {
+ if (g_vars->scene25_board->_statics->_staticsId & 0x4000)
+ g_vars->scene25_board->startAnim(rMV_BRD25_RIGHT, 0, -1);
+ else
+ g_vars->scene25_board->startAnim(MV_BRD25_RIGHT, 0, -1);
+ }
+ }
+ break;
+
+ case 29:
+ {
+ int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
+
+ if (!g_vars->scene25_var06) {
+ if ((picId == PIC_SC25_LADDERUP || picId == PIC_SC25_LADDERDOWN) && sceneHandler25_sub02(cmd))
+ cmd->_messageKind = 0;
+
+ break;
+ }
+
+ StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY);
+
+ if (ani) {
+ if (g_fp->_aniMan != ani) {
+ if (g_fp->_aniMan->isIdle()) {
+ if (!(g_fp->_aniMan->_flags & 0x100)) {
+ if (ani->_id == ANI_WATER25) {
+ if (g_vars->scene25_var05) {
+ if (cmd->_keyCode == ANI_INV_LOPAT)
+ sceneHandler25_rowShovel();
+
+ if (!cmd->_keyCode)
+ sceneHandler25_rowHand();
+ } else {
+ if (cmd->_keyCode == ANI_INV_BOARD)
+ sceneHandler25_putBoard();
+
+ if (!cmd->_keyCode)
+ sceneHandler25_tryWater();
+ }
+ } else if (ani->_id == ANI_BOARD25) {
+ sceneHandler25_tryRow(cmd->_keyCode);
+ break;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ if (picId == PIC_SC25_LADDERUP && sceneHandler25_sub02(cmd))
+ cmd->_messageKind = 0;
+
+ if (!g_fp->_aniMan->isIdle() || (g_fp->_aniMan->_flags & 0x100))
+ break;
+
+ if (g_vars->scene25_var05) {
+ if (picId == PIC_SC25_RTRUBA && !cmd->_keyCode) {
+ sceneHandler25_enterTruba();
+ break;
+ }
+ } else {
+ if (picId != PIC_SC25_RTRUBA) {
+ if (picId == PIC_SC25_LADDERUP && !cmd->_keyCode)
+ sceneHandler25_ladderUp();
+ break;
+ }
+
+ if (!cmd->_keyCode) {
+ sceneHandler25_backToPipe();
+ break;
+ }
+ }
+ if (g_vars->scene25_var05) {
+ if (picId != PIC_SC25_LADDERUP || cmd->_keyCode)
+ break;
+
+ sceneHandler25_toLadder();
+ break;
+ }
+
+ if (picId == PIC_SC25_LADDERUP && !cmd->_keyCode)
+ sceneHandler25_ladderUp();
+
+ break;
+ }
+ }
+
+ return 0;
+}
+
} // End of namespace Fullpipe