diff options
author | Eugene Sandulenko | 2014-04-02 15:10:11 +0300 |
---|---|---|
committer | Eugene Sandulenko | 2014-04-02 15:10:28 +0300 |
commit | 9aa17f4cdea68d3e86190016cf6fea9bbf0e6674 (patch) | |
tree | 6d2852f013961f67e8fe4a29ec61c9e1ffd7b565 /engines/fullpipe/scenes | |
parent | c08a4fdba13319b1af96e120297d4aee792f360f (diff) | |
download | scummvm-rg350-9aa17f4cdea68d3e86190016cf6fea9bbf0e6674.tar.gz scummvm-rg350-9aa17f4cdea68d3e86190016cf6fea9bbf0e6674.tar.bz2 scummvm-rg350-9aa17f4cdea68d3e86190016cf6fea9bbf0e6674.zip |
FULLPIPE: Implement sceneHandler29_sub03()
Diffstat (limited to 'engines/fullpipe/scenes')
-rw-r--r-- | engines/fullpipe/scenes/scene29.cpp | 162 |
1 files changed, 147 insertions, 15 deletions
diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp index 21454906d7..c89385057b 100644 --- a/engines/fullpipe/scenes/scene29.cpp +++ b/engines/fullpipe/scenes/scene29.cpp @@ -452,8 +452,154 @@ void sceneHandler29_manHit() { } } +void sceneHandler29_assHitRed() { + if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) { + g_vars->scene29_ass->changeStatics2(ST_ASS_NORM); + g_vars->scene29_ass->startAnim(MV_ASS_HITRED, 0, -1); + } +} + +void sceneHandler29_assHitGreen() { + if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) { + g_vars->scene29_ass->changeStatics2(ST_ASS_NORM); + g_vars->scene29_ass->startAnim(MV_ASS_HITGREEN, 0, -1); + } +} + void sceneHandler29_sub03() { - warning("STUB: sceneHandler29_sub03()"); + Ball *ball = g_vars->scene29_var08.pHead; + Ball *newball; + int x, y; + + while (ball) { + x = ball->ani->_ox - 30; + y = ball->ani->_oy; + + if (x >= 186) { + if (sceneHandler29_sub16(ball->ani, x)) { + newball = g_vars->scene29_var05.sub04(g_vars->scene29_var05.field_8, 0); + newball->ani = ball->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; + + if (ball == g_vars->scene29_var08.pHead) + g_vars->scene29_var08.pHead = ball->p0; + else + ball->p1->p0 = ball->p0; + + if (ball == g_vars->scene29_var08.field_8) + g_vars->scene29_var08.field_8 = ball->p1; + else + ball->p0->p1 = ball->p1; + + g_vars->scene29_var08.init(&ball); + + sceneHandler29_manHit(); + + g_fp->playSound(SND_29_014, 0); + + ball->ani->startAnim(MV_SHG_HITMAN, 0, -1); + + g_vars->scene29_var18 = ball->ani->_id; + } else { + ball->ani->setOXY(x, y); + } + } else { + newball = g_vars->scene29_var05.sub04(g_vars->scene29_var05.field_8, 0); + newball->ani = ball->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; + + ball->ani->hide(); + + if (ball == g_vars->scene29_var08.pHead) + g_vars->scene29_var08.pHead = ball->p0; + else + ball->p1->p0 = ball->p0; + + if (ball == g_vars->scene29_var08.field_8) + g_vars->scene29_var08.field_8 = ball->p1; + else + ball->p0->p1 = ball->p1; + + g_vars->scene29_var08.init(&ball); + + sceneHandler29_assHitGreen(); + } + + ball = ball->p0; + } + + ball = g_vars->scene29_var07.pHead; + + while (ball) { + x = ball->ani->_ox - 30; + y = ball->ani->_oy; + + if (x >= 147) { + if (sceneHandler29_sub15(ball->ani, x)) { + newball = g_vars->scene29_var06.sub04(g_vars->scene29_var06.field_8, 0); + newball->ani = ball->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_var07.sub05(ball); + + sceneHandler29_manHit(); + + g_fp->playSound(SND_29_027, 0); + + ball->ani->startAnim(MV_SHR_HITMAN, 0, -1); + + g_vars->scene29_var18 = ball->ani->_id; + } else { + ball->ani->setOXY(x, y); + } + } else { + newball = g_vars->scene29_var06.sub04(g_vars->scene29_var06.field_8, 0); + newball->ani = ball->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; + + ball->ani->hide(); + + if (ball == g_vars->scene29_var07.pHead) + g_vars->scene29_var07.pHead = ball->p0; + else + ball->p1->p0 = ball->p0; + + if (ball == g_vars->scene29_var07.field_8) + g_vars->scene29_var07.field_8 = ball->p1; + else + ball->p0->p1 = ball->p1; + + g_vars->scene29_var07.init(&ball); + + sceneHandler29_assHitRed(); + } + + ball = ball->p0; + } } void sceneHandler29_manFromL() { @@ -603,20 +749,6 @@ void sceneHandler29_sub07() { g_fp->_aniMan->setOXY(g_vars->scene29_var20, g_vars->scene29_var21); } -void sceneHandler29_assHitGreen() { - if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) { - g_vars->scene29_ass->changeStatics2(ST_ASS_NORM); - g_vars->scene29_ass->startAnim(MV_ASS_HITGREEN, 0, -1); - } -} - -void sceneHandler29_assHitRed() { - if (g_vars->scene29_ass->_statics->_staticsId == ST_ASS_NORM) { - g_vars->scene29_ass->changeStatics2(ST_ASS_NORM); - g_vars->scene29_ass->startAnim(MV_ASS_HITRED, 0, -1); - } -} - void sceneHandler29_shoot() { if (g_vars->scene29_var10 && g_vars->scene29_var20 < 1310) { if (g_fp->_rnd->getRandomNumber(1) || g_vars->scene29_shooter1->_movement || g_vars->scene29_shooter1->_statics->_staticsId != ST_STR1_RIGHT) { |