diff options
author | Eugene Sandulenko | 2014-04-03 23:23:29 +0300 |
---|---|---|
committer | Eugene Sandulenko | 2014-04-03 23:23:29 +0300 |
commit | 2657322f87c6dbf34705838430e9d8373c3f0877 (patch) | |
tree | 6dc9664170e85990d384390265a25413849c814d /engines/fullpipe | |
parent | 70923015f079b72edcff0019840d0b954e5ce249 (diff) | |
download | scummvm-rg350-2657322f87c6dbf34705838430e9d8373c3f0877.tar.gz scummvm-rg350-2657322f87c6dbf34705838430e9d8373c3f0877.tar.bz2 scummvm-rg350-2657322f87c6dbf34705838430e9d8373c3f0877.zip |
FULLPIPE: Implement sceneHandler29_winArcade()
Diffstat (limited to 'engines/fullpipe')
-rw-r--r-- | engines/fullpipe/scenes/scene29.cpp | 89 |
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() { |