aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe
diff options
context:
space:
mode:
authorEugene Sandulenko2014-02-20 22:29:30 +0200
committerEugene Sandulenko2014-02-20 22:29:50 +0200
commit906140e752d0084d7d7e2ec0c59cafcaed06843a (patch)
tree80d63b8f1092d5afe19500a1482203fff3450559 /engines/fullpipe
parent808a59bdf26ce1bac620c9d6e9a67b815d22696a (diff)
downloadscummvm-rg350-906140e752d0084d7d7e2ec0c59cafcaed06843a.tar.gz
scummvm-rg350-906140e752d0084d7d7e2ec0c59cafcaed06843a.tar.bz2
scummvm-rg350-906140e752d0084d7d7e2ec0c59cafcaed06843a.zip
FULLPIPE: Implement sceneHandler09_eatBall()
Diffstat (limited to 'engines/fullpipe')
-rw-r--r--engines/fullpipe/scenes/scene09.cpp59
1 files changed, 58 insertions, 1 deletions
diff --git a/engines/fullpipe/scenes/scene09.cpp b/engines/fullpipe/scenes/scene09.cpp
index f8a78bedff..7952985633 100644
--- a/engines/fullpipe/scenes/scene09.cpp
+++ b/engines/fullpipe/scenes/scene09.cpp
@@ -301,7 +301,64 @@ void sceneHandler09_spitterClick() {
}
void sceneHandler09_eatBall() {
- warning("STUB: sceneHandler09_eatBall()");
+ if (g_vars->scene09_flyingBall) {
+ g_vars->scene09_flyingBall->hide();
+
+ Ball *ball = g_vars->scene09_balls.pHead;
+ if (ball) {
+ while (ball && ball->ani != g_vars->scene09_flyingBall)
+ ball = ball->p0;
+
+ if (ball) {
+ if (ball == g_vars->scene09_balls.pHead)
+ g_vars->scene09_balls.pHead = ball->p0;
+ else
+ ball->p1->p0 = ball->p0;
+
+ if (ball == g_vars->scene09_balls.field_8)
+ g_vars->scene09_balls.field_8 = ball->p1;
+ else
+ ball->p0->p1 = ball->p1;
+
+ ball->p0 = g_vars->scene09_balls.pTail;
+ g_vars->scene09_balls.pTail = ball;
+
+ g_vars->scene09_balls.numBalls--;
+
+ if (!g_vars->scene09_balls.numBalls)
+ g_vars->scene09_balls.reset();
+ }
+ }
+
+ ball = g_vars->scene09_var07.sub04(g_vars->scene09_var07.field_8, 0);
+ ball->ani = g_vars->scene09_flyingBall;
+
+ if (g_vars->scene09_var07.field_8)
+ g_vars->scene09_var07.field_8->p0 = ball;
+ else
+ g_vars->scene09_var07.pHead = ball;
+
+ g_vars->scene09_var07.field_8 = ball;
+
+ g_vars->scene09_flyingBall = 0;
+ g_vars->scene09_var05++;
+
+ if (g_vars->scene09_var05 >= 3) {
+ MessageQueue *mq = g_vars->scene09_glotatel->getMessageQueue();
+
+ if (mq) {
+ ExCommand *ex = new ExCommand(ANI_GLOTATEL, 1, MV_GLT_FLYAWAY, 0, 0, 0, 1, 0, 0, 0);
+ ex->_excFlags |= 2;
+
+ mq->addExCommandToEnd(ex);
+ }
+
+ g_fp->setObjectState(sO_Jug, g_fp->getObjectEnumState(sO_Jug, sO_Unblocked));
+ g_fp->setObjectState(sO_RightStairs_9, g_fp->getObjectEnumState(sO_RightStairs_9, sO_IsOpened));
+
+ g_vars->scene09_var08 = 0;
+ }
+ }
}
void sceneHandler09_showBall() {