diff options
-rw-r--r-- | engines/fullpipe/scenes.cpp | 26 | ||||
-rw-r--r-- | engines/fullpipe/scenes.h | 2 | ||||
-rw-r--r-- | engines/fullpipe/scenes/scene29.cpp | 2 |
3 files changed, 26 insertions, 4 deletions
diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index 3abb03d1ae..47c6a3c8cd 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -1465,8 +1465,30 @@ Ball *BallChain::sub04(Ball *ballP, Ball *ballN) { return pTail; } -void BallChain::sub05(Ball *ball) { - warning("STUB: BallChain::sub05"); +void BallChain::removeBall(Ball *ball) { + if (ball == pHead) + pHead = ball->p0; + else + ball->p1->p0 = ball->p0; + + if (ball == field_8) + field_8 = ball->p1; + else + ball->p0->p1 = ball->p1; + + ball->p0 = pTail; + pTail = ball; + + numBalls--; + + if (!numBalls) { + numBalls = 0; + pTail = 0; + field_8 = 0; + pHead = 0; + free(cPlex); + cPlex = 0; + } } diff --git a/engines/fullpipe/scenes.h b/engines/fullpipe/scenes.h index 517576c6f3..0b7c4e7c8f 100644 --- a/engines/fullpipe/scenes.h +++ b/engines/fullpipe/scenes.h @@ -232,7 +232,7 @@ struct BallChain { void init(Ball **ball); Ball *sub04(Ball *ballP, Ball *ballN); - void sub05(Ball *ball); + void removeBall(Ball *ball); void reset() { pHead = 0; pTail = 0; field_8 = 0; numBalls = 0; free(cPlex); cPlex = 0; cPlexLen = 0; } }; diff --git a/engines/fullpipe/scenes/scene29.cpp b/engines/fullpipe/scenes/scene29.cpp index dbd753a133..2d5127137d 100644 --- a/engines/fullpipe/scenes/scene29.cpp +++ b/engines/fullpipe/scenes/scene29.cpp @@ -641,7 +641,7 @@ void sceneHandler29_ballHitCheck() { g_vars->scene29_redBalls.field_8 = newball; - g_vars->scene29_flyingRedBalls.sub05(ball); + g_vars->scene29_flyingRedBalls.removeBall(ball); sceneHandler29_manHit(); |