aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe/scenes
diff options
context:
space:
mode:
authorEugene Sandulenko2014-04-03 23:23:29 +0300
committerEugene Sandulenko2014-04-03 23:23:29 +0300
commit2657322f87c6dbf34705838430e9d8373c3f0877 (patch)
tree6dc9664170e85990d384390265a25413849c814d /engines/fullpipe/scenes
parent70923015f079b72edcff0019840d0b954e5ce249 (diff)
downloadscummvm-rg350-2657322f87c6dbf34705838430e9d8373c3f0877.tar.gz
scummvm-rg350-2657322f87c6dbf34705838430e9d8373c3f0877.tar.bz2
scummvm-rg350-2657322f87c6dbf34705838430e9d8373c3f0877.zip
FULLPIPE: Implement sceneHandler29_winArcade()
Diffstat (limited to 'engines/fullpipe/scenes')
-rw-r--r--engines/fullpipe/scenes/scene29.cpp89
1 files changed, 88 insertions, 1 deletions
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp
index e02a34e14d..b8747aa424 100644
--- a/engines/fullpipe/scenes/scene29.cpp
+++ b/engines/fullpipe/scenes/scene29.cpp
@@ -172,7 +172,94 @@ void scene29_initScene(Scene *sc) {
}
void sceneHandler29_winArcade() {
- warning("STUB: sceneHandler29_winArcade()");
+ if (g_vars->scene29_shooter2->_flags & 4) {
+ g_vars->scene29_var13 = 0;
+
+ g_vars->scene29_shooter1->changeStatics2(ST_STR1_STAND);
+ g_vars->scene29_shooter2->changeStatics2(ST_STR2_STAND);
+
+ g_vars->scene29_shooter2->_flags &= 0xFFFB;
+
+ StaticANIObject *ani;
+ Ball *newball, *ball, *oldp0;
+
+ while (g_vars->scene29_var08.numBalls) {
+ ball = g_vars->scene29_var08.pHead;
+ ani = g_vars->scene29_var08.pHead->ani;
+ oldp0 = g_vars->scene29_var08.pHead->p0;
+ g_vars->scene29_var08.pHead = g_vars->scene29_var08.pHead->p0;
+
+ if (g_vars->scene29_var08.pHead)
+ oldp0->p1 = 0;
+ else
+ g_vars->scene29_var08.field_8 = 0;
+
+ ball->p0 = g_vars->scene29_var08.pTail;
+ g_vars->scene29_var08.pTail = ball;
+ g_vars->scene29_var08.numBalls--;
+
+ if (!g_vars->scene29_var08.numBalls)
+ g_vars->scene29_var08.reset();
+
+ ani->hide();
+
+ newball = g_vars->scene29_var05.sub04(g_vars->scene29_var05.field_8, 0);
+ newball->ani = ani;
+
+ if (g_vars->scene29_var05.field_8)
+ g_vars->scene29_var05.field_8->p0 = newball;
+ else
+ g_vars->scene29_var05.pHead = newball;
+
+ g_vars->scene29_var05.field_8 = newball;
+ }
+
+ while (g_vars->scene29_var07.numBalls) {
+ ball = g_vars->scene29_var07.pHead;
+ ani = g_vars->scene29_var07.pHead->ani;
+ oldp0 = g_vars->scene29_var07.pHead->p0;
+ g_vars->scene29_var07.pHead = g_vars->scene29_var07.pHead->p0;
+
+ if (g_vars->scene29_var07.pHead)
+ oldp0->p1 = 0;
+ else
+ g_vars->scene29_var07.field_8 = 0;
+
+ ball->p0 = g_vars->scene29_var07.pTail;
+ g_vars->scene29_var07.pTail = ball;
+ g_vars->scene29_var07.numBalls--;
+
+ if (!g_vars->scene29_var07.numBalls) {
+ g_vars->scene29_var07.numBalls = 0;
+ g_vars->scene29_var07.pTail = 0;
+ g_vars->scene29_var07.field_8 = 0;
+ g_vars->scene29_var07.pHead = 0;
+
+ free(g_vars->scene29_var07.cPlex);
+
+ g_vars->scene29_var07.cPlex = 0;
+ }
+
+ ani->hide();
+
+ newball = g_vars->scene29_var06.sub04(g_vars->scene29_var06.field_8, 0);
+ newball->ani = ani;
+
+ if (g_vars->scene29_var06.field_8)
+ g_vars->scene29_var06.field_8->p0 = newball;
+ else
+ g_vars->scene29_var06.pHead = newball;
+
+ g_vars->scene29_var06.field_8 = newball;
+ }
+
+ g_vars->scene29_ass->queueMessageQueue(0);
+ g_vars->scene29_ass->_flags &= 0xFFFB;
+
+ chainQueue(QU_SC29_ESCAPE, 1);
+ }
+
+ g_fp->setObjectState(sO_LeftPipe_29, g_fp->getObjectEnumState(sO_LeftPipe_29, sO_IsOpened));
}
void sceneHandler29_shootGreen() {